From ad44cc6645aa1ca852db8588c287cde8c0f141a9 Mon Sep 17 00:00:00 2001 From: mgretton Date: Thu, 1 Jul 2010 10:02:43 +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 | 27 +++++++++++++++++++++++++++ gas/testsuite/gas/arm/thumb2_bad_reg.l | 12 +++++++++++- gas/testsuite/gas/arm/thumb2_bad_reg.s | 12 ++++++++++-- 5 files changed, 71 insertions(+), 6 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 854f350a8a..887d7cef2d 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 81378687b2..67b36d5999 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 2198986133..0fb9b723dc 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,30 @@ +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. + * gas/maxq10/bits.d, * gas/maxq10/bits.s, * gas/maxq10/call.d, + * gas/maxq10/call.s, * gas/maxq10/data.s, * gas/maxq10/data2.d, + * gas/maxq10/data2.s, * gas/maxq10/data3.d, * gas/maxq10/data3.s, + * gas/maxq10/err.s, * gas/maxq10/jump.d, * gas/maxq10/jump.s, + * gas/maxq10/logical.d, * gas/maxq10/logical.s, * gas/maxq10/math.d, + * gas/maxq10/math.s, * gas/maxq10/pmtest.d, * gas/maxq10/pmtest.s, + * gas/maxq10/range.d, * gas/maxq10/range.s: Likewise. + * gas/maxq20/maxq20.exp: Delete file. + * gas/maxq20/bits.d, * gas/maxq20/bits.s, * gas/maxq20/call.d, + * gas/maxq20/call.s, * gas/maxq20/data1.d, * gas/maxq20/data1.s, + * gas/maxq20/data2.d, * gas/maxq20/data2.s, * gas/maxq20/data3.d, + * gas/maxq20/data3.s, * gas/maxq20/jump.d, * gas/maxq20/jump.s, + * gas/maxq20/jzimm.d, * gas/maxq20/jzimm.s, * gas/maxq20/logical.d, + * gas/maxq20/logical.s, * gas/maxq20/math.d, * gas/maxq20/math.s, + * gas/maxq20/pfx2.s, * gas/maxq20/pmtest.d, * gas/maxq20/pmtest.s, + * gas/maxq20/pxf0.s, * gas/maxq20/range.d, + * gas/maxq20/range.s: Likewise. + * gas/all/gas.exp: Remove references to maxq. + 2010-06-28 Matthew Gretton-Dann * gas/arm/neon-ldst-align-bad.l: Update for Neon alignment syntax fix. diff --git a/gas/testsuite/gas/arm/thumb2_bad_reg.l b/gas/testsuite/gas/arm/thumb2_bad_reg.l index 1da7bac76b..2679e591a6 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 20a26e0902..f1b1c0b742 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.11.0