Add assembler and disassembler support for the new Armv8.4-a instructions for AArch64.
Some of these instructions have been back-ported as optional extensions to Armv8.2-a and higher, but others are only available for Armv8.4-a. opcodes/ * aarch64-tbl.h (sha512h, sha512h2, sha512su0, sha512su1, eor3): New. (rax1, xar, bcax, sm3ss1, sm3tt1a, sm3tt1b, sm3tt2a, sm3tt2b): New. (sm3partw1, sm3partw2, sm4e, sm4ekey, fmlal, fmlsl): New. (fmlal2, fmlsl2, cfinv, rmif, setf8, setf16, stlurb): New. (ldapurb, ldapursb, stlurh, ldapurh, ldapursh, stlur): New. (ldapur, ldapursw, stlur): New. * aarch64-dis-2.c: Regenerate. gas/ * testsuite/gas/aarch64/armv8_4-a-illegal.d: New. * testsuite/gas/aarch64/armv8_4-a-illegal.l: New. * testsuite/gas/aarch64/armv8_4-a-illegal.s: New. * testsuite/gas/aarch64/armv8_4-a.d: New. * testsuite/gas/aarch64/armv8_4-a.s: New. * testsuite/gas/aarch64/armv8_2-a-crypto-fp16.s: New. * testsuite/gas/aarch64/armv8_2-a-crypto-fp16.d: New. * testsuite/gas/aarch64/armv8_3-a-crypto-fp16.d: New. * testsuite/gas/aarch64/armv8_4-a-crypto-fp16.d: New. * testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.s: New. * testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.l: New. * testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.d: New.
This commit is contained in:
parent
e849ea896b
commit
e9dbdd80cb
|
@ -1,3 +1,18 @@
|
|||
2017-11-16 Tamar Christina <tamar.christina@arm.com>
|
||||
|
||||
* testsuite/gas/aarch64/armv8_4-a-illegal.d: New.
|
||||
* testsuite/gas/aarch64/armv8_4-a-illegal.l: New.
|
||||
* testsuite/gas/aarch64/armv8_4-a-illegal.s: New.
|
||||
* testsuite/gas/aarch64/armv8_4-a.d: New.
|
||||
* testsuite/gas/aarch64/armv8_4-a.s: New.
|
||||
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16.s: New.
|
||||
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16.d: New.
|
||||
* testsuite/gas/aarch64/armv8_3-a-crypto-fp16.d: New.
|
||||
* testsuite/gas/aarch64/armv8_4-a-crypto-fp16.d: New.
|
||||
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.s: New.
|
||||
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.l: New.
|
||||
* testsuite/gas/aarch64/armv8_2-a-crypto-fp16-illegal.d: New.
|
||||
|
||||
2017-11-16 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* testsuite/gas/i386/noextreg.s: Add tests with register index
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
#as: -march=armv8.2-a+crypto+sm4+sha3
|
||||
#source: armv8_2-a-illegal.s
|
||||
#error-output: armv8_2-a-illegal.l
|
|
@ -0,0 +1,25 @@
|
|||
[^:]+: Assembler messages:
|
||||
[^:]+:[0-9]+: Error: operand 1 must be a floating-point register -- `sha512h X0,Q0,V1.2D'
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `sha512h Q0,Q1,V2.16B'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: sha512h q0, q1, v2.2d
|
||||
[^:]+:[0-9]+: Error: operand 1 must be a floating-point register -- `sha512h2 X0,Q0,V1.2D'
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `sha512h2 Q0,Q1,V2.16B'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: sha512h2 q0, q1, v2.2d
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `sha512su0 V1.2D,v2.16B'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: sha512su0 v1.2d, v2.2d
|
||||
[^:]+:[0-9]+: Error: invalid use of vector register at operand 1 -- `sha512su0 V0,V2.2D'
|
||||
[^:]+:[0-9]+: Error: operand 1 must be a SIMD vector register -- `sha512su1 X0,X1,X2'
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `sha512su1 V1.2D,V2.16B,V2.2D'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: sha512su1 v1.2d, v2.2d, v2.2d
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `eor3 V1.2D,V2.2D,V3.2D,V4.2D'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: eor3 v1.16b, v2.16b, v3.16b, v4.16b
|
||||
[^:]+:[0-9]+: Error: operand mismatch -- `rax1 V0.4S,V2.4S,V3.4S'
|
||||
[^:]+:[0-9]+: Info: did you mean this\?
|
||||
[^:]+:[0-9]+: Info: rax1 v0.2d, v2.2d, v3.2d
|
||||
[^:]+:[0-9]+: Error: immediate value out of range 0 to 63 at operand 4 -- `xar v0.2d,v1.2d,v3.2d,128'
|
||||
[^:]+:[0-9]+: Error: immediate value out of range 0 to 63 at operand 4 -- `xar v0.2d,v1.2d,v3.2d,-128'
|
|
@ -0,0 +1,14 @@
|
|||
# SHA2
|
||||
sha512h X0, Q0, V1.2D
|
||||
sha512h Q0, Q1, V2.16B
|
||||
sha512h2 X0, Q0, V1.2D
|
||||
sha512h2 Q0, Q1, V2.16B
|
||||
sha512su0 V1.2D, v2.16B
|
||||
sha512su0 V0, V2.2D
|
||||
sha512su1 X0, X1, X2
|
||||
sha512su1 V1.2D, V2.16B, V2.2D
|
||||
eor3 V1.2D, V2.2D, V3.2D, V4.2D
|
||||
rax1 V0.4S, V2.4S, V3.4S
|
||||
xar v0.2d, v1.2d, v3.2d, 128
|
||||
xar v0.2d, v1.2d, v3.2d, -128
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,118 @@
|
|||
# Print a 4 operand instruction
|
||||
.macro print_gen4reg op, d, pd1=, pd2=, n, pn1=, pn2=, m, pm1=, pm2=, w , pw1=, pw2=
|
||||
.ifnb \d
|
||||
\op \pd1\d\()\pd2, \pn1\n\()\pn2, \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.else
|
||||
.ifnb \n
|
||||
\op \pn1\n\()\pn2, \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.else
|
||||
\op \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.endif
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_offset op, d, pd1=, pd2=, r
|
||||
.irp m, 03, 82, 13
|
||||
\op \pd1\d\()\pd2, [\r, \m]
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_n_w op, d, pd1=, pd2=, n, pn1=, pn2=, m, pm1=, pm2=, pw1=, pw2=
|
||||
.irp w, 3, 11, 15
|
||||
print_gen4reg \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \m, \pm1, \pm2, \w, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_n op, d, pd1=, pd2=, n, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp m, 0, 8, 12
|
||||
gen4reg_iter_d_n_w \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \m, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d op, d, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp n, 2, 15, 30
|
||||
gen4reg_iter_d_n \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter op, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d \op, \d, \pd1, \pd2, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 3 operand instruction
|
||||
.macro gen3reg_iter op, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d \op,,, \d, \pd1, \pd2, \pn1, \pn2, \pm1, \pm2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen3reg_iter_lane op, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=, x:vararg
|
||||
.irp l, \x
|
||||
gen4reg_iter_d \op,,,, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2[\l]
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 2 operand instruction
|
||||
.macro gen2reg_iter op, pd1=, pd2=, pn1=, pn2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d_n \op,,,,,, \d, \pd1, \pd2, \pn1, \pn2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen2reg_iter_offset op, pd1=, pd2=, r
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d_offset \op, \d, \pd1, \pd2, \r,
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 1 operand instruction
|
||||
.macro gen1reg_iter op, pd1=, pd2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
\op \pd1\d\()\pd2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.text
|
||||
func:
|
||||
gen3reg_iter sha512h q,, q,, v,.2d
|
||||
gen3reg_iter sha512h2 q,, q,, v,.2d
|
||||
gen2reg_iter sha512su0 v,.2d, v,.2d
|
||||
gen3reg_iter sha512su1 v,.2d, v,.2d, v,.2d
|
||||
gen4reg_iter eor3 v,.16b, v,.16b, v,.16b, v,.16b
|
||||
gen3reg_iter rax1 v,.2d, v,.2d, v,.2d
|
||||
gen4reg_iter xar v,.2d, v,.2d, v,.2d,,
|
||||
gen4reg_iter bcax v,.16b, v,.16b, v,.16b, v,.16b
|
||||
|
||||
gen4reg_iter sm3ss1 v,.4s, v,.4s, v,.4s, v,.4s
|
||||
gen3reg_iter_lane sm3tt1a v,.4s, v,.4s, v,.s, 0, 1, 2, 3
|
||||
gen3reg_iter_lane sm3tt1b v,.4s, v,.4s, v,.s, 0, 1, 2, 3
|
||||
gen3reg_iter_lane sm3tt2a v,.4s, v,.4s, v,.s, 0, 1, 2, 3
|
||||
gen3reg_iter_lane sm3tt2b v,.4s, v,.4s, v,.s, 0, 1, 2, 3
|
||||
gen3reg_iter sm3partw1 v,.4s, v,.4s, v,.4s
|
||||
gen3reg_iter sm3partw2 v,.4s, v,.4s, v,.4s
|
||||
|
||||
gen2reg_iter sm4e v,.4s, v,.4s
|
||||
gen3reg_iter sm4ekey v,.4s, v,.4s, v,.4s
|
||||
|
||||
gen3reg_iter fmlal v,.2s, v,.2h, v,.2h
|
||||
gen3reg_iter fmlal v,.4s, v,.4h, v,.4h
|
||||
gen3reg_iter fmlsl v,.2s, v,.2h, v,.2h
|
||||
gen3reg_iter fmlsl v,.4s, v,.4h, v,.4h
|
||||
|
||||
gen3reg_iter fmlal2 v,.2s, v,.2h, v,.2h
|
||||
gen3reg_iter fmlal2 v,.4s, v,.4h, v,.4h
|
||||
gen3reg_iter fmlsl2 v,.2s, v,.2h, v,.2h
|
||||
gen3reg_iter fmlsl2 v,.4s, v,.4h, v,.4h
|
||||
|
||||
gen3reg_iter_lane fmlal v,.2s, v,.2h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlal v,.4s, v,.4h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlsl v,.2s, v,.2h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlsl v,.4s, v,.4h, v,.h, 0, 1, 5, 7
|
||||
|
||||
gen3reg_iter_lane fmlal2 v,.2s, v,.2h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlal2 v,.4s, v,.4h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlsl2 v,.2s, v,.2h, v,.h, 0, 1, 5, 7
|
||||
gen3reg_iter_lane fmlsl2 v,.4s, v,.4h, v,.h, 0, 1, 5, 7
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
|||
#as: -march=armv8.4-a
|
||||
#source: armv8_4-a-illegal.s
|
||||
#error-output: armv8_4-a-illegal.l
|
|
@ -0,0 +1,4 @@
|
|||
[^:]+: Assembler messages:
|
||||
[^:]+:[0-9]+: Error: immediate value out of range 0 to 63 at operand 2 -- `rmif X0,65,2'
|
||||
[^:]+:[0-9]+: Error: immediate value out of range 0 to 15 at operand 3 -- `rmif X1,60,20'
|
||||
[^:]+:[0-9]+: Error: immediate offset out of range -256 to 255 at operand 2 -- `ldapurb W0,\[X0,256\]'
|
|
@ -0,0 +1,5 @@
|
|||
RMIF X0, 65, 2
|
||||
RMIF X1, 60, 20
|
||||
|
||||
# These all use the same modifier, so it's sufficient to just test one.
|
||||
LDAPURB W0, [X0, 256]
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,146 @@
|
|||
# Print a 4 operand instruction
|
||||
.macro print_gen4reg op, d, pd1=, pd2=, n, pn1=, pn2=, m, pm1=, pm2=, w , pw1=, pw2=
|
||||
.ifnb \d
|
||||
\op \pd1\d\()\pd2, \pn1\n\()\pn2, \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.else
|
||||
.ifnb \n
|
||||
\op \pn1\n\()\pn2, \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.else
|
||||
\op \pm1\m\()\pm2, \pw1\w\()\pw2
|
||||
.endif
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_offset op, d, pd1=, pd2=, r
|
||||
.irp m, 03, 82, 13
|
||||
\op \pd1\d\()\pd2, [\r, \m]
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_n_w op, d, pd1=, pd2=, n, pn1=, pn2=, m, pm1=, pm2=, pw1=, pw2=
|
||||
.irp w, 3, 11, 15
|
||||
print_gen4reg \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \m, \pm1, \pm2, \w, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d_n op, d, pd1=, pd2=, n, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp m, 0, 8, 12
|
||||
gen4reg_iter_d_n_w \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \m, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter_d op, d, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp n, 2, 15, 30
|
||||
gen4reg_iter_d_n \op, \d, \pd1, \pd2, \n, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen4reg_iter op, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d \op, \d, \pd1, \pd2, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 3 operand instruction
|
||||
.macro gen3reg_iter op, pd1=, pd2=, pn1=, pn2=, pm1=, pm2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d \op,,, \d, \pd1, \pd2, \pn1, \pn2, \pm1, \pm2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen3reg_iter_lane op, pn1=, pn2=, pm1=, pm2=, pw1=, pw2=, x:vararg
|
||||
.irp l, \x
|
||||
gen4reg_iter_d \op,,,, \pn1, \pn2, \pm1, \pm2, \pw1, \pw2[\l]
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 2 operand instruction
|
||||
.macro gen2reg_iter op, pd1=, pd2=, pn1=, pn2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d_n \op,,,,,, \d, \pd1, \pd2, \pn1, \pn2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.macro gen2reg_iter_offset op, pd1=, pd2=, r
|
||||
.irp d, 0, 7, 16, 30
|
||||
gen4reg_iter_d_offset \op, \d, \pd1, \pd2, \r,
|
||||
.endr
|
||||
.endm
|
||||
|
||||
# Print a 1 operand instruction
|
||||
.macro gen1reg_iter op, pd1=, pd2=
|
||||
.irp d, 0, 7, 16, 30
|
||||
\op \pd1\d\()\pd2
|
||||
.endr
|
||||
.endm
|
||||
|
||||
.text
|
||||
func:
|
||||
gen3reg_iter rmif x,,,,,,
|
||||
gen1reg_iter setf8 w,,
|
||||
gen1reg_iter setf16 w,,
|
||||
|
||||
gen2reg_iter stlurb w,,[x,]
|
||||
gen1reg_iter stlurb w,", [sp]"
|
||||
gen3reg_iter stlurb w,, [x,,,]
|
||||
gen2reg_iter_offset stlurb w,,sp
|
||||
|
||||
gen2reg_iter ldapurb w,,[x,]
|
||||
gen1reg_iter ldapurb w,", [sp]"
|
||||
gen3reg_iter ldapurb w,, [x,,,]
|
||||
gen2reg_iter_offset ldapurb w,,sp
|
||||
|
||||
gen2reg_iter ldapursb w,,[x,]
|
||||
gen1reg_iter ldapursb w,", [sp]"
|
||||
gen3reg_iter ldapursb w,, [x,,,]
|
||||
gen2reg_iter_offset ldapursb w,,sp
|
||||
|
||||
gen2reg_iter ldapursb x,,[x,]
|
||||
gen1reg_iter ldapursb x,", [sp]"
|
||||
gen3reg_iter ldapursb x,, [x,,,]
|
||||
gen2reg_iter_offset ldapursb x,,sp
|
||||
|
||||
gen2reg_iter stlurh w,,[x,]
|
||||
gen1reg_iter stlurh w,", [sp]"
|
||||
gen3reg_iter stlurh w,, [x,,,]
|
||||
gen2reg_iter_offset stlurh w,,sp
|
||||
|
||||
gen2reg_iter ldapurh w,,[x,]
|
||||
gen1reg_iter ldapurh w,", [sp]"
|
||||
gen3reg_iter ldapurh w,, [x,,,]
|
||||
gen2reg_iter_offset ldapurh w,,sp
|
||||
|
||||
gen2reg_iter ldapursh w,,[x,]
|
||||
gen1reg_iter ldapursh w,", [sp]"
|
||||
gen3reg_iter ldapursh w,, [x,,,]
|
||||
gen2reg_iter_offset ldapursh w,,sp
|
||||
|
||||
gen2reg_iter ldapursh x,,[x,]
|
||||
gen1reg_iter ldapursh x,", [sp]"
|
||||
gen3reg_iter ldapursh x,, [x,,,]
|
||||
gen2reg_iter_offset ldapursh x,,sp
|
||||
|
||||
gen2reg_iter stlur w,,[x,]
|
||||
gen1reg_iter stlur w,", [sp]"
|
||||
gen3reg_iter stlur w,, [x,,,]
|
||||
gen2reg_iter_offset stlur w,,sp
|
||||
|
||||
gen2reg_iter stlur x,,[x,]
|
||||
gen1reg_iter stlur x,", [sp]"
|
||||
gen3reg_iter stlur x,, [x,,,]
|
||||
gen2reg_iter_offset stlur x,,sp
|
||||
|
||||
gen2reg_iter ldapur w,,[x,]
|
||||
gen1reg_iter ldapur w,", [sp]"
|
||||
gen3reg_iter ldapur w,, [x,,,]
|
||||
gen2reg_iter_offset ldapur w,,sp
|
||||
|
||||
gen2reg_iter ldapur x,,[x,]
|
||||
gen1reg_iter ldapur x,", [sp]"
|
||||
gen3reg_iter ldapur x,, [x,,,]
|
||||
gen2reg_iter_offset ldapur x,,sp
|
||||
|
||||
gen2reg_iter ldapursw x,,[x,]
|
||||
gen1reg_iter ldapursw x,", [sp]"
|
||||
gen3reg_iter ldapursw x,, [x,,,]
|
||||
gen2reg_iter_offset ldapursw x,,sp
|
|
@ -1,3 +1,13 @@
|
|||
2017-11-16 Tamar Christina <tamar.christina@arm.com>
|
||||
|
||||
* aarch64-tbl.h (sha512h, sha512h2, sha512su0, sha512su1, eor3): New.
|
||||
(rax1, xar, bcax, sm3ss1, sm3tt1a, sm3tt1b, sm3tt2a, sm3tt2b): New.
|
||||
(sm3partw1, sm3partw2, sm4e, sm4ekey, fmlal, fmlsl): New.
|
||||
(fmlal2, fmlsl2, cfinv, rmif, setf8, setf16, stlurb): New.
|
||||
(ldapurb, ldapursb, stlurh, ldapurh, ldapursh, stlur): New.
|
||||
(ldapur, ldapursw, stlur): New.
|
||||
* aarch64-dis-2.c: Regenerate.
|
||||
|
||||
2017-11-16 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
(get_valid_dis386): Never flag bad opcode when
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4288,7 +4288,66 @@ struct aarch64_opcode aarch64_opcode_table[] =
|
|||
DOT_INSN ("sdot", 0xe009400, 0xbf20fc00, dotproduct, OP3 (Vd, Vn, Vm), QL_V3DOT, F_SIZEQ),
|
||||
DOT_INSN ("udot", 0x2f00e000, 0xbf00f000, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ),
|
||||
DOT_INSN ("sdot", 0xf00e000, 0xbf00f000, dotproduct, OP3 (Vd, Vn, Em), QL_V2DOT, F_SIZEQ),
|
||||
/* Crypto SHA2 (optional in ARMv8.2-a). */
|
||||
SHA2_INSN ("sha512h", 0xce608000, 0xffe0fc00, cryptosha2, OP3 (Fd, Fn, Vm), QL_SHA512UPT, 0),
|
||||
SHA2_INSN ("sha512h2", 0xce608400, 0xffe0fc00, cryptosha2, OP3 (Fd, Fn, Vm), QL_SHA512UPT, 0),
|
||||
SHA2_INSN ("sha512su0", 0xcec08000, 0xfffffc00, cryptosha2, OP2 (Vd, Vn), QL_V2SAME2D, 0),
|
||||
SHA2_INSN ("sha512su1", 0xce608800, 0xffe0fc00, cryptosha2, OP3 (Vd, Vn, Vm), QL_V3SAME2D, 0),
|
||||
/* Crypto SHA3 (optional in ARMv8.2-a). */
|
||||
SHA3_INSN ("eor3", 0xce000000, 0xffe08000, cryptosha3, OP4 (Vd, Vn, Vm, Va), QL_V4SAME16B, 0),
|
||||
SHA3_INSN ("rax1", 0xce608c00, 0xffe0fc00, cryptosha3, OP3 (Vd, Vn, Vm), QL_V3SAME2D, 0),
|
||||
SHA3_INSN ("xar", 0xce800000, 0xffe00000, cryptosha3, OP4 (Vd, Vn, Vm, IMM), QL_XAR, 0),
|
||||
SHA3_INSN ("bcax", 0xce200000, 0xffe08000, cryptosha3, OP4 (Vd, Vn, Vm, Va), QL_V4SAME16B, 0),
|
||||
/* Crypto SM3 (optional in ARMv8.2-a). */
|
||||
SM4_INSN ("sm3ss1", 0xce400000, 0xffe08000, cryptosm3, OP4 (Vd, Vn, Vm, Va), QL_V4SAME4S, 0),
|
||||
SM4_INSN ("sm3tt1a", 0xce408000, 0xffe0cc00, cryptosm3, OP3 (Vd, Vn, Em), QL_SM3TT, 0),
|
||||
SM4_INSN ("sm3tt1b", 0xce408400, 0xffe0cc00, cryptosm3, OP3 (Vd, Vn, Em), QL_SM3TT, 0),
|
||||
SM4_INSN ("sm3tt2a", 0xce408800, 0xffe0cc00, cryptosm3, OP3 (Vd, Vn, Em), QL_SM3TT, 0),
|
||||
SM4_INSN ("sm3tt2b", 0xce408c00, 0xffe0cc00, cryptosm3, OP3 (Vd, Vn, Em), QL_SM3TT, 0),
|
||||
SM4_INSN ("sm3partw1", 0xce60c000, 0xffe0fc00, cryptosm3, OP3 (Vd, Vn, Vm), QL_V3SAME4S, 0),
|
||||
SM4_INSN ("sm3partw2", 0xce60c400, 0xffe0fc00, cryptosm3, OP3 (Vd, Vn, Vm), QL_V3SAME4S, 0),
|
||||
/* Crypto SM4 (optional in ARMv8.2-a). */
|
||||
SM4_INSN ("sm4e", 0xcec08400, 0xfffffc00, cryptosm4, OP2 (Vd, Vn), QL_V2SAME4S, 0),
|
||||
SM4_INSN ("sm4ekey", 0xce60c800, 0xffe0fc00, cryptosm4, OP3 (Vd, Vn, Vm), QL_V3SAME4S, 0),
|
||||
/* Crypto FP16 (optional in ARMv8.2-a). */
|
||||
FP16_V8_2_INSN ("fmlal", 0xe20ec00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl", 0xea0ec00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlal2", 0x2e20cc00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl2", 0x2ea0cc00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML2S, 0),
|
||||
|
||||
FP16_V8_2_INSN ("fmlal", 0x4e20ec00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl", 0x4ea0ec00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlal2", 0x6e20cc00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl2", 0x6ea0cc00, 0xffa0fc00, asimdsame, OP3 (Vd, Vn, Vm), QL_V3FML4S, 0),
|
||||
|
||||
FP16_V8_2_INSN ("fmlal", 0xf800000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl", 0xf804000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlal2", 0x2f808000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML2S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl2", 0x2f80c000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML2S, 0),
|
||||
|
||||
FP16_V8_2_INSN ("fmlal", 0x4f800000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl", 0x4f804000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlal2", 0x6f808000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML4S, 0),
|
||||
FP16_V8_2_INSN ("fmlsl2", 0x6f80c000, 0xffc0f400, asimdelem, OP3 (Vd, Vn, Em), QL_V2FML4S, 0),
|
||||
/* System extensions ARMv8.4-a. */
|
||||
V8_4_INSN ("cfinv", 0xd500401f, 0xffffffff, ic_system, OP0 (), {}, 0),
|
||||
V8_4_INSN ("rmif", 0xba000400, 0xffe07c10, ic_system, OP3 (Rn, IMM_2, MASK), QL_RMIF, 0),
|
||||
V8_4_INSN ("setf8", 0x3a00080d, 0xfffffc1f, ic_system, OP1 (Rn), QL_SETF, 0),
|
||||
V8_4_INSN ("setf16", 0x3a00480d, 0xfffffc1f, ic_system, OP1 (Rn), QL_SETF, 0),
|
||||
/* Memory access instructions ARMv8.4-a. */
|
||||
V8_4_INSN ("stlurb" , 0x19000000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapurb", 0x19400000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapursb", 0x19c00000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapursb", 0x19800000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0),
|
||||
V8_4_INSN ("stlurh", 0x59000000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapurh", 0x59400000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapursh", 0x59c00000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapursh", 0x59800000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0),
|
||||
V8_4_INSN ("stlur", 0x99000000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapur", 0x99400000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLW, 0),
|
||||
V8_4_INSN ("ldapursw", 0x99800000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0),
|
||||
V8_4_INSN ("stlur", 0xd9000000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0),
|
||||
V8_4_INSN ("ldapur", 0xd9400000, 0xffe00c00, ldst_unscaled, OP2 (Rt, ADDR_OFFSET), QL_STLX, 0),
|
||||
{0, 0, 0, 0, 0, 0, {}, {}, 0, 0, NULL},
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue