aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2011-10-18 14:41:55 +0000
committerJulian Brown <julian@codesourcery.com>2011-10-18 14:41:55 +0000
commita415b1cd634be934d9d8b0ab73b942fc3af61db9 (patch)
tree28a268b903b0d50f37d78bfb06f048006a5f216a /gas
parent4af315526a36b17da6e2f2661d3c21efe935b5fb (diff)
downloadgdb-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')
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-arm.c13
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/arm/adrl.d6
-rw-r--r--gas/testsuite/gas/arm/immed2.d8
-rw-r--r--gas/testsuite/gas/arm/immed2.s4
6 files changed, 37 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 4c43c77..1dbb3dc 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2011-10-18 Jie Zhang <jie@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * config/tc-arm.c (parse_shifter_operand): Fix handling of explicit
+ rotation.
+ (encode_arm_shifter_operand): Likewise.
+
2011-10-13 James Greenhalgh <james.greenhalgh@arm.com>
* config/tc-arm.c (check_ldr_r15_aligned): New.
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. */
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index a162952..5de442f 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2011-10-18 Jie Zhang <jie@codesourcery.com>
+ Julian Brown <julian@codesourcery.com>
+
+ * gas/arm/adrl.d: Adjust.
+ * gas/arm/immed2.d: New test.
+ * gas/arm/immed2.s: New test.
+
2011-10-13 James Greenhalgh <james.greenhalgh@arm.com>
* gas/arm/ldr-bad.s: New testcase.
diff --git a/gas/testsuite/gas/arm/adrl.d b/gas/testsuite/gas/arm/adrl.d
index 3261311..6276e8d 100644
--- a/gas/testsuite/gas/arm/adrl.d
+++ b/gas/testsuite/gas/arm/adrl.d
@@ -8,9 +8,9 @@
Disassembly of section .text:
...
0+2000 <.*> e24f0008 sub r0, pc, #8
-0+2004 <.*> e2400c20 sub r0, r0, #8192 ; 0x2000
+0+2004 <.*> e2400c20 sub r0, r0, #32, 24 ; 0x2000
0+2008 <.*> e28f0020 add r0, pc, #32
-0+200c <.*> e2800c20 add r0, r0, #8192 ; 0x2000
+0+200c <.*> e2800c20 add r0, r0, #32, 24 ; 0x2000
0+2010 <.*> e24f0018 sub r0, pc, #24
0+2014 <.*> e1a00000 nop ; \(mov r0, r0\)
0+2018 <.*> e28f0008 add r0, pc, #8
@@ -18,7 +18,7 @@ Disassembly of section .text:
0+2020 <.*> 028f0000 addeq r0, pc, #0
0+2024 <.*> e1a00000 nop ; \(mov r0, r0\)
0+2028 <.*> e24f0030 sub r0, pc, #48 ; 0x30
-0+202c <.*> e2400c20 sub r0, r0, #8192 ; 0x2000
+0+202c <.*> e2400c20 sub r0, r0, #32, 24 ; 0x2000
0+2030 <.*> e28f0c21 add r0, pc, #8448 ; 0x2100
0+2034 <.*> e1a00000 nop ; \(mov r0, r0\)
...
diff --git a/gas/testsuite/gas/arm/immed2.d b/gas/testsuite/gas/arm/immed2.d
new file mode 100644
index 0000000..49fa895
--- /dev/null
+++ b/gas/testsuite/gas/arm/immed2.d
@@ -0,0 +1,8 @@
+# name: modified immediate constants
+# as:
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+0000 <[^>]+> b351029c ? cmplt r1, #156, 4 ; 0xc0000009
diff --git a/gas/testsuite/gas/arm/immed2.s b/gas/testsuite/gas/arm/immed2.s
new file mode 100644
index 0000000..0365236
--- /dev/null
+++ b/gas/testsuite/gas/arm/immed2.s
@@ -0,0 +1,4 @@
+@ Tests for modified immediate constants with specified rotate
+ .text
+bar:
+ cmplt r1, #0x9c, 4