diff options
author | Delia Burduv <Delia.Burduv@arm.com> | 2019-10-30 13:23:35 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2019-10-30 13:23:35 +0000 |
commit | 1820262bc909121a408e030195789a70513b9139 (patch) | |
tree | 8e02ca27c07cf6fb65fc65c240bdef1d555449c4 /gas/testsuite | |
parent | 864619bb2e68e4ec8fa5bcfc87b00bf6667601e3 (diff) | |
download | gdb-1820262bc909121a408e030195789a70513b9139.zip gdb-1820262bc909121a408e030195789a70513b9139.tar.gz gdb-1820262bc909121a408e030195789a70513b9139.tar.bz2 |
Modify the ARNM assembler to accept the omission of the immediate argument for the writeback form of the LDRAA and LDRAB mnemonics
This is a shorthand for the immediate argument being 0, as described here:
https://developer.arm.com/docs/ddi0596/latest/base-instructions-alphabetic-order/ldraa-ldrab-load-register-with-pointer-authentication
This is because the instructions still have a use with an immediate
argument of 0, unlike loads without the PAC functionality. Currently,
the mnemonics are
LDRAA Xt, [Xn, #<simm10>]!
LDRAB Xt, [Xn, #<simm10>]!
After this patch they become
LDRAA Xt, [Xn {, #<simm10>}]!
LDRAB Xt, [Xn {, #<simm10>}]!
gas * config/tc-aarch64.c (parse_address_main): Accept the omission of
the immediate argument for ldraa and ldrab as a shorthand for the
immediate being 0.
* testsuite/gas/aarch64/ldraa-ldrab-no-offset.d: New test.
* testsuite/gas/aarch64/ldraa-ldrab-no-offset.s: New test.
* testsuite/gas/aarch64/illegal-ldraa.s: Modified to accept the
writeback form with no offset.
* testsuite/gas/aarch64/illegal-ldraa.s: Removed missing offset
error.
opcodes * aarch64-opc.c (print_immediate_offset_address): Don't print the
immediate for the writeback form of ldraa/ldrab if it is 0.
* aarch64-tbl.h: Updated the documentation for ADDR_SIMM10.
* aarch64-opc-2.c: Regenerated.
Diffstat (limited to 'gas/testsuite')
-rw-r--r-- | gas/testsuite/gas/aarch64/illegal-ldraa.l | 52 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/illegal-ldraa.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.d | 13 | ||||
-rw-r--r-- | gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.s | 7 |
4 files changed, 45 insertions, 29 deletions
diff --git a/gas/testsuite/gas/aarch64/illegal-ldraa.l b/gas/testsuite/gas/aarch64/illegal-ldraa.l index e3f81c5..33fae2f 100644 --- a/gas/testsuite/gas/aarch64/illegal-ldraa.l +++ b/gas/testsuite/gas/aarch64/illegal-ldraa.l @@ -6,30 +6,28 @@ [^:]+:13: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#5555\]' [^:]+:14: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#-4104\]' [^:]+:15: Error: 64-bit integer or SP register expected at operand 2 -- `ldraa x0,\[xz\]' -[^:]+:16: Error: missing offset in the pre-indexed address at operand 2 -- `ldraa x0,\[x1\]!' -[^:]+:17: Error: invalid expression in the address at operand 2 -- `ldraa x0,\[sp\],' -[^:]+:18: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#1\]!' -[^:]+:19: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#4\]!' -[^:]+:20: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#-10\]!' -[^:]+:21: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#4096\]!' -[^:]+:22: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#5555\]!' -[^:]+:23: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#-4104\]!' -[^:]+:24: Error: 64-bit integer or SP register expected at operand 2 -- `ldraa x0,\[xz\]' -[^:]+:25: Error: invalid addressing mode at operand 2 -- `ldraa x0,\[x1\],#8' -[^:]+:28: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#1\]' -[^:]+:29: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#4\]' -[^:]+:30: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#-10\]' -[^:]+:31: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#4096\]' -[^:]+:32: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#5555\]' -[^:]+:33: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#-4104\]' -[^:]+:34: Error: 64-bit integer or SP register expected at operand 2 -- `ldrab x0,\[xz\]' -[^:]+:35: Error: missing offset in the pre-indexed address at operand 2 -- `ldrab x0,\[x1\]!' -[^:]+:36: Error: invalid expression in the address at operand 2 -- `ldrab x0,\[sp\],' -[^:]+:37: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#1\]!' -[^:]+:38: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#4\]!' -[^:]+:39: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#-10\]!' -[^:]+:40: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#4096\]!' -[^:]+:41: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#5555\]!' -[^:]+:42: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#-4104\]!' -[^:]+:43: Error: 64-bit integer or SP register expected at operand 2 -- `ldrab x0,\[xz\]' -[^:]+:44: Error: invalid addressing mode at operand 2 -- `ldrab x0,\[x1\],#8' +[^:]+:16: Error: invalid expression in the address at operand 2 -- `ldraa x0,\[sp\],' +[^:]+:17: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#1\]!' +[^:]+:18: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#4\]!' +[^:]+:19: Error: immediate value must be a multiple of 8 at operand 2 -- `ldraa x0,\[x1,#-10\]!' +[^:]+:20: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#4096\]!' +[^:]+:21: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#5555\]!' +[^:]+:22: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldraa x0,\[x1,#-4104\]!' +[^:]+:23: Error: 64-bit integer or SP register expected at operand 2 -- `ldraa x0,\[xz\]' +[^:]+:24: Error: invalid addressing mode at operand 2 -- `ldraa x0,\[x1\],#8' +[^:]+:27: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#1\]' +[^:]+:28: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#4\]' +[^:]+:29: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#-10\]' +[^:]+:30: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#4096\]' +[^:]+:31: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#5555\]' +[^:]+:32: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#-4104\]' +[^:]+:33: Error: 64-bit integer or SP register expected at operand 2 -- `ldrab x0,\[xz\]' +[^:]+:34: Error: invalid expression in the address at operand 2 -- `ldrab x0,\[sp\],' +[^:]+:35: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#1\]!' +[^:]+:36: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#4\]!' +[^:]+:37: Error: immediate value must be a multiple of 8 at operand 2 -- `ldrab x0,\[x1,#-10\]!' +[^:]+:38: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#4096\]!' +[^:]+:39: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#5555\]!' +[^:]+:40: Error: immediate offset out of range -4096 to 4088 at operand 2 -- `ldrab x0,\[x1,#-4104\]!' +[^:]+:41: Error: 64-bit integer or SP register expected at operand 2 -- `ldrab x0,\[xz\]' +[^:]+:42: Error: invalid addressing mode at operand 2 -- `ldrab x0,\[x1\],#8' diff --git a/gas/testsuite/gas/aarch64/illegal-ldraa.s b/gas/testsuite/gas/aarch64/illegal-ldraa.s index 93a8cf5..3e6ebf5 100644 --- a/gas/testsuite/gas/aarch64/illegal-ldraa.s +++ b/gas/testsuite/gas/aarch64/illegal-ldraa.s @@ -13,7 +13,6 @@ ldraa x0, [x1,#5555] ldraa x0, [x1,#-4104] ldraa x0, [xz] - ldraa x0, [x1]! ldraa x0, [sp], ldraa x0, [x1,#1]! ldraa x0, [x1,#4]! @@ -32,7 +31,6 @@ ldrab x0, [x1,#5555] ldrab x0, [x1,#-4104] ldrab x0, [xz] - ldrab x0, [x1]! ldrab x0, [sp], ldrab x0, [x1,#1]! ldrab x0, [x1,#4]! diff --git a/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.d b/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.d new file mode 100644 index 0000000..4146f76 --- /dev/null +++ b/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.d @@ -0,0 +1,13 @@ +#as: -march=armv8.3-a +#objdump: -dr + +.*: .* + + +Disassembly of section \.text: + +0+ <.*>: +.*: f8200c01 ldraa x1, \[x0]! +.*: f8a00c02 ldrab x2, \[x0]! +.*: f8200c01 ldraa x1, \[x0]! +.*: f8a00c02 ldrab x2, \[x0]! diff --git a/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.s b/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.s new file mode 100644 index 0000000..d0694c90 --- /dev/null +++ b/gas/testsuite/gas/aarch64/ldraa-ldrab-no-offset.s @@ -0,0 +1,7 @@ +.text + + ldraa x1, [x0]! + ldrab x2, [x0]! + + ldraa x1, [x0, #0]! + ldrab x2, [x0, #0]! |