Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/matt-nb6-plus]: src/gnu/dist/binutils/gas/config Add support for push/po...



details:   https://anonhg.NetBSD.org/src/rev/1471b181ce7d
branches:  matt-nb6-plus
changeset: 774544:1471b181ce7d
user:      matt <matt%NetBSD.org@localhost>
date:      Thu Feb 07 01:42:08 2013 +0000

description:
Add support for push/pop register list.

diffstat:

 gnu/dist/binutils/gas/config/tc-arm.c |  50 +++++++++++++++++++++-------------
 1 files changed, 31 insertions(+), 19 deletions(-)

diffs (72 lines):

diff -r 83ed68e8fe11 -r 1471b181ce7d gnu/dist/binutils/gas/config/tc-arm.c
--- a/gnu/dist/binutils/gas/config/tc-arm.c     Thu Feb 07 01:18:07 2013 +0000
+++ b/gnu/dist/binutils/gas/config/tc-arm.c     Thu Feb 07 01:42:08 2013 +0000
@@ -6651,25 +6651,35 @@
 
   skip_whitespace (str);
 
-  if ((base_reg = reg_required_here (&str, 16)) == FAIL)
-    return;
-
-  if (base_reg == REG_PC)
-    {
-      inst.error = _("r15 not allowed as base register");
-      return;
-    }
-
-  skip_whitespace (str);
-
-  if (*str == '!')
-    {
-      inst.instruction |= WRITE_BACK;
-      str++;
-    }
-
-  if (skip_past_comma (&str) == FAIL
-      || (range = reg_list (&str)) == FAIL)
+  base_reg = (inst.instruction >> 16) & 0xf;
+  if (base_reg == 0)
+    {
+      if ((base_reg = reg_required_here (&str, 16)) == FAIL)
+       return;
+
+      if (base_reg == REG_PC)
+       {
+         inst.error = _("r15 not allowed as base register");
+         return;
+       }
+
+      skip_whitespace (str);
+
+      if (*str == '!')
+       {
+         inst.instruction |= WRITE_BACK;
+         str++;
+       }
+
+      if (skip_past_comma (&str) == FAIL)
+       {
+         if (! inst.error)
+           inst.error = BAD_ARGS;
+         return;
+       }
+    }
+
+  if ((range = reg_list (&str)) == FAIL)
     {
       if (! inst.error)
        inst.error = BAD_ARGS;
@@ -9995,11 +10005,13 @@
   {"stmda",      0xe8000000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"stmdb",      0xe9000000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"stmfd",      0xe9000000, 3,  ARM_EXT_V1,       do_ldmstm},
+  {"push",      0xe92d0000, 4,  ARM_EXT_V1,       do_ldmstm},
   {"stmfa",      0xe9800000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"stmea",      0xe8800000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"stmed",      0xe8000000, 3,  ARM_EXT_V1,       do_ldmstm},
 
   {"ldmia",      0xe8900000, 3,  ARM_EXT_V1,       do_ldmstm},
+  {"pop",       0xe8bd0000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"ldmib",      0xe9900000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"ldmda",      0xe8100000, 3,  ARM_EXT_V1,       do_ldmstm},
   {"ldmdb",      0xe9100000, 3,  ARM_EXT_V1,       do_ldmstm},



Home | Main Index | Thread Index | Old Index