aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorChristophe Monat <christophe.monat@st.com>2015-11-24 22:17:54 +0100
committerChristophe Lyon <christophe.lyon@linaro.org>2015-11-24 22:21:03 +0100
commit2c32be708da9011b3ce7404f2be43b17ab1eddd4 (patch)
treebe96a1c54e39c74d862c3808da69d262c2af3165 /gas/config
parentbe81798bb66a6f2d007983f466ba4fdeb7141578 (diff)
downloadgdb-2c32be708da9011b3ce7404f2be43b17ab1eddd4.zip
gdb-2c32be708da9011b3ce7404f2be43b17ab1eddd4.tar.gz
gdb-2c32be708da9011b3ce7404f2be43b17ab1eddd4.tar.bz2
[GAS, ARM] Invalid LDR immediate transformation
2015-11-24 Christophe Monat <christophe.monat@st.com> * config/tc-arm.c (move_or_literal_pool): Do not transform ldr ri,=imm into movs when ri is a high register in T1. 2015-11-24 Christophe Monat <christophe.monat@st.com> * gas/arm/thumb2_ldr_immediate_armv6t2.s: Added high register tests. * gas/arm/thumb2_ldr_immediate_armv6t2.d: Accounted for new test cases. * gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s: New. * gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d: New.
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-arm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 23c506d..8ea1e8d 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -7839,7 +7839,8 @@ move_or_literal_pool (int i, enum lit_type t, bfd_boolean mode_3)
{
if (thumb_p)
{
- if ((v & ~0xFF) == 0)
+ /* This can be encoded only for a low register. */
+ if ((v & ~0xFF) == 0 && (inst.operands[i].reg < 8))
{
/* This can be done with a mov(1) instruction. */
inst.instruction = T_OPCODE_MOV_I8 | (inst.operands[i].reg << 8);