aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Do Nascimento <victor.donascimento@arm.com>2024-02-06 14:59:02 +0000
committerVictor Do Nascimento <victor.donascimento@arm.com>2024-05-16 13:22:30 +0100
commitab501c0deebc13c037f5385749b67d5186253e05 (patch)
tree345754fbfce0d735a03d8c20d0c0602d2c38dc4c
parent7d0383ad39c1df982fc8a56a920d32a4c1f42625 (diff)
downloadgdb-ab501c0deebc13c037f5385749b67d5186253e05.zip
gdb-ab501c0deebc13c037f5385749b67d5186253e05.tar.gz
gdb-ab501c0deebc13c037f5385749b67d5186253e05.tar.bz2
aarch64: fp8 convert and scale - Add advsimd insn variants
Add the advanced SIMD variant of the FP8 convert and scale instructions, enabled at assembly-time using the `+fp8' architectural extension flag. More specifically, support is added for the following instructions: FP8 convert to BFloat16 (vector): --------------------------------- - bf1cvtl V<d>.8H, V<n>.8B - bf2cvtl V<d>.8H, V<n>.8B - bf1cvtl2 V<d>.8H, V<n>.16B - bf2cvtl2 V<d>.8H, V<n>.16B FP8 convert to half-precision (vector): --------------------------------------- - f1cvtl V<d>.8H, V<n>.8B - f2cvtl V<d>.8H, V<n>.8B - f1cvtl2 V<d>.8H, V<n>.16B - f2cvtl2 V<d>.8H, V<n>.16B Single-precision to FP8 convert and narrow (vector): ---------------------------------------------------- - fcvtn V<d>.8B, V<n>.4S, V<m>.4S - fcvtn2 V<d>.16B, V<n>.4S, V<m>.4S Half-precision to FP8 convert and narrow (vector): -------------------------------------------------- - fcvtn V<d>.8B, V<n>.4H, V<m>.4H - fcvtn V<d>.16B, V<n>.8H, V<m>.8H Floating-point adjust exponent by vector: ----------------------------------------- - fscale V<d>.4H, V<n>.4H, V<m>.4H - fscale V<d>.8H, V<n>.8H, V<m>.8H - fscale V<d>.2S, V<n>.2S, V<m>.2S - fscale V<d>.4S, V<n>.4S, V<m>.4S - fscale V<d>.2d, V<n>.2d, V<m>.2d
-rw-r--r--gas/testsuite/gas/aarch64/advsimd-fp8-fail.d2
-rw-r--r--gas/testsuite/gas/aarch64/advsimd-fp8-fail.l262
-rw-r--r--gas/testsuite/gas/aarch64/advsimd-fp8-fail.s121
-rw-r--r--gas/testsuite/gas/aarch64/advsimd-fp8.d120
-rw-r--r--gas/testsuite/gas/aarch64/advsimd-fp8.s76
-rw-r--r--opcodes/aarch64-dis-2.c215
-rw-r--r--opcodes/aarch64-tbl.h41
7 files changed, 801 insertions, 36 deletions
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp8-fail.d b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.d
new file mode 100644
index 0000000..aaf0096
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.d
@@ -0,0 +1,2 @@
+#as: -march=armv8.5-a+fp8 -mno-verbose-error
+#error_output: advsimd-fp8-fail.l \ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp8-fail.l b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.l
new file mode 100644
index 0000000..eea5a0b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.l
@@ -0,0 +1,262 @@
+[^:]+: Assembler messages:
+[^:]+:9: Error: operand mismatch -- `bf1cvtl v0.16b,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:10: Error: operand mismatch -- `bf1cvtl v0.8b,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:11: Error: operand mismatch -- `bf1cvtl v0.4h,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:13: Error: operand mismatch -- `bf1cvtl v0.2s,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:14: Error: operand mismatch -- `bf1cvtl v0.4s,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:15: Error: operand mismatch -- `bf1cvtl v0.2d,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:16: Error: invalid use of vector register at operand 1 -- `bf1cvtl v0,v1.8b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:18: Error: operand mismatch -- `bf1cvtl v0.8h,v1.4h'
+[^:]+:27: Info: macro invoked from here
+[^:]+:19: Error: operand mismatch -- `bf1cvtl v0.8h,v1.2s'
+[^:]+:27: Info: macro invoked from here
+[^:]+:20: Error: operand mismatch -- `bf1cvtl v0.8h,v1.16b'
+[^:]+:27: Info: macro invoked from here
+[^:]+:21: Error: operand mismatch -- `bf1cvtl v0.8h,v1.8h'
+[^:]+:27: Info: macro invoked from here
+[^:]+:22: Error: operand mismatch -- `bf1cvtl v0.8h,v1.4s'
+[^:]+:27: Info: macro invoked from here
+[^:]+:23: Error: operand mismatch -- `bf1cvtl v0.8h,v1.2d'
+[^:]+:27: Info: macro invoked from here
+[^:]+:24: Error: invalid use of vector register at operand 2 -- `bf1cvtl v0.8h,v0'
+[^:]+:27: Info: macro invoked from here
+[^:]+:9: Error: operand mismatch -- `bf2cvtl v0.16b,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:10: Error: operand mismatch -- `bf2cvtl v0.8b,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:11: Error: operand mismatch -- `bf2cvtl v0.4h,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:13: Error: operand mismatch -- `bf2cvtl v0.2s,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:14: Error: operand mismatch -- `bf2cvtl v0.4s,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:15: Error: operand mismatch -- `bf2cvtl v0.2d,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:16: Error: invalid use of vector register at operand 1 -- `bf2cvtl v0,v1.8b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:18: Error: operand mismatch -- `bf2cvtl v0.8h,v1.4h'
+[^:]+:28: Info: macro invoked from here
+[^:]+:19: Error: operand mismatch -- `bf2cvtl v0.8h,v1.2s'
+[^:]+:28: Info: macro invoked from here
+[^:]+:20: Error: operand mismatch -- `bf2cvtl v0.8h,v1.16b'
+[^:]+:28: Info: macro invoked from here
+[^:]+:21: Error: operand mismatch -- `bf2cvtl v0.8h,v1.8h'
+[^:]+:28: Info: macro invoked from here
+[^:]+:22: Error: operand mismatch -- `bf2cvtl v0.8h,v1.4s'
+[^:]+:28: Info: macro invoked from here
+[^:]+:23: Error: operand mismatch -- `bf2cvtl v0.8h,v1.2d'
+[^:]+:28: Info: macro invoked from here
+[^:]+:24: Error: invalid use of vector register at operand 2 -- `bf2cvtl v0.8h,v0'
+[^:]+:28: Info: macro invoked from here
+[^:]+:9: Error: operand mismatch -- `f1cvtl v0.16b,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:10: Error: operand mismatch -- `f1cvtl v0.8b,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:11: Error: operand mismatch -- `f1cvtl v0.4h,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:13: Error: operand mismatch -- `f1cvtl v0.2s,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:14: Error: operand mismatch -- `f1cvtl v0.4s,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:15: Error: operand mismatch -- `f1cvtl v0.2d,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:16: Error: invalid use of vector register at operand 1 -- `f1cvtl v0,v1.8b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:18: Error: operand mismatch -- `f1cvtl v0.8h,v1.4h'
+[^:]+:29: Info: macro invoked from here
+[^:]+:19: Error: operand mismatch -- `f1cvtl v0.8h,v1.2s'
+[^:]+:29: Info: macro invoked from here
+[^:]+:20: Error: operand mismatch -- `f1cvtl v0.8h,v1.16b'
+[^:]+:29: Info: macro invoked from here
+[^:]+:21: Error: operand mismatch -- `f1cvtl v0.8h,v1.8h'
+[^:]+:29: Info: macro invoked from here
+[^:]+:22: Error: operand mismatch -- `f1cvtl v0.8h,v1.4s'
+[^:]+:29: Info: macro invoked from here
+[^:]+:23: Error: operand mismatch -- `f1cvtl v0.8h,v1.2d'
+[^:]+:29: Info: macro invoked from here
+[^:]+:24: Error: invalid use of vector register at operand 2 -- `f1cvtl v0.8h,v0'
+[^:]+:29: Info: macro invoked from here
+[^:]+:9: Error: operand mismatch -- `f2cvtl v0.16b,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:10: Error: operand mismatch -- `f2cvtl v0.8b,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:11: Error: operand mismatch -- `f2cvtl v0.4h,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:13: Error: operand mismatch -- `f2cvtl v0.2s,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:14: Error: operand mismatch -- `f2cvtl v0.4s,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:15: Error: operand mismatch -- `f2cvtl v0.2d,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:16: Error: invalid use of vector register at operand 1 -- `f2cvtl v0,v1.8b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:18: Error: operand mismatch -- `f2cvtl v0.8h,v1.4h'
+[^:]+:30: Info: macro invoked from here
+[^:]+:19: Error: operand mismatch -- `f2cvtl v0.8h,v1.2s'
+[^:]+:30: Info: macro invoked from here
+[^:]+:20: Error: operand mismatch -- `f2cvtl v0.8h,v1.16b'
+[^:]+:30: Info: macro invoked from here
+[^:]+:21: Error: operand mismatch -- `f2cvtl v0.8h,v1.8h'
+[^:]+:30: Info: macro invoked from here
+[^:]+:22: Error: operand mismatch -- `f2cvtl v0.8h,v1.4s'
+[^:]+:30: Info: macro invoked from here
+[^:]+:23: Error: operand mismatch -- `f2cvtl v0.8h,v1.2d'
+[^:]+:30: Info: macro invoked from here
+[^:]+:24: Error: invalid use of vector register at operand 2 -- `f2cvtl v0.8h,v0'
+[^:]+:30: Info: macro invoked from here
+[^:]+:37: Error: operand mismatch -- `bf1cvtl2 v0.16b,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:38: Error: operand mismatch -- `bf1cvtl2 v0.8b,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:39: Error: operand mismatch -- `bf1cvtl2 v0.4h,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:41: Error: operand mismatch -- `bf1cvtl2 v0.2s,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:42: Error: operand mismatch -- `bf1cvtl2 v0.4s,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:43: Error: operand mismatch -- `bf1cvtl2 v0.2d,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:44: Error: invalid use of vector register at operand 1 -- `bf1cvtl2 v0,v1.16b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:46: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.8b'
+[^:]+:56: Info: macro invoked from here
+[^:]+:47: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.4h'
+[^:]+:56: Info: macro invoked from here
+[^:]+:48: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.2s'
+[^:]+:56: Info: macro invoked from here
+[^:]+:50: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.8h'
+[^:]+:56: Info: macro invoked from here
+[^:]+:51: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.4s'
+[^:]+:56: Info: macro invoked from here
+[^:]+:52: Error: operand mismatch -- `bf1cvtl2 v0.8h,v1.2d'
+[^:]+:56: Info: macro invoked from here
+[^:]+:53: Error: invalid use of vector register at operand 2 -- `bf1cvtl2 v0.8h,v1'
+[^:]+:56: Info: macro invoked from here
+[^:]+:37: Error: operand mismatch -- `bf2cvtl2 v0.16b,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:38: Error: operand mismatch -- `bf2cvtl2 v0.8b,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:39: Error: operand mismatch -- `bf2cvtl2 v0.4h,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:41: Error: operand mismatch -- `bf2cvtl2 v0.2s,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:42: Error: operand mismatch -- `bf2cvtl2 v0.4s,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:43: Error: operand mismatch -- `bf2cvtl2 v0.2d,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:44: Error: invalid use of vector register at operand 1 -- `bf2cvtl2 v0,v1.16b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:46: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.8b'
+[^:]+:57: Info: macro invoked from here
+[^:]+:47: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.4h'
+[^:]+:57: Info: macro invoked from here
+[^:]+:48: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.2s'
+[^:]+:57: Info: macro invoked from here
+[^:]+:50: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.8h'
+[^:]+:57: Info: macro invoked from here
+[^:]+:51: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.4s'
+[^:]+:57: Info: macro invoked from here
+[^:]+:52: Error: operand mismatch -- `bf2cvtl2 v0.8h,v1.2d'
+[^:]+:57: Info: macro invoked from here
+[^:]+:53: Error: invalid use of vector register at operand 2 -- `bf2cvtl2 v0.8h,v1'
+[^:]+:57: Info: macro invoked from here
+[^:]+:37: Error: operand mismatch -- `f1cvtl2 v0.16b,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:38: Error: operand mismatch -- `f1cvtl2 v0.8b,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:39: Error: operand mismatch -- `f1cvtl2 v0.4h,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:41: Error: operand mismatch -- `f1cvtl2 v0.2s,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:42: Error: operand mismatch -- `f1cvtl2 v0.4s,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:43: Error: operand mismatch -- `f1cvtl2 v0.2d,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:44: Error: invalid use of vector register at operand 1 -- `f1cvtl2 v0,v1.16b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:46: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.8b'
+[^:]+:58: Info: macro invoked from here
+[^:]+:47: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.4h'
+[^:]+:58: Info: macro invoked from here
+[^:]+:48: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.2s'
+[^:]+:58: Info: macro invoked from here
+[^:]+:50: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.8h'
+[^:]+:58: Info: macro invoked from here
+[^:]+:51: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.4s'
+[^:]+:58: Info: macro invoked from here
+[^:]+:52: Error: operand mismatch -- `f1cvtl2 v0.8h,v1.2d'
+[^:]+:58: Info: macro invoked from here
+[^:]+:53: Error: invalid use of vector register at operand 2 -- `f1cvtl2 v0.8h,v1'
+[^:]+:58: Info: macro invoked from here
+[^:]+:37: Error: operand mismatch -- `f2cvtl2 v0.16b,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:38: Error: operand mismatch -- `f2cvtl2 v0.8b,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:39: Error: operand mismatch -- `f2cvtl2 v0.4h,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:41: Error: operand mismatch -- `f2cvtl2 v0.2s,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:42: Error: operand mismatch -- `f2cvtl2 v0.4s,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:43: Error: operand mismatch -- `f2cvtl2 v0.2d,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:44: Error: invalid use of vector register at operand 1 -- `f2cvtl2 v0,v1.16b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:46: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.8b'
+[^:]+:59: Info: macro invoked from here
+[^:]+:47: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.4h'
+[^:]+:59: Info: macro invoked from here
+[^:]+:48: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.2s'
+[^:]+:59: Info: macro invoked from here
+[^:]+:50: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.8h'
+[^:]+:59: Info: macro invoked from here
+[^:]+:51: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.4s'
+[^:]+:59: Info: macro invoked from here
+[^:]+:52: Error: operand mismatch -- `f2cvtl2 v0.8h,v1.2d'
+[^:]+:59: Info: macro invoked from here
+[^:]+:53: Error: invalid use of vector register at operand 2 -- `f2cvtl2 v0.8h,v1'
+[^:]+:59: Info: macro invoked from here
+[^:]+:64: Error: operand mismatch -- `fscale v0.8b,v0.8b,v0.8b'
+[^:]+:65: Error: operand mismatch -- `fscale v0.16b,v0.16b,v0.16b'
+[^:]+:72: Error: operand mismatch -- `fcvtn v0.4h,v1.4h,v2.4h'
+[^:]+:73: Error: operand mismatch -- `fcvtn v0.2s,v1.4h,v2.4h'
+[^:]+:74: Error: operand mismatch -- `fcvtn v0.16b,v1.4h,v2.4h'
+[^:]+:75: Error: operand mismatch -- `fcvtn v0.8h,v1.4h,v2.4h'
+[^:]+:76: Error: operand mismatch -- `fcvtn v0.4s,v1.4h,v2.4h'
+[^:]+:77: Error: operand mismatch -- `fcvtn v0.2d,v1.4h,v2.4h'
+[^:]+:79: Error: operand mismatch -- `fcvtn v0.8b,v1.8h,v2.8h'
+[^:]+:80: Error: operand mismatch -- `fcvtn v0.4h,v1.8h,v2.8h'
+[^:]+:81: Error: operand mismatch -- `fcvtn v0.2s,v1.8h,v2.8h'
+[^:]+:83: Error: operand mismatch -- `fcvtn v0.8h,v1.8h,v2.8h'
+[^:]+:84: Error: operand mismatch -- `fcvtn v0.4s,v1.8h,v2.8h'
+[^:]+:85: Error: operand mismatch -- `fcvtn v0.2d,v1.8h,v2.8h'
+[^:]+:88: Error: operand mismatch -- `fcvtn v0.8b,v1.8b,v2.8b'
+[^:]+:90: Error: operand mismatch -- `fcvtn v0.8b,v1.2s,v2.2s'
+[^:]+:91: Error: operand mismatch -- `fcvtn v0.8b,v1.16b,v2.16b'
+[^:]+:92: Error: operand mismatch -- `fcvtn v0.8b,v1.8h,v2.8h'
+[^:]+:94: Error: operand mismatch -- `fcvtn v0.8b,v1.2d,v2.2d'
+[^:]+:96: Error: operand mismatch -- `fcvtn v0.16b,v1.8b,v2.8b'
+[^:]+:97: Error: operand mismatch -- `fcvtn v0.16b,v1.4h,v2.4h'
+[^:]+:98: Error: operand mismatch -- `fcvtn v0.16b,v1.2s,v2.2s'
+[^:]+:99: Error: operand mismatch -- `fcvtn v0.16b,v1.16b,v2.16b'
+[^:]+:101: Error: operand mismatch -- `fcvtn v0.16b,v1.4s,v2.4s'
+[^:]+:102: Error: operand mismatch -- `fcvtn v0.16b,v1.2d,v2.2d'
+[^:]+:107: Error: operand mismatch -- `fcvtn v0.4h,v1.4s,v2.4s'
+[^:]+:108: Error: operand mismatch -- `fcvtn v0.2s,v1.4s,v2.4s'
+[^:]+:109: Error: operand mismatch -- `fcvtn v0.16b,v1.4s,v2.4s'
+[^:]+:110: Error: operand mismatch -- `fcvtn v0.8h,v1.4s,v2.4s'
+[^:]+:111: Error: operand mismatch -- `fcvtn v0.4s,v1.4s,v2.4s'
+[^:]+:112: Error: operand mismatch -- `fcvtn v0.2d,v1.4s,v2.4s'
+[^:]+:115: Error: operand mismatch -- `fcvtn2 v0.16b,v1.8b,v2.8b'
+[^:]+:116: Error: operand mismatch -- `fcvtn2 v0.16b,v1.4h,v2.4h'
+[^:]+:117: Error: operand mismatch -- `fcvtn2 v0.16b,v1.2d,v2.2d'
+[^:]+:118: Error: operand mismatch -- `fcvtn2 v0.16b,v1.16b,v2.16b'
+[^:]+:119: Error: operand mismatch -- `fcvtn2 v0.16b,v1.8h,v2.8h'
+[^:]+:121: Error: operand mismatch -- `fcvtn2 v0.16b,v1.2d,v2.2d'
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp8-fail.s b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.s
new file mode 100644
index 0000000..71ebf3c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-fp8-fail.s
@@ -0,0 +1,121 @@
+ /* advsimd-fp8-fail.s Test file for error-checking AArch64 8-bit
+ floating-point vector instructions. */
+
+ /* Instructions convert the elements from the lower half of the source
+ vector while scaling the values by 2^-UInt(FPMR.LSCALE{2}[3:0]). */
+
+ .macro cvrt_lowerhalf, op
+ /* Check the number and width of destination vector elements. */
+ \op v0.16b, v1.8b
+ \op v0.8b, v1.8b
+ \op v0.4h, v1.8b
+ \op v0.8h, v1.8b /* Valid. */
+ \op v0.2s, v1.8b
+ \op v0.4s, v1.8b
+ \op v0.2d, v1.8b
+ \op v0, v1.8b
+ /* Check the number and width of source vector elements. */
+ \op v0.8h, v1.4h
+ \op v0.8h, v1.2s
+ \op v0.8h, v1.16b
+ \op v0.8h, v1.8h
+ \op v0.8h, v1.4s
+ \op v0.8h, v1.2d
+ \op v0.8h, v0
+ .endm
+
+ cvrt_lowerhalf bf1cvtl
+ cvrt_lowerhalf bf2cvtl
+ cvrt_lowerhalf f1cvtl
+ cvrt_lowerhalf f2cvtl
+
+ /* Instructions convert the elements from the upper half of the source
+ vector while scaling the values by 2^-UInt(FPMR.LSCALE{2}[3:0]). */
+
+ .macro cvrt_upperhalf, op
+ /* Check the number and width of destination vector elements. */
+ \op v0.16b, v1.16b
+ \op v0.8b, v1.16b
+ \op v0.4h, v1.16b
+ \op v0.8h, v1.16b /* Valid. */
+ \op v0.2s, v1.16b
+ \op v0.4s, v1.16b
+ \op v0.2d, v1.16b
+ \op v0, v1.16b
+ /* Check the number and width of source vector elements. */
+ \op v0.8h, v1.8b
+ \op v0.8h, v1.4h
+ \op v0.8h, v1.2s
+ \op v0.8h, v1.16b /* Valid. */
+ \op v0.8h, v1.8h
+ \op v0.8h, v1.4s
+ \op v0.8h, v1.2d
+ \op v0.8h, v1
+ .endm
+
+ cvrt_upperhalf bf1cvtl2
+ cvrt_upperhalf bf2cvtl2
+ cvrt_upperhalf f1cvtl2
+ cvrt_upperhalf f2cvtl2
+
+ /* Floating-point adjust exponent by vector. */
+
+ /* Check invalid vector element number and width combinations. */
+ fscale v0.8b, v0.8b, v0.8b
+ fscale v0.16b, v0.16b, v0.16b
+
+ /* Half and single-precision to FP8 convert and narrow. */
+
+ /* Half-precision variant. */
+ /* Check the number and width of destination vector elements. */
+ fcvtn v0.8b, v1.4h, v2.4h /* Valid. */
+ fcvtn v0.4h, v1.4h, v2.4h
+ fcvtn v0.2s, v1.4h, v2.4h
+ fcvtn v0.16b, v1.4h, v2.4h
+ fcvtn v0.8h, v1.4h, v2.4h
+ fcvtn v0.4s, v1.4h, v2.4h
+ fcvtn v0.2d, v1.4h, v2.4h
+
+ fcvtn v0.8b, v1.8h, v2.8h
+ fcvtn v0.4h, v1.8h, v2.8h
+ fcvtn v0.2s, v1.8h, v2.8h
+ fcvtn v0.16b, v1.8h, v2.8h /* Valid. */
+ fcvtn v0.8h, v1.8h, v2.8h
+ fcvtn v0.4s, v1.8h, v2.8h
+ fcvtn v0.2d, v1.8h, v2.8h
+
+ /* Check the number and width of source vector elements. */
+ fcvtn v0.8b, v1.8b, v2.8b
+ fcvtn v0.8b, v1.4h, v2.4h /* Valid. */
+ fcvtn v0.8b, v1.2s, v2.2s
+ fcvtn v0.8b, v1.16b, v2.16b
+ fcvtn v0.8b, v1.8h, v2.8h
+ fcvtn v0.8b, v1.4s, v2.4s /* Valid. */
+ fcvtn v0.8b, v1.2d, v2.2d
+
+ fcvtn v0.16b, v1.8b, v2.8b
+ fcvtn v0.16b, v1.4h, v2.4h
+ fcvtn v0.16b, v1.2s, v2.2s
+ fcvtn v0.16b, v1.16b, v2.16b
+ fcvtn v0.16b, v1.8h, v2.8h /* Valid. */
+ fcvtn v0.16b, v1.4s, v2.4s
+ fcvtn v0.16b, v1.2d, v2.2d
+
+ /* Single-precision variant. */
+ /* Check the number and width of destination vector elements. */
+ fcvtn v0.8b, v1.4s, v2.4s /* Valid. */
+ fcvtn v0.4h, v1.4s, v2.4s
+ fcvtn v0.2s, v1.4s, v2.4s
+ fcvtn v0.16b, v1.4s, v2.4s
+ fcvtn v0.8h, v1.4s, v2.4s
+ fcvtn v0.4s, v1.4s, v2.4s
+ fcvtn v0.2d, v1.4s, v2.4s
+
+ /* Check the number and width of source vector elements. */
+ fcvtn2 v0.16b, v1.8b, v2.8b
+ fcvtn2 v0.16b, v1.4h, v2.4h
+ fcvtn2 v0.16b, v1.2d, v2.2d
+ fcvtn2 v0.16b, v1.16b, v2.16b
+ fcvtn2 v0.16b, v1.8h, v2.8h
+ fcvtn2 v0.16b, v1.4s, v2.4s /* Valid. */
+ fcvtn2 v0.16b, v1.2d, v2.2d
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp8.d b/gas/testsuite/gas/aarch64/advsimd-fp8.d
new file mode 100644
index 0000000..b4592a7
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-fp8.d
@@ -0,0 +1,120 @@
+#as: -march=armv8.5-a+fp8
+#objdump: -dr
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+[ ]*[0-9a-f]+: 2ea17800 bf1cvtl v0.8h, v0.8b
+[ ]*[0-9a-f]+: 2ea17801 bf1cvtl v1.8h, v0.8b
+[ ]*[0-9a-f]+: 2ea17820 bf1cvtl v0.8h, v1.8b
+[ ]*[0-9a-f]+: 2ea17821 bf1cvtl v1.8h, v1.8b
+[ ]*[0-9a-f]+: 2ea17a30 bf1cvtl v16.8h, v17.8b
+[ ]*[0-9a-f]+: 2ee17800 bf2cvtl v0.8h, v0.8b
+[ ]*[0-9a-f]+: 2ee17801 bf2cvtl v1.8h, v0.8b
+[ ]*[0-9a-f]+: 2ee17820 bf2cvtl v0.8h, v1.8b
+[ ]*[0-9a-f]+: 2ee17821 bf2cvtl v1.8h, v1.8b
+[ ]*[0-9a-f]+: 2ee17a30 bf2cvtl v16.8h, v17.8b
+[ ]*[0-9a-f]+: 2e217800 f1cvtl v0.8h, v0.8b
+[ ]*[0-9a-f]+: 2e217801 f1cvtl v1.8h, v0.8b
+[ ]*[0-9a-f]+: 2e217820 f1cvtl v0.8h, v1.8b
+[ ]*[0-9a-f]+: 2e217821 f1cvtl v1.8h, v1.8b
+[ ]*[0-9a-f]+: 2e217a30 f1cvtl v16.8h, v17.8b
+[ ]*[0-9a-f]+: 2e617800 f2cvtl v0.8h, v0.8b
+[ ]*[0-9a-f]+: 2e617801 f2cvtl v1.8h, v0.8b
+[ ]*[0-9a-f]+: 2e617820 f2cvtl v0.8h, v1.8b
+[ ]*[0-9a-f]+: 2e617821 f2cvtl v1.8h, v1.8b
+[ ]*[0-9a-f]+: 2e617a30 f2cvtl v16.8h, v17.8b
+[ ]*[0-9a-f]+: 6ea17800 bf1cvtl2 v0.8h, v0.16b
+[ ]*[0-9a-f]+: 6ea17801 bf1cvtl2 v1.8h, v0.16b
+[ ]*[0-9a-f]+: 6ea17820 bf1cvtl2 v0.8h, v1.16b
+[ ]*[0-9a-f]+: 6ea17821 bf1cvtl2 v1.8h, v1.16b
+[ ]*[0-9a-f]+: 6ea17a30 bf1cvtl2 v16.8h, v17.16b
+[ ]*[0-9a-f]+: 6ee17800 bf2cvtl2 v0.8h, v0.16b
+[ ]*[0-9a-f]+: 6ee17801 bf2cvtl2 v1.8h, v0.16b
+[ ]*[0-9a-f]+: 6ee17820 bf2cvtl2 v0.8h, v1.16b
+[ ]*[0-9a-f]+: 6ee17821 bf2cvtl2 v1.8h, v1.16b
+[ ]*[0-9a-f]+: 6ee17a30 bf2cvtl2 v16.8h, v17.16b
+[ ]*[0-9a-f]+: 6e217800 f1cvtl2 v0.8h, v0.16b
+[ ]*[0-9a-f]+: 6e217801 f1cvtl2 v1.8h, v0.16b
+[ ]*[0-9a-f]+: 6e217820 f1cvtl2 v0.8h, v1.16b
+[ ]*[0-9a-f]+: 6e217821 f1cvtl2 v1.8h, v1.16b
+[ ]*[0-9a-f]+: 6e217a30 f1cvtl2 v16.8h, v17.16b
+[ ]*[0-9a-f]+: 6e617800 f2cvtl2 v0.8h, v0.16b
+[ ]*[0-9a-f]+: 6e617801 f2cvtl2 v1.8h, v0.16b
+[ ]*[0-9a-f]+: 6e617820 f2cvtl2 v0.8h, v1.16b
+[ ]*[0-9a-f]+: 6e617821 f2cvtl2 v1.8h, v1.16b
+[ ]*[0-9a-f]+: 6e617a30 f2cvtl2 v16.8h, v17.16b
+[ ]*[0-9a-f]+: 2ec03c00 fscale v0.4h, v0.4h, v0.4h
+[ ]*[0-9a-f]+: 2ec03c01 fscale v1.4h, v0.4h, v0.4h
+[ ]*[0-9a-f]+: 2ec03c20 fscale v0.4h, v1.4h, v0.4h
+[ ]*[0-9a-f]+: 2ec13c00 fscale v0.4h, v0.4h, v1.4h
+[ ]*[0-9a-f]+: 2ec03c21 fscale v1.4h, v1.4h, v0.4h
+[ ]*[0-9a-f]+: 2ec13c20 fscale v0.4h, v1.4h, v1.4h
+[ ]*[0-9a-f]+: 2ec13c21 fscale v1.4h, v1.4h, v1.4h
+[ ]*[0-9a-f]+: 2ed23e30 fscale v16.4h, v17.4h, v18.4h
+[ ]*[0-9a-f]+: 6ec03c00 fscale v0.8h, v0.8h, v0.8h
+[ ]*[0-9a-f]+: 6ec03c01 fscale v1.8h, v0.8h, v0.8h
+[ ]*[0-9a-f]+: 6ec03c20 fscale v0.8h, v1.8h, v0.8h
+[ ]*[0-9a-f]+: 6ec13c00 fscale v0.8h, v0.8h, v1.8h
+[ ]*[0-9a-f]+: 6ec03c21 fscale v1.8h, v1.8h, v0.8h
+[ ]*[0-9a-f]+: 6ec13c20 fscale v0.8h, v1.8h, v1.8h
+[ ]*[0-9a-f]+: 6ec13c21 fscale v1.8h, v1.8h, v1.8h
+[ ]*[0-9a-f]+: 6ed23e30 fscale v16.8h, v17.8h, v18.8h
+[ ]*[0-9a-f]+: 2ea0fc00 fscale v0.2s, v0.2s, v0.2s
+[ ]*[0-9a-f]+: 2ea0fc01 fscale v1.2s, v0.2s, v0.2s
+[ ]*[0-9a-f]+: 2ea0fc20 fscale v0.2s, v1.2s, v0.2s
+[ ]*[0-9a-f]+: 2ea1fc00 fscale v0.2s, v0.2s, v1.2s
+[ ]*[0-9a-f]+: 2ea0fc21 fscale v1.2s, v1.2s, v0.2s
+[ ]*[0-9a-f]+: 2ea1fc20 fscale v0.2s, v1.2s, v1.2s
+[ ]*[0-9a-f]+: 2ea1fc21 fscale v1.2s, v1.2s, v1.2s
+[ ]*[0-9a-f]+: 2eb2fe30 fscale v16.2s, v17.2s, v18.2s
+[ ]*[0-9a-f]+: 6ea0fc00 fscale v0.4s, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 6ea0fc01 fscale v1.4s, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 6ea0fc20 fscale v0.4s, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 6ea1fc00 fscale v0.4s, v0.4s, v1.4s
+[ ]*[0-9a-f]+: 6ea0fc21 fscale v1.4s, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 6ea1fc20 fscale v0.4s, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 6ea1fc21 fscale v1.4s, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 6eb2fe30 fscale v16.4s, v17.4s, v18.4s
+[ ]*[0-9a-f]+: 6ee0fc00 fscale v0.2d, v0.2d, v0.2d
+[ ]*[0-9a-f]+: 6ee0fc01 fscale v1.2d, v0.2d, v0.2d
+[ ]*[0-9a-f]+: 6ee0fc20 fscale v0.2d, v1.2d, v0.2d
+[ ]*[0-9a-f]+: 6ee1fc00 fscale v0.2d, v0.2d, v1.2d
+[ ]*[0-9a-f]+: 6ee0fc21 fscale v1.2d, v1.2d, v0.2d
+[ ]*[0-9a-f]+: 6ee1fc20 fscale v0.2d, v1.2d, v1.2d
+[ ]*[0-9a-f]+: 6ee1fc21 fscale v1.2d, v1.2d, v1.2d
+[ ]*[0-9a-f]+: 6ef2fe30 fscale v16.2d, v17.2d, v18.2d
+[ ]*[0-9a-f]+: 0e40f400 fcvtn v0.8b, v0.4h, v0.4h
+[ ]*[0-9a-f]+: 0e40f401 fcvtn v1.8b, v0.4h, v0.4h
+[ ]*[0-9a-f]+: 0e40f420 fcvtn v0.8b, v1.4h, v0.4h
+[ ]*[0-9a-f]+: 0e41f400 fcvtn v0.8b, v0.4h, v1.4h
+[ ]*[0-9a-f]+: 0e40f421 fcvtn v1.8b, v1.4h, v0.4h
+[ ]*[0-9a-f]+: 0e41f420 fcvtn v0.8b, v1.4h, v1.4h
+[ ]*[0-9a-f]+: 0e41f421 fcvtn v1.8b, v1.4h, v1.4h
+[ ]*[0-9a-f]+: 0e52f630 fcvtn v16.8b, v17.4h, v18.4h
+[ ]*[0-9a-f]+: 4e40f400 fcvtn v0.16b, v0.8h, v0.8h
+[ ]*[0-9a-f]+: 4e40f401 fcvtn v1.16b, v0.8h, v0.8h
+[ ]*[0-9a-f]+: 4e40f420 fcvtn v0.16b, v1.8h, v0.8h
+[ ]*[0-9a-f]+: 4e41f400 fcvtn v0.16b, v0.8h, v1.8h
+[ ]*[0-9a-f]+: 4e40f421 fcvtn v1.16b, v1.8h, v0.8h
+[ ]*[0-9a-f]+: 4e41f420 fcvtn v0.16b, v1.8h, v1.8h
+[ ]*[0-9a-f]+: 4e41f421 fcvtn v1.16b, v1.8h, v1.8h
+[ ]*[0-9a-f]+: 4e52f630 fcvtn v16.16b, v17.8h, v18.8h
+[ ]*[0-9a-f]+: 0e00f400 fcvtn v0.8b, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 0e00f401 fcvtn v1.8b, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 0e00f420 fcvtn v0.8b, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 0e01f400 fcvtn v0.8b, v0.4s, v1.4s
+[ ]*[0-9a-f]+: 0e00f421 fcvtn v1.8b, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 0e01f420 fcvtn v0.8b, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 0e01f421 fcvtn v1.8b, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 0e12f630 fcvtn v16.8b, v17.4s, v18.4s
+[ ]*[0-9a-f]+: 4e00f400 fcvtn2 v0.16b, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 4e00f401 fcvtn2 v1.16b, v0.4s, v0.4s
+[ ]*[0-9a-f]+: 4e00f420 fcvtn2 v0.16b, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 4e01f400 fcvtn2 v0.16b, v0.4s, v1.4s
+[ ]*[0-9a-f]+: 4e00f421 fcvtn2 v1.16b, v1.4s, v0.4s
+[ ]*[0-9a-f]+: 4e01f420 fcvtn2 v0.16b, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 4e01f421 fcvtn2 v1.16b, v1.4s, v1.4s
+[ ]*[0-9a-f]+: 4e12f630 fcvtn2 v16.16b, v17.4s, v18.4s
diff --git a/gas/testsuite/gas/aarch64/advsimd-fp8.s b/gas/testsuite/gas/aarch64/advsimd-fp8.s
new file mode 100644
index 0000000..e49f38d
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-fp8.s
@@ -0,0 +1,76 @@
+ /* advsimd-fp8.s Test file for AArch64 8-bit floating-point vector
+ instructions. */
+
+ /* Instructions convert the elements from the lower half of the source
+ vector while scaling the values by 2^-UInt(FPMR.LSCALE{2}[3:0]). */
+
+ .macro cvrt_lowerhalf, op
+ \op v0.8h, v0.8b
+ \op v1.8h, v0.8b
+ \op v0.8h, v1.8b
+ \op v1.8h, v1.8b
+ \op v16.8h, v17.8b
+ .endm
+
+ cvrt_lowerhalf bf1cvtl
+ cvrt_lowerhalf bf2cvtl
+ cvrt_lowerhalf f1cvtl
+ cvrt_lowerhalf f2cvtl
+
+ /* Instructions convert the elements from the upper half of the source
+ vector while scaling the values by 2^-UInt(FPMR.LSCALE{2}[3:0]). */
+
+ .macro cvrt_upperhalf, op
+ \op v0.8h, v0.16b
+ \op v1.8h, v0.16b
+ \op v0.8h, v1.16b
+ \op v1.8h, v1.16b
+ \op v16.8h, v17.16b
+ .endm
+
+ cvrt_upperhalf bf1cvtl2
+ cvrt_upperhalf bf2cvtl2
+ cvrt_upperhalf f1cvtl2
+ cvrt_upperhalf f2cvtl2
+
+ /* Floating-point adjust exponent by vector. */
+
+ .macro fscale_gen, op_var
+ fscale v0.\op_var, v0.\op_var, v0.\op_var
+ fscale v1.\op_var, v0.\op_var, v0.\op_var
+ fscale v0.\op_var, v1.\op_var, v0.\op_var
+ fscale v0.\op_var, v0.\op_var, v1.\op_var
+ fscale v1.\op_var, v1.\op_var, v0.\op_var
+ fscale v0.\op_var, v1.\op_var, v1.\op_var
+ fscale v1.\op_var, v1.\op_var, v1.\op_var
+ fscale v16.\op_var, v17.\op_var, v18.\op_var
+ .endm
+
+ /* Half-precision variant. */
+ fscale_gen 4h
+ fscale_gen 8h
+ /* Single-precision variant. */
+ fscale_gen 2s
+ fscale_gen 4s
+ fscale_gen 2d
+
+ /* Half and single-precision to FP8 convert and narrow. */
+
+ .macro fcvtn_to_fp8, op, sd, ss
+ \op v0.\sd, v0.\ss, v0.\ss
+ \op v1.\sd, v0.\ss, v0.\ss
+ \op v0.\sd, v1.\ss, v0.\ss
+ \op v0.\sd, v0.\ss, v1.\ss
+ \op v1.\sd, v1.\ss, v0.\ss
+ \op v0.\sd, v1.\ss, v1.\ss
+ \op v1.\sd, v1.\ss, v1.\ss
+ \op v16.\sd, v17.\ss, v18.\ss
+ .endm
+
+ /* Half-precision variant. */
+ fcvtn_to_fp8 fcvtn 8b, 4h
+ fcvtn_to_fp8 fcvtn 16b, 8h
+
+ /* Single-precision variant. */
+ fcvtn_to_fp8 fcvtn, 8b, 4s
+ fcvtn_to_fp8 fcvtn2, 16b, 4s
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index 46aa21b..2268bf6 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -10334,7 +10334,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0x11010000xxxxxxx1xxxxxxxxxxxxx
addpt. */
- return 3333;
+ return 3346;
}
else
{
@@ -10342,7 +10342,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1x11010000xxxxxxx1xxxxxxxxxxxxx
subpt. */
- return 3334;
+ return 3347;
}
}
}
@@ -11260,7 +11260,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
xxxx1011x11xxxxx0xxxxxxxxxxxxxxx
maddpt. */
- return 3335;
+ return 3348;
}
else
{
@@ -11268,7 +11268,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
xxxx1011x11xxxxx1xxxxxxxxxxxxxxx
msubpt. */
- return 3336;
+ return 3349;
}
}
}
@@ -11353,7 +11353,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
000001x0xx000100000xxxxxxxxxxxxx
addpt. */
- return 3337;
+ return 3350;
}
else
{
@@ -11460,7 +11460,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
000001x0xx000101000xxxxxxxxxxxxx
subpt. */
- return 3339;
+ return 3352;
}
else
{
@@ -11665,7 +11665,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
000001x0xx1xxxxx000010xxxxxxxxxx
addpt. */
- return 3338;
+ return 3351;
}
else
{
@@ -11706,7 +11706,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
000001x0xx1xxxxx000011xxxxxxxxxx
subpt. */
- return 3340;
+ return 3353;
}
else
{
@@ -13364,7 +13364,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
010001x0xx0xxxxx110100xxxxxxxxxx
mlapt. */
- return 3342;
+ return 3355;
}
}
else
@@ -13394,7 +13394,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
010001x0xx0xxxxx110110xxxxxxxxxx
madpt. */
- return 3341;
+ return 3354;
}
}
}
@@ -25607,21 +25607,54 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- if (((word >> 23) & 0x1) == 0)
+ if (((word >> 14) & 0x1) == 0)
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- 0x0011100x0xxxxxxx1101xxxxxxxxxx
- fmax. */
- return 302;
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 0x0011100x0xxxxxx01101xxxxxxxxxx
+ fmax. */
+ return 302;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 0x0011101x0xxxxxx01101xxxxxxxxxx
+ fmin. */
+ return 314;
+ }
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- 0x0011101x0xxxxxxx1101xxxxxxxxxx
- fmin. */
- return 314;
+ if (((word >> 22) & 0x1) == 0)
+ {
+ if (((word >> 30) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 00001110x00xxxxxx11101xxxxxxxxxx
+ fcvtn. */
+ return 3341;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 01001110x00xxxxxx11101xxxxxxxxxx
+ fcvtn2. */
+ return 3342;
+ }
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ 0x001110x10xxxxxx11101xxxxxxxxxx
+ fcvtn. */
+ return 3343;
+ }
}
}
}
@@ -26007,11 +26040,22 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx101110x10xxxxx0x1111xxxxxxxxxx
- fdiv. */
- return 355;
+ if (((word >> 23) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx101110010xxxxx0x1111xxxxxxxxxx
+ fdiv. */
+ return 355;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx101110110xxxxx0x1111xxxxxxxxxx
+ fscale. */
+ return 3344;
+ }
}
}
}
@@ -27382,11 +27426,99 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xx101110xx1xxxxx011110xxxxxxxxxx
- sqneg. */
- return 218;
+ if (((word >> 16) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx101110xx1xxxx0011110xxxxxxxxxx
+ sqneg. */
+ return 218;
+ }
+ else
+ {
+ if (((word >> 22) & 0x1) == 0)
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ if (((word >> 30) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x0101110001xxxx1011110xxxxxxxxxx
+ f1cvtl. */
+ return 3337;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x1101110001xxxx1011110xxxxxxxxxx
+ f1cvtl2. */
+ return 3338;
+ }
+ }
+ else
+ {
+ if (((word >> 30) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x0101110101xxxx1011110xxxxxxxxxx
+ bf1cvtl. */
+ return 3333;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x1101110101xxxx1011110xxxxxxxxxx
+ bf1cvtl2. */
+ return 3334;
+ }
+ }
+ }
+ else
+ {
+ if (((word >> 23) & 0x1) == 0)
+ {
+ if (((word >> 30) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x0101110011xxxx1011110xxxxxxxxxx
+ f2cvtl. */
+ return 3339;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x1101110011xxxx1011110xxxxxxxxxx
+ f2cvtl2. */
+ return 3340;
+ }
+ }
+ else
+ {
+ if (((word >> 30) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x0101110111xxxx1011110xxxxxxxxxx
+ bf2cvtl. */
+ return 3335;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ x1101110111xxxx1011110xxxxxxxxxx
+ bf2cvtl2. */
+ return 3336;
+ }
+ }
+ }
+ }
}
}
}
@@ -29367,11 +29499,22 @@ aarch64_opcode_lookup_1 (uint32_t word)
}
else
{
- /* 33222222222211111111110000000000
- 10987654321098765432109876543210
- xxx011101x1xxxxx111111xxxxxxxxxx
- frsqrts. */
- return 315;
+ if (((word >> 29) & 0x1) == 0)
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx0011101x1xxxxx111111xxxxxxxxxx
+ frsqrts. */
+ return 315;
+ }
+ else
+ {
+ /* 33222222222211111111110000000000
+ 10987654321098765432109876543210
+ xx1011101x1xxxxx111111xxxxxxxxxx
+ fscale. */
+ return 3345;
+ }
}
}
}
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 7e60346..f876c1b 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -2368,6 +2368,34 @@
QLF3(X,X,NIL), \
}
+#define QL_V3_BSS_LOWER \
+{ \
+ QLF3(V_8B, V_4S, V_4S), \
+}
+
+#define QL_V3_BSS_FULL \
+{ \
+ QLF3(V_16B, V_4S, V_4S), \
+}
+
+#define QL_V3_BHH \
+{ \
+ QLF3(V_8B, V_4H, V_4H), \
+ QLF3(V_16B, V_8H, V_8H), \
+}
+
+/* e.g. BF1CVTL <Vd>.8H, <Vn>.8B. */
+#define QL_V2FP8B8H \
+{ \
+ QLF2(V_8H, V_8B), \
+}
+
+/* e.g. BF1CVTL2 <Vd>.8H, <Vn>.16B. */
+#define QL_V28H16B \
+{ \
+ QLF2(V_8H, V_16B), \
+}
+
/* e.g. UDOT <Vd>.2S, <Vn>.8B, <Vm>.8B. */
#define QL_V3DOT \
{ \
@@ -6459,6 +6487,19 @@ const struct aarch64_opcode aarch64_opcode_table[] =
SVE2p1_INSNC("st2q",0xe4600000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt2, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QUU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("st3q",0xe4a00000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt3, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QUU, 0, C_SCAN_MOVPRFX, 0),
SVE2p1_INSNC("st4q",0xe4e00000, 0xffe0e000, sve_misc, 0, OP3 (SME_Zt4, SVE_Pg3, SVE_ADDR_RR_LSL4), OP_SVE_QUU, 0, C_SCAN_MOVPRFX, 0),
+ FP8_INSN("bf1cvtl", 0x2ea17800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V2FP8B8H, 0),
+ FP8_INSN("bf1cvtl2", 0x6ea17800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V28H16B, 0),
+ FP8_INSN("bf2cvtl", 0x2ee17800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V2FP8B8H, 0),
+ FP8_INSN("bf2cvtl2", 0x6ee17800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V28H16B, 0),
+ FP8_INSN("f1cvtl", 0x2e217800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V2FP8B8H, 0),
+ FP8_INSN("f1cvtl2", 0x6e217800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V28H16B, 0),
+ FP8_INSN("f2cvtl", 0x2e617800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V2FP8B8H, 0),
+ FP8_INSN("f2cvtl2", 0x6e617800, 0xfffffc00, asimdmisc, OP2 (Vd, Vn), QL_V28H16B, 0),
+ FP8_INSN("fcvtn", 0xe00f400, 0xffe0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_V3_BSS_LOWER, 0),
+ FP8_INSN("fcvtn2", 0x4e00f400, 0xffe0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_V3_BSS_FULL, 0),
+ FP8_INSN("fcvtn", 0xe40f400, 0xbfe0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_V3_BHH, F_SIZEQ),
+ FP8_INSN("fscale", 0x2ec03c00, 0xbfe0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_VSHIFT_H, F_SIZEQ),
+ FP8_INSN("fscale", 0x2ea0fc00, 0xbfa0fc00, asimdmisc, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ),
/* Checked Pointer Arithmetic Instructions. */
CPA_INSN ("addpt", 0x9a002000, 0xffe0e000, aarch64_misc, OP3 (Rd_SP, Rn_SP, Rm_LSL), QL_I3SAMEX),