diff options
author | Thomas Preud'homme <thomas.preudhomme@arm.com> | 2017-04-24 14:49:48 +0100 |
---|---|---|
committer | Thomas Preud'homme <thomas.preudhomme@arm.com> | 2017-04-24 14:51:24 +0100 |
commit | 534455547021f3262fa60d32cabb626af01692a3 (patch) | |
tree | 56f3cfbe134996bbf893b8b65630b79705313db1 /gdb/language.c | |
parent | 8b353c47b70568ab9f0cfd619b7a19e931c2b0c8 (diff) | |
download | gdb-534455547021f3262fa60d32cabb626af01692a3.zip gdb-534455547021f3262fa60d32cabb626af01692a3.tar.gz gdb-534455547021f3262fa60d32cabb626af01692a3.tar.bz2 |
[GAS/ARM] Fix expansion of ldr pseudo instruction
The LDR rX, =cst pseudo-instruction suffers from two issues for loading
integer constants in Thumb mode:
- movs is used if the constant and register can be encoded using that
instruction which leads to unexpected behavior due to its flag-setting
behavior
- mov.w, movw and mvn are used for r13 (sp) and r15 (pc) but these
encoding are marked as UNPREDICTABLE
This patch fixes those issues and update testing accordingly.
2017-04-24 Thomas Preud'homme <thomas.preudhomme@arm.com>
gas/
* config/tc-arm.c (move_or_literal_pool): Remove code generating MOVS.
Forbid MOV.W and MOVW if destination is SP or PC.
* testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.s: Explain
expectation of LDR not generating a MOVS for low registers and small
constants. Add tests of MOVW generation.
* testsuite/gas/arm/thumb2_ldr_immediate_highregs_armv6t2.d: Update
expected disassembly.
Diffstat (limited to 'gdb/language.c')
0 files changed, 0 insertions, 0 deletions