diff options
author | Srinath Parvathaneni <srinath.parvathaneni@arm.com> | 2020-10-22 13:24:34 +0100 |
---|---|---|
committer | Srinath Parvathaneni <srinath.parvathaneni@arm.com> | 2020-10-22 13:30:35 +0100 |
commit | 79248c83b9d08813ef3a533c21b194147c90582e (patch) | |
tree | 344e7c1f329405239c19ef45ade8b28aa1b8b3c1 /gas/config/tc-arm.c | |
parent | 9ef6c56ffc7e79cd5c276f8548b66ce70e524302 (diff) | |
download | gdb-79248c83b9d08813ef3a533c21b194147c90582e.zip gdb-79248c83b9d08813ef3a533c21b194147c90582e.tar.gz gdb-79248c83b9d08813ef3a533c21b194147c90582e.tar.bz2 |
arm: Fix the wrong error message string for mve vldr/vstr (PR26763).
For mve vldr/vstr instructions assembler is throwing wrong error message.
Instead of 'Error: syntax error' assembler fails with 'Error: lo register required'.
This patch fixes the issue.
eg:
$ cat x.s
.syntax unified
.thumb
vldrb.s16 q0, r0
Before this patch:
$ arm-none-eabi-as x.s -march=armv8.1-m.main+mve -mfloat-abi=hard
x.s: Assembler messages:
x.s:4: Error: lo register required -- `vldrb.s16 q0,r0'
After this patch:
$ arm-none-eabi-as x.s -march=armv8.1-m.main+mve -mfloat-abi=hard
x.s: Assembler messages:
x.s:4: Error: syntax error -- `vldrb.s16 q0,r0'
gas/ChangeLog:
2020-10-21 Srinath Parvathaneni <srinath.parvathaneni@arm.com>
PR target/26763
* config/tc-arm.c (parse_address_main): Add new MVE addressing mode
check.
* testsuite/gas/arm/mve-vldr-vstr-bad.d: New test.
* testsuite/gas/arm/mve-vldr-vstr-bad.l: Likewise.
* testsuite/gas/arm/mve-vldr-vstr-bad.s: Likewise.
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index f7911b7..71d826b 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -5936,7 +5936,15 @@ parse_address_main (char **str, int i, int group_relocations, if (skip_past_char (&p, '[') == FAIL) { - if (skip_past_char (&p, '=') == FAIL) + if (group_type == GROUP_MVE + && (reg = arm_reg_parse (&p, REG_TYPE_RN)) != FAIL) + { + /* [r0-r15] expected as argument but receiving r0-r15 without + [] brackets. */ + inst.error = BAD_SYNTAX; + return PARSE_OPERAND_FAIL; + } + else if (skip_past_char (&p, '=') == FAIL) { /* Bare address - translate to PC-relative offset. */ inst.relocs[0].pc_rel = 1; |