2011-11-23 Thomas Klein <th.r.klein@web.de>
authorRichard Earnshaw <richard.earnshaw@arm.com>
Wed, 23 Nov 2011 10:50:53 +0000 (10:50 +0000)
committerRichard Earnshaw <richard.earnshaw@arm.com>
Wed, 23 Nov 2011 10:50:53 +0000 (10:50 +0000)
* config/tc-arm.c (do_t_mov_cmp): Prevent emitting code for MOV
with two low register at arch v4t or v5t when assember using
unified syntax.

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

index e385881..9348a20 100644 (file)
@@ -1,3 +1,9 @@
+2011-11-23  Thomas Klein  <th.r.klein@web.de>
+
+       * config/tc-arm.c (do_t_mov_cmp): Prevent emitting code for MOV
+       with two low register at arch v4t or v5t when assember using
+       unified syntax.
+
 2011-11-21  DJ Delorie  <dj@redhat.com>
 
        * config/rl78-defs.h (rl78_error): Add "const".
index e8040c3..bf44228 100644 (file)
@@ -10913,6 +10913,11 @@ do_t_mov_cmp (void)
        switch (inst.instruction)
          {
          case T_MNEM_mov:
+           /* In v4t or v5t a move of two lowregs produces unpredictable
+              results. Don't allow this.*/
+           constraint (low_regs && !ARM_CPU_HAS_FEATURE (selected_cpu,
+                       arm_ext_v6),"MOV Rd, Rs with two low registers is not "
+                       "permitted on this architecture");
            inst.instruction = T_OPCODE_MOV_HR;
            inst.instruction |= (Rn & 0x8) << 4;
            inst.instruction |= (Rn & 0x7);