Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/arm Add more instructions including ldrex/strex...
details: https://anonhg.NetBSD.org/src/rev/8a707e32a0f7
branches: trunk
changeset: 327259:8a707e32a0f7
user: matt <matt%NetBSD.org@localhost>
date: Mon Mar 03 08:51:39 2014 +0000
description:
Add more instructions including ldrex/strex variants
diffstat:
sys/arch/arm/arm/disassem.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diffs (59 lines):
diff -r 94a38eebadeb -r 8a707e32a0f7 sys/arch/arm/arm/disassem.c
--- a/sys/arch/arm/arm/disassem.c Mon Mar 03 08:50:48 2014 +0000
+++ b/sys/arch/arm/arm/disassem.c Mon Mar 03 08:51:39 2014 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: disassem.c,v 1.23 2014/01/10 23:52:53 matt Exp $ */
+/* $NetBSD: disassem.c,v 1.24 2014/03/03 08:51:39 matt Exp $ */
/*
* Copyright (c) 1996 Mark Brinicombe.
@@ -49,7 +49,7 @@
#include <sys/param.h>
-__KERNEL_RCSID(0, "$NetBSD: disassem.c,v 1.23 2014/01/10 23:52:53 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disassem.c,v 1.24 2014/03/03 08:51:39 matt Exp $");
#include <sys/systm.h>
@@ -122,6 +122,9 @@
static const struct arm32_insn arm32_i[] = {
{ 0x0fffffff, 0x0ff00000, "imb", "c" }, /* Before swi */
{ 0x0fffffff, 0x0ff00001, "imbrange", "c" }, /* Before swi */
+ { 0x0fffffff, 0x0320f003, "yield", "" }, /* Before swi */
+ { 0x0fffffff, 0x0320f002, "wfe", "" }, /* Before swi */
+ { 0x0fffffff, 0x0320f003, "wfi", "" }, /* Before swi */
{ 0x0f000000, 0x0f000000, "swi", "c" },
{ 0xfe000000, 0xfa000000, "blx", "t" }, /* Before b and bl */
{ 0x0f000000, 0x0a000000, "b", "b" },
@@ -140,10 +143,20 @@
{ 0x0c500000, 0x04100000, "ldr", "daW" },
{ 0x0c500000, 0x04400000, "strb", "daW" },
{ 0x0c500000, 0x04500000, "ldrb", "daW" },
+ { 0x0fff0000, 0x092d0000, "push", "l" }, /* separate out r13 base */
+ { 0x0fff0000, 0x08bd0000, "pop", "l" }, /* separate out r13 base */
{ 0x0e1f0000, 0x080d0000, "stm", "YnWl" },/* separate out r13 base */
{ 0x0e1f0000, 0x081d0000, "ldm", "YnWl" },/* separate out r13 base */
{ 0x0e100000, 0x08000000, "stm", "XnWl" },
{ 0x0e100000, 0x08100000, "ldm", "XnWl" },
+ { 0x0ff00fff, 0x01900f9f, "ldrex", "da" },
+ { 0x0ff00fff, 0x01b00f9f, "ldrexd", "da" },
+ { 0x0ff00fff, 0x01d00f9f, "ldrexb", "da" },
+ { 0x0ff00fff, 0x01f00f9f, "ldrexh", "da" },
+ { 0x0ff00ff0, 0x01800f90, "strex", "dma" },
+ { 0x0ff00ff0, 0x01a00f90, "strexd", "dma" },
+ { 0x0ff00ff0, 0x01c00f90, "strexb", "dma" },
+ { 0x0ff00ff0, 0x01e00f90, "strexh", "dma" },
{ 0x0e1000f0, 0x00100090, "ldrb", "de" },
{ 0x0e1000f0, 0x00000090, "strb", "de" },
{ 0x0e1000f0, 0x001000d0, "ldrsb", "de" },
@@ -667,7 +680,8 @@
di->di_printaddr(loc + 8);
} else {
di->di_printf("[r%d", (insn >> 16) & 0x0f);
- if ((insn & 0x03000fff) != 0x01000000) {
+ if ((insn & 0x03000fff) != 0x01000000
+ && (insn & 0x0f800ff0) != 0x01800f90) {
di->di_printf("%s, ", (insn & (1 << 24)) ? "" : "]");
if (!(insn & 0x00800000))
di->di_printf("-");
Home |
Main Index |
Thread Index |
Old Index