diff options
author | Julian Brown <julian@codesourcery.com> | 2011-10-18 14:41:55 +0000 |
---|---|---|
committer | Julian Brown <julian@codesourcery.com> | 2011-10-18 14:41:55 +0000 |
commit | a415b1cd634be934d9d8b0ab73b942fc3af61db9 (patch) | |
tree | 28a268b903b0d50f37d78bfb06f048006a5f216a /gas/config/tc-arm.c | |
parent | 4af315526a36b17da6e2f2661d3c21efe935b5fb (diff) | |
download | gdb-a415b1cd634be934d9d8b0ab73b942fc3af61db9.zip gdb-a415b1cd634be934d9d8b0ab73b942fc3af61db9.tar.gz gdb-a415b1cd634be934d9d8b0ab73b942fc3af61db9.tar.bz2 |
Jie Zhang <jie@codesourcery.com>
Julian Brown <julian@codesourcery.com>
gas/
* config/tc-arm.c (parse_shifter_operand): Fix handling
of explicit rotation.
(encode_arm_shifter_operand): Likewise.
gas/testsuite/
* gas/arm/adrl.d: Adjust.
* gas/arm/immed2.d: New test.
* gas/arm/immed2.s: New test.
ld/testsuite/
* ld-arm/cortex-a8-fix-b-plt.d: Adjust.
* ld-arm/cortex-a8-fix-bcc-plt.d: Adjust.
* ld-arm/cortex-a8-fix-bl-plt.d: Adjust.
* ld-arm/cortex-a8-fix-bl-rel-plt.d: Adjust.
* ld-arm/cortex-a8-fix-blx-plt.d: Adjust.
* ld-arm/ifunc-1.dd: Adjust.
* ld-arm/ifunc-2.dd: Adjust.
* ld-arm/ifunc-3.dd: Adjust.
* ld-arm/ifunc-4.dd: Adjust.
* ld-arm/ifunc-5.dd: Adjust.
* ld-arm/ifunc-6.dd: Adjust.
* ld-arm/ifunc-7.dd: Adjust.
* ld-arm/ifunc-8.dd: Adjust.
* ld-arm/ifunc-9.dd: Adjust.
* ld-arm/ifunc-10.dd: Adjust.
* ld-arm/ifunc-14.dd: Adjust.
* ld-arm/ifunc-15.dd: Adjust.
* ld-arm/ifunc-16.dd: Adjust.
opcodes/
* arm-dis.c (print_insn_arm): Explicitly specify rotation
if needed.
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 8189c51..3871164 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -4884,10 +4884,9 @@ parse_shifter_operand (char **str, int i) return FAIL; } - /* Convert to decoded value. md_apply_fix will put it back. */ - inst.reloc.exp.X_add_number - = (((inst.reloc.exp.X_add_number << (32 - value)) - | (inst.reloc.exp.X_add_number >> value)) & 0xffffffff); + /* Encode as specified. */ + inst.operands[i].imm = inst.reloc.exp.X_add_number | value << 7; + return SUCCESS; } inst.reloc.type = BFD_RELOC_ARM_IMMEDIATE; @@ -7018,7 +7017,11 @@ encode_arm_shifter_operand (int i) encode_arm_shift (i); } else - inst.instruction |= INST_IMMEDIATE; + { + inst.instruction |= INST_IMMEDIATE; + if (inst.reloc.type != BFD_RELOC_ARM_IMMEDIATE) + inst.instruction |= inst.operands[i].imm; + } } /* Subroutine of encode_arm_addr_mode_2 and encode_arm_addr_mode_3. */ |