From 76fa04a48e54c68fa6f16db02634b86ff340b98e Mon Sep 17 00:00:00 2001 From: Matthew Gretton-Dann Date: Thu, 1 Jul 2010 10:02:46 +0000 Subject: [PATCH] * gas/config/tc-arm.c (do_t_mov_cmp): Fix reporting of unpredictable and 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 | 5 +++++ gas/config/tc-arm.c | 21 ++++++++++++++++++--- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/thumb2_bad_reg.l | 12 +++++++++++- gas/testsuite/gas/arm/thumb2_bad_reg.s | 12 ++++++++++-- 5 files changed, 49 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 854f350a8a0..887d7cef2d5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2010-07-01 Matthew Gretton-Dann + + * config/tc-arm.c (do_t_mov_cmp): Fix reporting of unpredictable and + deprecated mov register instructions. + 2010-07-01 Alan Modra * config/tc-ppc.c (toc_reloc_types): New variable. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 81378687b2a..67b36d5999a 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -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); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index fcfd2858be8..0fb9b723dc6 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-07-01 Matthew Gretton-Dann + + * gas/arm/thumb2_bad_reg.s: Update mov register tests. + * gas/arm/thumb2_bad_reg.l: Likewise. + 2010-06-29 Alan Modra * gas/maxq10/maxq10.exp: Delete file. diff --git a/gas/testsuite/gas/arm/thumb2_bad_reg.l b/gas/testsuite/gas/arm/thumb2_bad_reg.l index 1da7bac76b1..2679e591a6e 100644 --- a/gas/testsuite/gas/arm/thumb2_bad_reg.l +++ b/gas/testsuite/gas/arm/thumb2_bad_reg.l @@ -137,14 +137,24 @@ [^:]*:[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' diff --git a/gas/testsuite/gas/arm/thumb2_bad_reg.s b/gas/testsuite/gas/arm/thumb2_bad_reg.s index 20a26e09021..f1b1c0b7423 100644 --- a/gas/testsuite/gas/arm/thumb2_bad_reg.s +++ b/gas/testsuite/gas/arm/thumb2_bad_reg.s @@ -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 -- 2.30.2