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 Decode movw/movt



details:   https://anonhg.NetBSD.org/src/rev/33ea087efbfe
branches:  trunk
changeset: 789152:33ea087efbfe
user:      matt <matt%NetBSD.org@localhost>
date:      Fri Aug 09 07:11:39 2013 +0000

description:
Decode movw/movt

diffstat:

 sys/arch/arm/arm/disassem.c |  44 ++++++++++++++++++++++++++------------------
 1 files changed, 26 insertions(+), 18 deletions(-)

diffs (84 lines):

diff -r 1f29868dee50 -r 33ea087efbfe sys/arch/arm/arm/disassem.c
--- a/sys/arch/arm/arm/disassem.c       Fri Aug 09 06:00:09 2013 +0000
+++ b/sys/arch/arm/arm/disassem.c       Fri Aug 09 07:11:39 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: disassem.c,v 1.20 2012/12/18 06:31:58 matt Exp $       */
+/*     $NetBSD: disassem.c,v 1.21 2013/08/09 07:11:39 matt Exp $       */
 
 /*
  * Copyright (c) 1996 Mark Brinicombe.
@@ -49,7 +49,7 @@
 
 #include <sys/param.h>
 
-__KERNEL_RCSID(0, "$NetBSD: disassem.c,v 1.20 2012/12/18 06:31:58 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disassem.c,v 1.21 2013/08/09 07:11:39 matt Exp $");
 
 #include <sys/systm.h>
 #include <arch/arm/arm/disassem.h>
@@ -106,6 +106,7 @@
  * W - writeback flag
  * X - block transfer type
  * Y - block transfer type (r13 base)
+ * Z - 16-bit value (movw,movt)
  * # - co-processor number
  */
 
@@ -153,27 +154,29 @@
     { 0x0ff00ff0, 0x01400090, "swpb",  "dmo" },
     { 0x0fbf0fff, 0x010f0000, "mrs",   "dp" }, /* Before data processing */
     { 0x0fb0fff0, 0x0120f000, "msr",   "pFm" },/* Before data processing */
-    { 0x0fb0f000, 0x0320f000, "msr",   "pF2" },/* Before data processing */
+    { 0x0fe0f000, 0x0320f000, "msr",   "pF2" },/* Before data processing */
     { 0x0ffffff0, 0x012fff10, "bx",    "m" },
     { 0x0fff0ff0, 0x016f0f10, "clz",   "dm" },
     { 0x0ffffff0, 0x012fff30, "blx",   "m" },
     { 0xfff000f0, 0xe1200070, "bkpt",  "k" },
-    { 0x0de00000, 0x00000000, "and",   "Sdn2" },
-    { 0x0de00000, 0x00200000, "eor",   "Sdn2" },
-    { 0x0de00000, 0x00400000, "sub",   "Sdn2" },
-    { 0x0de00000, 0x00600000, "rsb",   "Sdn2" },
-    { 0x0de00000, 0x00800000, "add",   "Sdn2" },
-    { 0x0de00000, 0x00a00000, "adc",   "Sdn2" },
-    { 0x0de00000, 0x00c00000, "sbc",   "Sdn2" },
-    { 0x0de00000, 0x00e00000, "rsc",   "Sdn2" },
-    { 0x0df00000, 0x01100000, "tst",   "Dn2" },
-    { 0x0df00000, 0x01300000, "teq",   "Dn2" },
-    { 0x0de00000, 0x01400000, "cmp",   "Dn2" },
-    { 0x0de00000, 0x01600000, "cmn",   "Dn2" },
-    { 0x0de00000, 0x01800000, "orr",   "Sdn2" },
+    { 0x0fe00000, 0x02000000, "and",   "Sdn2" },
+    { 0x0fe00000, 0x02200000, "eor",   "Sdn2" },
+    { 0x0fe00000, 0x02400000, "sub",   "Sdn2" },
+    { 0x0fe00000, 0x02600000, "rsb",   "Sdn2" },
+    { 0x0fe00000, 0x02800000, "add",   "Sdn2" },
+    { 0x0fe00000, 0x02a00000, "adc",   "Sdn2" },
+    { 0x0fe00000, 0x02c00000, "sbc",   "Sdn2" },
+    { 0x0fe00000, 0x02e00000, "rsc",   "Sdn2" },
+    { 0x0ff00000, 0x03000000, "movw",  "dZ" },
+    { 0x0ff00000, 0x03100000, "tst",   "Dn2" },
+    { 0x0ff00000, 0x03300000, "teq",   "Dn2" },
+    { 0x0ff00000, 0x03400000, "movt",  "dZ" },
+    { 0x0ff00000, 0x03500000, "cmp",   "Dn2" },
+    { 0x0ff00000, 0x03700000, "cmn",   "Dn2" },
+    { 0x0fe00000, 0x03800000, "orr",   "Sdn2" },
     { 0x0de00000, 0x01a00000, "mov",   "Sd2" },
-    { 0x0de00000, 0x01c00000, "bic",   "Sdn2" },
-    { 0x0de00000, 0x01e00000, "mvn",   "Sd2" },
+    { 0x0fe00000, 0x03c00000, "bic",   "Sdn2" },
+    { 0x0fe00000, 0x03e00000, "mvn",   "Sd2" },
     { 0x0ff08f10, 0x0e000100, "adf",   "PRfgh" },
     { 0x0ff08f10, 0x0e100100, "muf",   "PRfgh" },
     { 0x0ff08f10, 0x0e200100, "suf",   "PRfgh" },
@@ -468,6 +471,11 @@
                case 'Y':
                        di->di_printf("%s", insn_stkblktrans(insn));
                        break;
+               /* Z - print movw/movt argument */
+               case 'Z':
+                       di->di_printf(", #0x%04x",
+                           ((insn & 0xf0000) >> 4) | (insn & 0xfff));
+                       break;
                /* c - comment field bits(0-23) */
                case 'c':
                        di->di_printf("0x%08x", (insn & 0x00ffffff));



Home | Main Index | Thread Index | Old Index