Fixes a bug in the ARM port of GAS when parsing inverted register lists.
authorMichael Perkins <perkinsmg75@yahoo.co.uk>
Tue, 10 Mar 2015 11:47:46 +0000 (11:47 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 10 Mar 2015 11:47:46 +0000 (11:47 +0000)
* config/tc-arm.c (parse_operands): Fix bug setting writeback
values for '^' on OP_REGLSTs.
(do_push_pop): Add new writeback constraint.

gas/ChangeLog
gas/config/tc-arm.c

index 992eee58b6d2d378d9b9db0dd57d2d5898ee1709..0a6a4b925486600b4be45a907ce222687a9eed3f 100644 (file)
@@ -1,3 +1,9 @@
+2015-03-10  Michael Perkins  <perkinsmg75@yahoo.co.uk>
+
+       * config/tc-arm.c (parse_operands): Fix bug setting writeback
+       values for '^' on OP_REGLSTs.
+       (do_push_pop): Add new writeback constraint.
+
 2015-03-10  Renlin Li  <renlin.li@arm.com>
 
        * config/tc-arm.c (mapping_state): Remove first MAP_DATA emitting code.
index ded989aa390bd2f92c122d0e5b4ff1a9c3622571..1f1511637beee27843da1a9a788d89b75dd85e4e 100644 (file)
@@ -7038,7 +7038,7 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb)
          val = parse_reg_list (&str);
          if (*str == '^')
            {
-             inst.operands[1].writeback = 1;
+             inst.operands[i].writeback = 1;
              str++;
            }
          break;
@@ -9036,6 +9036,8 @@ do_pli (void)
 static void
 do_push_pop (void)
 {
+  constraint (inst.operands[0].writeback,
+             _("push/pop do not support {reglist}^"));
   inst.operands[1] = inst.operands[0];
   memset (&inst.operands[0], 0, sizeof inst.operands[0]);
   inst.operands[0].isreg = 1;