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 992eee5..0a6a4b9 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 ded989a..1f15116 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;