* gas/config/tc-arm.c (do_t_mov_cmp): Fix reporting of unpredictable and
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Thu, 1 Jul 2010 10:02:46 +0000 (10:02 +0000)
committerMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Thu, 1 Jul 2010 10:02:46 +0000 (10:02 +0000)
deprecated mov register instructions.
* gas/testsuite/gas/arm/thumb2_bad_reg.s: Update mov register tests.
* gas/testsuite/gas/arm/thumb2_bad_reg.l: Likewise.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/thumb2_bad_reg.l
gas/testsuite/gas/arm/thumb2_bad_reg.s

index 854f350a8a0ee5ff0948dde9688a8f46e5f95b91..887d7cef2d5f2e384de76698cede76fe5d3d1b61 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-01  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * config/tc-arm.c (do_t_mov_cmp): Fix reporting of unpredictable and
+       deprecated mov register instructions.
+
 2010-07-01  Alan Modra  <amodra@gmail.com>
 
        * config/tc-ppc.c (toc_reloc_types): New variable.
index 81378687b2aec21f5c75faa61e17ee391ce8d08d..67b36d5999ac0741263be3e522847b28b62320bb 100644 (file)
@@ -10273,9 +10273,24 @@ do_t_mov_cmp (void)
                  reject_bad_reg (Rn);
                  reject_bad_reg (Rm);
                }
-             else if ((Rn == REG_SP || Rn == REG_PC)
-                      && (Rm == REG_SP || Rm == REG_PC))
-               reject_bad_reg (Rm);
+             else if (narrow)
+               {
+                 /* This is mov.n.  */
+                 if ((Rn == REG_SP || Rn == REG_PC)
+                     && (Rm == REG_SP || Rm == REG_PC))
+                   {
+                     as_warn (_("Use of r%u as a source register is "
+                                "deprecated when r%u is the destination "
+                                "register."), Rm, Rn);
+                   }
+               }
+             else
+               {
+                 /* This is mov.w.  */
+                 constraint (Rn == REG_PC, BAD_PC);
+                 constraint (Rm == REG_PC, BAD_PC);
+                 constraint (Rn == REG_SP && Rm == REG_SP, BAD_SP);
+               }
            }
          else
            reject_bad_reg (Rn);
index fcfd2858be8fb51d7cb4b0321949f49afbaccd9e..0fb9b723dc6f575547671a925e30a21835dddee4 100644 (file)
@@ -1,3 +1,8 @@
+2010-07-01  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       * gas/arm/thumb2_bad_reg.s: Update mov register tests.
+       * gas/arm/thumb2_bad_reg.l: Likewise.
+
 2010-06-29  Alan Modra  <amodra@gmail.com>
 
        * gas/maxq10/maxq10.exp: Delete file.
index 1da7bac76b18e63414f151a3c2f279c4dea71d81..2679e591a6e52aa35443f8ebfb9ddb3d32c1190e 100644 (file)
 [^:]*:[0-9]+: Error: r15 not allowed here -- `mls r0,r0,r0,r15'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `mov.w r13,#1'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r15,#1'
+[^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r0,r15'
+[^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r15,r0'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `movs.w r0,r13'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `movs.w r0,r15'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `movs.w r13,r0'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `movs.w r15,r0'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `mov.w r13,r13'
-[^:]*:[0-9]+: Error: r13 not allowed here -- `mov.w r15,r13'
+[^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r15,r13'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r13,r15'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `mov.w r15,r15'
+[^:]*:[0-9]+: Warning: Use of r13 as a source register is deprecated when r13 is the destination register.
+[^:]*:[0-9]+: Warning: Use of r13 as a source register is deprecated when r15 is the destination register.
+[^:]*:[0-9]+: Warning: Use of r15 as a source register is deprecated when r13 is the destination register.
+[^:]*:[0-9]+: Warning: Use of r15 as a source register is deprecated when r15 is the destination register.
+[^:]*:[0-9]+: Error: r13 not allowed here -- `movs r13,r13'
+[^:]*:[0-9]+: Error: r15 not allowed here -- `movs r15,r13'
+[^:]*:[0-9]+: Error: r13 not allowed here -- `movs r13,r15'
+[^:]*:[0-9]+: Error: r15 not allowed here -- `movs r15,r15'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `movt r13,#1'
 [^:]*:[0-9]+: Error: r15 not allowed here -- `movt r15,#1'
 [^:]*:[0-9]+: Error: r13 not allowed here -- `mrc p0,#1,r13,cr0,cr0'
index 20a26e09021a93541f5e4cd31128d40424f06123..f1b1c0b7423785ac81b78215b0bffa6222454168 100644 (file)
@@ -191,8 +191,8 @@ test:
        mov r13, r0                     @ OK
        mov r15, r0                     @ OK
        mov.w r0, r13                   @ OK
-       mov.w r0, r15                   @ OK
-       mov.w r15, r0                   @ OK
+       mov.w r0, r15
+       mov.w r15, r0
        mov.w r13, r0                   @ OK
        movs.w r0, r13
        movs.w r0, r15
@@ -202,6 +202,14 @@ test:
        mov.w r15, r13
        mov.w r13, r15
        mov.w r15, r15
+       mov r13, r13                    @ Deprecated
+       mov r15, r13                    @ Deprecated
+       mov r13, r15                    @ Deprecated
+       mov r15, r15                    @ Deprecated
+       movs r13, r13
+       movs r15, r13
+       movs r13, r15
+       movs r15, r15
        @ MOVT
        movt r13, #1
        movt r15, #1