From d3bfe16eafe8d18afb50e900b79b792ca478321a Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 8 Oct 2013 08:55:41 +0000 Subject: [PATCH] gas/ 2013-10-08 Jan Beulich * gas/config/tc-arm.c (do_t_push_pop): Honor inst.size_req. Simplify LR/PC check. gas/testsuite/ 2013-10-08 Jan Beulich * gas/arm/thumb-w-good.s: Add PUSH.W and POP.W tests. * gas/arm/thumb-w-good.d: Update accordingly. --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 9 ++++----- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/thumb-w-good.d | 4 ++++ gas/testsuite/gas/arm/thumb-w-good.s | 5 +++++ 5 files changed, 23 insertions(+), 5 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index d019f3aea32..3712f8b996f 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2013-10-08 Jan Beulich + + * gas/config/tc-arm.c (do_t_push_pop): Honor inst.size_req. Simplify + LR/PC check. + 2013-10-08 Nick Clifton * config/tc-msp430.c (msp430_operands): Accept ".a" as an alias diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 7a266792b86..f97c3072b42 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -11672,12 +11672,11 @@ do_t_push_pop (void) _("expression too complex")); mask = inst.operands[0].imm; - if ((mask & ~0xff) == 0) + if (inst.size_req != 4 && (mask & ~0xff) == 0) inst.instruction = THUMB_OP16 (inst.instruction) | mask; - else if ((inst.instruction == T_MNEM_push - && (mask & ~0xff) == 1 << REG_LR) - || (inst.instruction == T_MNEM_pop - && (mask & ~0xff) == 1 << REG_PC)) + else if (inst.size_req != 4 + && (mask & ~0xff) == (1 << (inst.instruction == T_MNEM_push + ? REG_LR : REG_PC))) { inst.instruction = THUMB_OP16 (inst.instruction); inst.instruction |= THUMB_PP_PC_LR; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 63f2c178f68..283902161b4 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-08 Jan Beulich + + * gas/arm/thumb-w-good.s: Add PUSH.W and POP.W tests. + * gas/arm/thumb-w-good.d: Update accordingly. + 2013-10-08 Nick Clifton * gas/msp430/bad.s: New test: Checks erroneous size extensions. diff --git a/gas/testsuite/gas/arm/thumb-w-good.d b/gas/testsuite/gas/arm/thumb-w-good.d index d41493f9498..da25e6442a8 100644 --- a/gas/testsuite/gas/arm/thumb-w-good.d +++ b/gas/testsuite/gas/arm/thumb-w-good.d @@ -7,3 +7,7 @@ Disassembly of section .text: 00000000 <.text> f7ff fffe bl 00000000 00000004 <.text\+0x4> f3ef 8000 mrs r0, CPSR +00000008 <.text\+0x8> f84d 0d04 (str(\.w)? r0, \[sp, #-4\]!|push(\.w)? \{r0\}) +0000000c <.text\+0xc> e92d 4001 (stmdb(\.w)? sp!,|push(\.w)?)[ ]+\{r0, lr\} +00000010 <.text\+0x10> f85d 0b04 (ldr(\.w)? r0, \[sp\], #4|pop(\.w)? \{r0\}) +00000014 <.text\+0x14> e8bd 8001 (ldmia(\.w)? sp!,|pop(\.w)?)[ ]+\{r0, pc\} diff --git a/gas/testsuite/gas/arm/thumb-w-good.s b/gas/testsuite/gas/arm/thumb-w-good.s index cbbd07a5731..feebef13a03 100644 --- a/gas/testsuite/gas/arm/thumb-w-good.s +++ b/gas/testsuite/gas/arm/thumb-w-good.s @@ -5,3 +5,8 @@ bl.w foo .arch armv6-m mrs.w r0, apsr +.arch armv6t2 +push.w {r0} +push.w {r0, lr} +pop.w {r0} +pop.w {r0, pc} -- 2.30.2