mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
Allow integer immediates for AArch64 fmov instructions.
This patch makes it possible to use an integer immediate with the fmov instructions allowing you to simply write fmov d0, #2 instead of needing fmov d0, #2.0. The parse double function already know to deal with this so we just need to list the restriction put in place in parser. The is considered a QoL improvement for hand assembly writers and allows more code portability between assembler. gas/ * config/tc-aarch64.c (parse_aarch64_imm_float): Remove restrictions. * testsuite/gas/aarch64/diagnostic.s: Move fmov int test to.. * testsuite/gas/aarch64/fpmov.s: Here. * testsuite/gas/aarch64/fpmov.d: Update results with fmov. * testsuite/gas/aarch64/diagnostic.l: Remove fmov values. * testsuite/gas/aarch64/sve-invalid.s: Update test files. * testsuite/gas/aarch64/sve-invalid.l: Likewise
This commit is contained in:
parent
58ed5c38f5
commit
6688183925
@ -1,3 +1,13 @@
|
||||
2018-05-10 Tamar Christina <tamar.christina@arm.com>
|
||||
|
||||
* config/tc-aarch64.c (parse_aarch64_imm_float): Remove restrictions.
|
||||
* testsuite/gas/aarch64/diagnostic.s: Move fmov int test to..
|
||||
* testsuite/gas/aarch64/fpmov.s: Here.
|
||||
* testsuite/gas/aarch64/fpmov.d: Update results with fmov.
|
||||
* testsuite/gas/aarch64/diagnostic.l: Remove fmov values.
|
||||
* testsuite/gas/aarch64/sve-invalid.s: Update test files.
|
||||
* testsuite/gas/aarch64/sve-invalid.l: Likewise
|
||||
|
||||
2018-05-10 Tamar Christina <tamar.christina@arm.com>
|
||||
|
||||
* gas/config/tc-arm.c (do_neon_mov): Allow integer literal for float
|
||||
|
@ -2279,7 +2279,6 @@ parse_aarch64_imm_float (char **ccp, int *immed, bfd_boolean dp_p,
|
||||
char *str = *ccp;
|
||||
char *fpnum;
|
||||
LITTLENUM_TYPE words[MAX_LITTLENUMS];
|
||||
int found_fpchar = 0;
|
||||
int64_t val = 0;
|
||||
unsigned fpword = 0;
|
||||
bfd_boolean hex_p = FALSE;
|
||||
@ -2309,26 +2308,10 @@ parse_aarch64_imm_float (char **ccp, int *immed, bfd_boolean dp_p,
|
||||
|
||||
hex_p = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (reg_name_p (str, reg_type))
|
||||
{
|
||||
set_recoverable_error (_("immediate operand required"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We must not accidentally parse an integer as a floating-point number.
|
||||
Make sure that the value we parse is not an integer by checking for
|
||||
special characters '.' or 'e'. */
|
||||
for (; *fpnum != '\0' && *fpnum != ' ' && *fpnum != '\n'; fpnum++)
|
||||
if (*fpnum == '.' || *fpnum == 'e' || *fpnum == 'E')
|
||||
{
|
||||
found_fpchar = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!found_fpchar)
|
||||
return FALSE;
|
||||
else if (reg_name_p (str, reg_type))
|
||||
{
|
||||
set_recoverable_error (_("immediate operand required"));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (! hex_p)
|
||||
|
@ -144,10 +144,6 @@
|
||||
[^:]*:256: Error: register element index out of range 0 to 15 at operand 1 -- `ld2 {v0\.b,v1\.b}\[-1\],\[x0\]'
|
||||
[^:]*:259: Error: register element index out of range 0 to 15 at operand 1 -- `ld2 {v0\.b,v1\.b}\[16\],\[x0\]'
|
||||
[^:]*:260: Error: register element index out of range 0 to 15 at operand 1 -- `ld2 {v0\.b,v1\.b}\[67\],\[x0\]'
|
||||
[^:]*:262: Error: invalid floating-point constant at operand 2 -- `fmov d0,#2'
|
||||
[^:]*:263: Error: invalid floating-point constant at operand 2 -- `fmov d0,#-2'
|
||||
[^:]*:264: Error: invalid floating-point constant at operand 2 -- `fmov s0,2'
|
||||
[^:]*:265: Error: invalid floating-point constant at operand 2 -- `fmov s0,-2'
|
||||
[^:]*:267: Error: integer 64-bit register expected at operand 2 -- `st2 {v0.4s,v1.4s},\[sp\],xzr'
|
||||
[^:]*:268: Error: integer or zero register expected at operand 2 -- `str x1,\[x2,sp\]'
|
||||
[^:]*:271: Error: relocation not allowed at operand 3 -- `ldnp x1,x2,\[x3,#:lo12:foo\]'
|
||||
|
@ -259,10 +259,10 @@
|
||||
ld2 {v0.b, v1.b}[16], [x0]
|
||||
ld2 {v0.b, v1.b}[67], [x0]
|
||||
|
||||
fmov d0, #2
|
||||
fmov d0, #-2
|
||||
fmov s0, 2
|
||||
fmov s0, -2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
st2 {v0.4s, v1.4s}, [sp], xzr
|
||||
str x1, [x2, sp]
|
||||
|
@ -17,3 +17,7 @@ Disassembly of section .*:
|
||||
24: 1e69f000 fmov d0, #2\.421875000000000000e-01
|
||||
28: 1e69f000 fmov d0, #2\.421875000000000000e-01
|
||||
2c: 1e29f000 fmov s0, #2\.421875000000000000e-01
|
||||
30: 1e601000 fmov d0, #2\.000000000000000000e\+00
|
||||
34: 1e701000 fmov d0, #-2\.000000000000000000e\+00
|
||||
38: 1e201000 fmov s0, #2\.000000000000000000e\+00
|
||||
3c: 1e301000 fmov s0, #-2\.000000000000000000e\+00
|
||||
|
@ -15,3 +15,8 @@
|
||||
fmov d0, 0.2421875
|
||||
fmov d0, 0x3fcf000000000000
|
||||
fmov s0, 0x3e780000
|
||||
|
||||
fmov d0, #2
|
||||
fmov d0, #-2
|
||||
fmov s0, 2
|
||||
fmov s0, -2
|
||||
|
@ -820,23 +820,19 @@
|
||||
.*: Error: immediate out of range at operand 3 -- `bic z0\.d,z0\.d,#0xd'
|
||||
.*: Error: immediate zero expected at operand 4 -- `fcmeq p0\.s,p1/z,z2\.s,#1'
|
||||
.*: Error: immediate zero expected at operand 4 -- `fcmeq p0\.s,p1/z,z2\.s,#1\.0'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#0'
|
||||
.*: Error: floating-point value must be 0\.5 or 1\.0 at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#0'
|
||||
.*: Error: floating-point value must be 0\.5 or 1\.0 at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#0\.0'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#1'
|
||||
.*: Error: floating-point value must be 0\.5 or 1\.0 at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#1\.5'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#2'
|
||||
.*: Error: floating-point value must be 0\.5 or 1\.0 at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#2'
|
||||
.*: Error: floating-point value must be 0\.5 or 1\.0 at operand 4 -- `fadd z0\.s,p1/m,z0\.s,#2\.0'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#0'
|
||||
.*: Error: floating-point value must be 0\.5 or 2\.0 at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#0'
|
||||
.*: Error: floating-point value must be 0\.5 or 2\.0 at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#0\.0'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#1'
|
||||
.*: Error: floating-point value must be 0\.5 or 2\.0 at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#1'
|
||||
.*: Error: floating-point value must be 0\.5 or 2\.0 at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#1\.0'
|
||||
.*: Error: floating-point value must be 0\.5 or 2\.0 at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#1\.5'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmul z0\.s,p1/m,z0\.s,#2'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#0'
|
||||
.*: Error: floating-point value must be 0\.0 or 1\.0 at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#0\.5'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#1'
|
||||
.*: Error: floating-point value must be 0\.0 or 1\.0 at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#1\.5'
|
||||
.*: Error: invalid floating-point constant at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#2'
|
||||
.*: Error: floating-point value must be 0\.0 or 1\.0 at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#2'
|
||||
.*: Error: floating-point value must be 0\.0 or 1\.0 at operand 4 -- `fmax z0\.s,p1/m,z0\.s,#2\.0'
|
||||
.*: Error: operand 2 must be an enumeration value such as POW2 -- `ptrue p1\.b,vl0'
|
||||
.*: Error: operand 2 must be an enumeration value such as POW2 -- `ptrue p1\.b,vl255'
|
||||
|
@ -914,7 +914,7 @@
|
||||
fadd z0.s, p1/m, z0.s, #0
|
||||
fadd z0.s, p1/m, z0.s, #0.0
|
||||
fadd z0.s, p1/m, z0.s, #0.5 // OK
|
||||
fadd z0.s, p1/m, z0.s, #1
|
||||
fadd z0.s, p1/m, z0.s, #1 // OK
|
||||
fadd z0.s, p1/m, z0.s, #1.0 // OK
|
||||
fadd z0.s, p1/m, z0.s, #1.5
|
||||
fadd z0.s, p1/m, z0.s, #2
|
||||
@ -923,16 +923,16 @@
|
||||
fmul z0.s, p1/m, z0.s, #0
|
||||
fmul z0.s, p1/m, z0.s, #0.0
|
||||
fmul z0.s, p1/m, z0.s, #0.5 // OK
|
||||
fmul z0.s, p1/m, z0.s, #1
|
||||
fmul z0.s, p1/m, z0.s, #1 // OK
|
||||
fmul z0.s, p1/m, z0.s, #1.0
|
||||
fmul z0.s, p1/m, z0.s, #1.5
|
||||
fmul z0.s, p1/m, z0.s, #2
|
||||
fmul z0.s, p1/m, z0.s, #2 // OK
|
||||
fmul z0.s, p1/m, z0.s, #2.0 // OK
|
||||
|
||||
fmax z0.s, p1/m, z0.s, #0
|
||||
fmax z0.s, p1/m, z0.s, #0 // OK
|
||||
fmax z0.s, p1/m, z0.s, #0.0 // OK
|
||||
fmax z0.s, p1/m, z0.s, #0.5
|
||||
fmax z0.s, p1/m, z0.s, #1
|
||||
fmax z0.s, p1/m, z0.s, #1 // OK
|
||||
fmax z0.s, p1/m, z0.s, #1.0 // OK
|
||||
fmax z0.s, p1/m, z0.s, #1.5
|
||||
fmax z0.s, p1/m, z0.s, #2
|
||||
|
Loading…
Reference in New Issue
Block a user