[binutils-gdb] gas, aarch64: Add faminmax extension
Nick Clifton
nickc@sourceware.org
Tue Mar 19 15:42:05 GMT 2024
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f3f34f2b26259dfa7ecd37c8ba079e18f69c6ab5
commit f3f34f2b26259dfa7ecd37c8ba079e18f69c6ab5
Author: Saurabh Jha <saurabh.jha@arm.com>
Date: Tue Mar 19 15:41:41 2024 +0000
gas, aarch64: Add faminmax extension
Diff:
---
gas/config/tc-aarch64.c | 1 +
gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d | 3 +
gas/testsuite/gas/aarch64/advsimd-faminmax-bad.l | 51 +
.../gas/aarch64/advsimd-faminmax-illegal.d | 3 +
.../gas/aarch64/advsimd-faminmax-illegal.l | 87 +
.../gas/aarch64/advsimd-faminmax-illegal.s | 51 +
gas/testsuite/gas/aarch64/advsimd-faminmax.d | 60 +
gas/testsuite/gas/aarch64/advsimd-faminmax.s | 67 +
gas/testsuite/gas/aarch64/sme2-faminmax-bad.d | 3 +
gas/testsuite/gas/aarch64/sme2-faminmax-bad.l | 49 +
gas/testsuite/gas/aarch64/sme2-faminmax-illegal.d | 3 +
gas/testsuite/gas/aarch64/sme2-faminmax-illegal.l | 87 +
gas/testsuite/gas/aarch64/sme2-faminmax-illegal.s | 63 +
gas/testsuite/gas/aarch64/sme2-faminmax.d | 58 +
gas/testsuite/gas/aarch64/sme2-faminmax.s | 67 +
gas/testsuite/gas/aarch64/sve2-faminmax-bad.d | 3 +
gas/testsuite/gas/aarch64/sve2-faminmax-bad.l | 81 +
gas/testsuite/gas/aarch64/sve2-faminmax-illegal.d | 3 +
gas/testsuite/gas/aarch64/sve2-faminmax-illegal.l | 123 +
gas/testsuite/gas/aarch64/sve2-faminmax-illegal.s | 71 +
gas/testsuite/gas/aarch64/sve2-faminmax-warning.s | 0
gas/testsuite/gas/aarch64/sve2-faminmax.d | 90 +
gas/testsuite/gas/aarch64/sve2-faminmax.s | 95 +
include/opcode/aarch64.h | 2 +
opcodes/aarch64-asm-2.c | 338 +-
opcodes/aarch64-dis-2.c | 4714 ++++++++++----------
opcodes/aarch64-opc-2.c | 30 +-
opcodes/aarch64-tbl.h | 30 +
28 files changed, 3747 insertions(+), 2486 deletions(-)
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index d6dab86e8a9..6ad4fae8b0e 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10476,6 +10476,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
{"sve2p1", AARCH64_FEATURE (SVE2p1), AARCH64_FEATURE (SVE2)},
{"rcpc3", AARCH64_FEATURE (RCPC3), AARCH64_FEATURE (RCPC2)},
{"cpa", AARCH64_FEATURE (CPA), AARCH64_NO_FEATURES},
+ {"faminmax", AARCH64_FEATURE (FAMINMAX), AARCH64_FEATURE (SIMD)},
{NULL, AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
};
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d b/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d
new file mode 100644
index 00000000000..fcf64e09012
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d
@@ -0,0 +1,3 @@
+#as:
+#source: advsimd-faminmax.s
+#error_output: advsimd-faminmax-bad.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.l b/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.l
new file mode 100644
index 00000000000..9492c67c459
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax-bad.l
@@ -0,0 +1,51 @@
+[^ :]+: Assembler messages:
+.*: Error: selected processor does not support `famax v0.4h,v0.4h,v0.4h'
+.*: Error: selected processor does not support `famax v31.4h,v0.4h,v0.4h'
+.*: Error: selected processor does not support `famax v0.4h,v31.4h,v0.4h'
+.*: Error: selected processor does not support `famax v0.4h,v0.4h,v31.4h'
+.*: Error: selected processor does not support `famax v17.4h,v21.4h,v27.4h'
+.*: Error: selected processor does not support `famax v0.8h,v0.8h,v0.8h'
+.*: Error: selected processor does not support `famax v31.8h,v0.8h,v0.8h'
+.*: Error: selected processor does not support `famax v0.8h,v31.8h,v0.8h'
+.*: Error: selected processor does not support `famax v0.8h,v0.8h,v31.8h'
+.*: Error: selected processor does not support `famax v2.8h,v7.8h,v4.8h'
+.*: Error: selected processor does not support `famax v0.2s,v0.2s,v0.2s'
+.*: Error: selected processor does not support `famax v31.2s,v0.2s,v0.2s'
+.*: Error: selected processor does not support `famax v0.2s,v31.2s,v0.2s'
+.*: Error: selected processor does not support `famax v0.2s,v0.2s,v31.2s'
+.*: Error: selected processor does not support `famax v3.2s,v1.2s,v19.2s'
+.*: Error: selected processor does not support `famax v0.4s,v0.4s,v0.4s'
+.*: Error: selected processor does not support `famax v31.4s,v0.4s,v0.4s'
+.*: Error: selected processor does not support `famax v0.4s,v31.4s,v0.4s'
+.*: Error: selected processor does not support `famax v0.4s,v0.4s,v31.4s'
+.*: Error: selected processor does not support `famax v9.4s,v8.4s,v7.4s'
+.*: Error: selected processor does not support `famax v0.2d,v0.2d,v0.2d'
+.*: Error: selected processor does not support `famax v31.2d,v0.2d,v0.2d'
+.*: Error: selected processor does not support `famax v0.2d,v31.2d,v0.2d'
+.*: Error: selected processor does not support `famax v0.2d,v0.2d,v31.2d'
+.*: Error: selected processor does not support `famax v18.2d,v14.2d,v16.2d'
+.*: Error: selected processor does not support `famin v0.4h,v0.4h,v0.4h'
+.*: Error: selected processor does not support `famin v31.4h,v0.4h,v0.4h'
+.*: Error: selected processor does not support `famin v0.4h,v31.4h,v0.4h'
+.*: Error: selected processor does not support `famin v0.4h,v0.4h,v31.4h'
+.*: Error: selected processor does not support `famin v17.4h,v21.4h,v27.4h'
+.*: Error: selected processor does not support `famin v0.8h,v0.8h,v0.8h'
+.*: Error: selected processor does not support `famin v31.8h,v0.8h,v0.8h'
+.*: Error: selected processor does not support `famin v0.8h,v31.8h,v0.8h'
+.*: Error: selected processor does not support `famin v0.8h,v0.8h,v31.8h'
+.*: Error: selected processor does not support `famin v2.8h,v7.8h,v4.8h'
+.*: Error: selected processor does not support `famin v0.2s,v0.2s,v0.2s'
+.*: Error: selected processor does not support `famin v31.2s,v0.2s,v0.2s'
+.*: Error: selected processor does not support `famin v0.2s,v31.2s,v0.2s'
+.*: Error: selected processor does not support `famin v0.2s,v0.2s,v31.2s'
+.*: Error: selected processor does not support `famin v3.2s,v1.2s,v19.2s'
+.*: Error: selected processor does not support `famin v0.4s,v0.4s,v0.4s'
+.*: Error: selected processor does not support `famin v31.4s,v0.4s,v0.4s'
+.*: Error: selected processor does not support `famin v0.4s,v31.4s,v0.4s'
+.*: Error: selected processor does not support `famin v0.4s,v0.4s,v31.4s'
+.*: Error: selected processor does not support `famin v9.4s,v8.4s,v7.4s'
+.*: Error: selected processor does not support `famin v0.2d,v0.2d,v0.2d'
+.*: Error: selected processor does not support `famin v31.2d,v0.2d,v0.2d'
+.*: Error: selected processor does not support `famin v0.2d,v31.2d,v0.2d'
+.*: Error: selected processor does not support `famin v0.2d,v0.2d,v31.2d'
+.*: Error: selected processor does not support `famin v18.2d,v14.2d,v16.2d'
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.d b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.d
new file mode 100644
index 00000000000..8cce8fe1897
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+faminmax
+#source: advsimd-faminmax-illegal.s
+#error_output: advsimd-faminmax-illegal.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.l b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.l
new file mode 100644
index 00000000000..29340d6f56c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.l
@@ -0,0 +1,87 @@
+[^ :]+: Assembler messages:
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax v0.4s,v1.4h,v2.4h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax v0\.4h, v1\.4h, v2\.4h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax v0\.8h, v1\.8h, v2\.8h
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax v31.8h,v30.8h,v29.2s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax v31\.8h, v30\.8h, v29\.8h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax v31\.4h, v30\.4h, v29\.4h
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax v15.2s,v16.2d,v17.2s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax v15\.2s, v16\.2s, v17\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax v15\.4s, v16\.4s, v17\.4s
+[^ :]+:[0-9]+: Info: famax v15\.2d, v16\.2d, v17\.2d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin v0.4s,v1.4h,v2.4h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin v0\.4h, v1\.4h, v2\.4h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin v0\.8h, v1\.8h, v2\.8h
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin v31.8h,v30.8h,v29.2s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin v31\.8h, v30\.8h, v29\.8h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin v31\.4h, v30\.4h, v29\.4h
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin v15.2s,v16.2d,v17.2s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin v15\.2s, v16\.2s, v17\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin v15\.4s, v16\.4s, v17\.4s
+[^ :]+:[0-9]+: Info: famin v15\.2d, v16\.2d, v17\.2d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax v0\.8b,v1\.4b,v2\.4b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax v0\.2s, v1\.2s, v2\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax v0\.4s, v1\.4s, v2\.4s
+[^ :]+:[0-9]+: Info: famax v0\.2d, v1\.2d, v2\.2d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax v10\.16b,v9\.16b,v8\.16b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax v10\.2s, v9\.2s, v8\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax v10\.4s, v9\.4s, v8\.4s
+[^ :]+:[0-9]+: Info: famax v10\.2d, v9\.2d, v8\.2d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin v0\.8b,v1\.4b,v2\.4b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin v0\.2s, v1\.2s, v2\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin v0\.4s, v1\.4s, v2\.4s
+[^ :]+:[0-9]+: Info: famin v0\.2d, v1\.2d, v2\.2d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin v10\.16b,v9\.16b,v8\.16b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin v10\.2s, v9\.2s, v8\.2s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin v10\.4s, v9\.4s, v8\.4s
+[^ :]+:[0-9]+: Info: famin v10\.2d, v9\.2d, v8\.2d
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famax v0.4h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famax v0.4h,v1.4h'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 3 -- `famax v0.4h,v1.4h,v2.4h,v3.4h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famin v0.4h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famin v0.4h,v1.4h'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 3 -- `famin v0.4h,v1.4h,v2.4h,v3.4h'
+[^ :]+:[0-9]+: Error: unexpected character `x' in element size at operand 3 -- `famax v0.4h,v1.4h,v2.4x'
+[^ :]+:[0-9]+: Error: unexpected character `a' in element size at operand 2 -- `famax v0.2h,v2.2a,v1.2h'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famax v2.2t,v0.2d,v1.2d'
+[^ :]+:[0-9]+: Error: unexpected character `x' in element size at operand 3 -- `famin v0.4h,v1.4h,v2.4x'
+[^ :]+:[0-9]+: Error: unexpected character `a' in element size at operand 2 -- `famin v0.2h,v2.2a,v1.2h'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famin v2.2t,v0.2d,v1.2d'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 2 -- `famax v19.2d,20.2d,v21.2d'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famax 19.4d,v20.4d,v21.4d'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 3 -- `famax v19.2s,v20.2s,21.2s'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 1 -- `famax v19,v20.2d,v21.2d'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 2 -- `famax v19.2d,v20,v21.2d'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 3 -- `famax v19.2d,v20.2d,v21'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 2 -- `famin v19.2d,20.2d,v21.2d'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famin 19.4d,v20.4d,v21.4d'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 3 -- `famin v19.2s,v20.2s,21.2s'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 1 -- `famin v19,v20.2d,v21.2d'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 2 -- `famin v19.2d,v20,v21.2d'
+[^ :]+:[0-9]+: Error: invalid use of vector register at operand 3 -- `famin v19.2d,v20.2d,v21'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famax v35.4d,v30.4d,v29.4d'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 2 -- `famax v30.2s,v35.2s,v29.2s'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 3 -- `famax v30.4s,v29.4s,v35.4s'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famin v35.4d,v30.4d,v29.4d'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 2 -- `famin v30.2s,v35.2s,v29.2s'
+[^ :]+:[0-9]+: Error: expected an Advanced SIMD vector register at operand 3 -- `famin v30.4s,v29.4s,v35.4s'
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.s b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.s
new file mode 100644
index 00000000000..c52a469bda5
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.s
@@ -0,0 +1,51 @@
+// Operand mismatch
+famax v0.4s, v1.4h, v2.4h
+famax v31.8h, v30.8h, v29.2s
+famax v15.2s, v16.2d, v17.2s
+famin v0.4s, v1.4h, v2.4h
+famin v31.8h, v30.8h, v29.2s
+famin v15.2s, v16.2d, v17.2s
+
+// Disallowed types
+famax v0.8b, v1.4b, v2.4b
+famax v10.16b, v9.16b, v8.16b
+famin v0.8b, v1.4b, v2.4b
+famin v10.16b, v9.16b, v8.16b
+
+// Incorrect number of arguments
+famax v0.4h
+famax v0.4h, v1.4h
+famax v0.4h, v1.4h, v2.4h, v3.4h
+famin v0.4h
+famin v0.4h, v1.4h
+famin v0.4h, v1.4h, v2.4h, v3.4h
+
+// Spelling mistakes
+famax v0.4h, v1.4h, v2.4x
+famax v0.2h, v2.2a, v1.2h
+famax v2.2t, v0.2d, v1.2d
+famin v0.4h, v1.4h, v2.4x
+famin v0.2h, v2.2a, v1.2h
+famin v2.2t, v0.2d, v1.2d
+
+// Missing qualifiers
+famax v19.2d, 20.2d, v21.2d
+famax 19.4d, v20.4d, v21.4d
+famax v19.2s, v20.2s, 21.2s
+famax v19, v20.2d, v21.2d
+famax v19.2d, v20, v21.2d
+famax v19.2d, v20.2d, v21
+famin v19.2d, 20.2d, v21.2d
+famin 19.4d, v20.4d, v21.4d
+famin v19.2s, v20.2s, 21.2s
+famin v19, v20.2d, v21.2d
+famin v19.2d, v20, v21.2d
+famin v19.2d, v20.2d, v21
+
+// Out of range numbers
+famax v35.4d, v30.4d, v29.4d
+famax v30.2s, v35.2s, v29.2s
+famax v30.4s, v29.4s, v35.4s
+famin v35.4d, v30.4d, v29.4d
+famin v30.2s, v35.2s, v29.2s
+famin v30.4s, v29.4s, v35.4s
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax.d b/gas/testsuite/gas/aarch64/advsimd-faminmax.d
new file mode 100644
index 00000000000..7be96b5ef25
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax.d
@@ -0,0 +1,60 @@
+#objdump: -dr
+#as: -march=armv8-a+faminmax
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+ 0: 0ec01c00 famax v0.4h, v0.4h, v0.4h
+ 4: 0ec01c1f famax v31.4h, v0.4h, v0.4h
+ 8: 0ec01fe0 famax v0.4h, v31.4h, v0.4h
+ c: 0edf1c00 famax v0.4h, v0.4h, v31.4h
+ 10: 0edb1eb1 famax v17.4h, v21.4h, v27.4h
+ 14: 4ec01c00 famax v0.8h, v0.8h, v0.8h
+ 18: 4ec01c1f famax v31.8h, v0.8h, v0.8h
+ 1c: 4ec01fe0 famax v0.8h, v31.8h, v0.8h
+ 20: 4edf1c00 famax v0.8h, v0.8h, v31.8h
+ 24: 4ec41ce2 famax v2.8h, v7.8h, v4.8h
+ 28: 0ea0dc00 famax v0.2s, v0.2s, v0.2s
+ 2c: 0ea0dc1f famax v31.2s, v0.2s, v0.2s
+ 30: 0ea0dfe0 famax v0.2s, v31.2s, v0.2s
+ 34: 0ebfdc00 famax v0.2s, v0.2s, v31.2s
+ 38: 0eb3dc23 famax v3.2s, v1.2s, v19.2s
+ 3c: 4ea0dc00 famax v0.4s, v0.4s, v0.4s
+ 40: 4ea0dc1f famax v31.4s, v0.4s, v0.4s
+ 44: 4ea0dfe0 famax v0.4s, v31.4s, v0.4s
+ 48: 4ebfdc00 famax v0.4s, v0.4s, v31.4s
+ 4c: 4ea7dd09 famax v9.4s, v8.4s, v7.4s
+ 50: 4ee0dc00 famax v0.2d, v0.2d, v0.2d
+ 54: 4ee0dc1f famax v31.2d, v0.2d, v0.2d
+ 58: 4ee0dfe0 famax v0.2d, v31.2d, v0.2d
+ 5c: 4effdc00 famax v0.2d, v0.2d, v31.2d
+ 60: 4ef0ddd2 famax v18.2d, v14.2d, v16.2d
+ 64: 0ef3dc23 .inst 0x0ef3dc23 ; undefined
+ 68: 2ec01c00 famin v0.4h, v0.4h, v0.4h
+ 6c: 2ec01c1f famin v31.4h, v0.4h, v0.4h
+ 70: 2ec01fe0 famin v0.4h, v31.4h, v0.4h
+ 74: 2edf1c00 famin v0.4h, v0.4h, v31.4h
+ 78: 2edb1eb1 famin v17.4h, v21.4h, v27.4h
+ 7c: 6ec01c00 famin v0.8h, v0.8h, v0.8h
+ 80: 6ec01c1f famin v31.8h, v0.8h, v0.8h
+ 84: 6ec01fe0 famin v0.8h, v31.8h, v0.8h
+ 88: 6edf1c00 famin v0.8h, v0.8h, v31.8h
+ 8c: 6ec41ce2 famin v2.8h, v7.8h, v4.8h
+ 90: 2ea0dc00 famin v0.2s, v0.2s, v0.2s
+ 94: 2ea0dc1f famin v31.2s, v0.2s, v0.2s
+ 98: 2ea0dfe0 famin v0.2s, v31.2s, v0.2s
+ 9c: 2ebfdc00 famin v0.2s, v0.2s, v31.2s
+ a0: 2eb3dc23 famin v3.2s, v1.2s, v19.2s
+ a4: 6ea0dc00 famin v0.4s, v0.4s, v0.4s
+ a8: 6ea0dc1f famin v31.4s, v0.4s, v0.4s
+ ac: 6ea0dfe0 famin v0.4s, v31.4s, v0.4s
+ b0: 6ebfdc00 famin v0.4s, v0.4s, v31.4s
+ b4: 6ea7dd09 famin v9.4s, v8.4s, v7.4s
+ b8: 6ee0dc00 famin v0.2d, v0.2d, v0.2d
+ bc: 6ee0dc1f famin v31.2d, v0.2d, v0.2d
+ c0: 6ee0dfe0 famin v0.2d, v31.2d, v0.2d
+ c4: 6effdc00 famin v0.2d, v0.2d, v31.2d
+ c8: 6ef0ddd2 famin v18.2d, v14.2d, v16.2d
+ cc: 2ef3dc23 .inst 0x2ef3dc23 ; undefined
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/advsimd-faminmax.s b/gas/testsuite/gas/aarch64/advsimd-faminmax.s
new file mode 100644
index 00000000000..91bc9b54d4c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/advsimd-faminmax.s
@@ -0,0 +1,67 @@
+// Valid instructions
+famax v0.4h, v0.4h, v0.4h
+famax v31.4h, v0.4h, v0.4h
+famax v0.4h, v31.4h, v0.4h
+famax v0.4h, v0.4h, v31.4h
+famax v17.4h, v21.4h, v27.4h
+
+famax v0.8h, v0.8h, v0.8h
+famax v31.8h, v0.8h, v0.8h
+famax v0.8h, v31.8h, v0.8h
+famax v0.8h, v0.8h, v31.8h
+famax v2.8h, v7.8h, v4.8h
+
+famax v0.2s, v0.2s, v0.2s
+famax v31.2s, v0.2s, v0.2s
+famax v0.2s, v31.2s, v0.2s
+famax v0.2s, v0.2s, v31.2s
+famax v3.2s, v1.2s, v19.2s
+
+famax v0.4s, v0.4s, v0.4s
+famax v31.4s, v0.4s, v0.4s
+famax v0.4s, v31.4s, v0.4s
+famax v0.4s, v0.4s, v31.4s
+famax v9.4s, v8.4s, v7.4s
+
+famax v0.2d, v0.2d, v0.2d
+famax v31.2d, v0.2d, v0.2d
+famax v0.2d, v31.2d, v0.2d
+famax v0.2d, v0.2d, v31.2d
+famax v18.2d, v14.2d, v16.2d
+
+// Invalid instruction because Q = 0 and sz = 1 which is reserved
+.inst 0xef3dc23
+
+// Valid instructions
+famin v0.4h, v0.4h, v0.4h
+famin v31.4h, v0.4h, v0.4h
+famin v0.4h, v31.4h, v0.4h
+famin v0.4h, v0.4h, v31.4h
+famin v17.4h, v21.4h, v27.4h
+
+famin v0.8h, v0.8h, v0.8h
+famin v31.8h, v0.8h, v0.8h
+famin v0.8h, v31.8h, v0.8h
+famin v0.8h, v0.8h, v31.8h
+famin v2.8h, v7.8h, v4.8h
+
+famin v0.2s, v0.2s, v0.2s
+famin v31.2s, v0.2s, v0.2s
+famin v0.2s, v31.2s, v0.2s
+famin v0.2s, v0.2s, v31.2s
+famin v3.2s, v1.2s, v19.2s
+
+famin v0.4s, v0.4s, v0.4s
+famin v31.4s, v0.4s, v0.4s
+famin v0.4s, v31.4s, v0.4s
+famin v0.4s, v0.4s, v31.4s
+famin v9.4s, v8.4s, v7.4s
+
+famin v0.2d, v0.2d, v0.2d
+famin v31.2d, v0.2d, v0.2d
+famin v0.2d, v31.2d, v0.2d
+famin v0.2d, v0.2d, v31.2d
+famin v18.2d, v14.2d, v16.2d
+
+// Invalid instruction because Q = 0 and sz = 1 which is reserved
+.inst 0x2ef3dc23
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax-bad.d b/gas/testsuite/gas/aarch64/sme2-faminmax-bad.d
new file mode 100644
index 00000000000..dac2d4766e3
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax-bad.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+faminmax
+#source: sme2-faminmax.s
+#error_output: sme2-faminmax-bad.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax-bad.l b/gas/testsuite/gas/aarch64/sme2-faminmax-bad.l
new file mode 100644
index 00000000000..513b430f7a6
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax-bad.l
@@ -0,0 +1,49 @@
+[^ :]+: Assembler messages:
+.*: Error: selected processor does not support `famax {z0.h-z1.h},{z0.h-z1.h},{z0.h-z1.h}'
+.*: Error: selected processor does not support `famax {z30.h-z31.h},{z30.h-z31.h},{z0.h-z1.h}'
+.*: Error: selected processor does not support `famax {z0.h-z1.h},{z0.h-z1.h},{z30.h-z31.h}'
+.*: Error: selected processor does not support `famax {z18.h-z19.h},{z18.h-z19.h},{z26.h-z27.h}'
+.*: Error: selected processor does not support `famax {z0.s-z1.s},{z0.s-z1.s},{z0.s-z1.s}'
+.*: Error: selected processor does not support `famax {z30.s-z31.s},{z30.s-z31.s},{z0.s-z1.s}'
+.*: Error: selected processor does not support `famax {z0.s-z1.s},{z0.s-z1.s},{z30.s-z31.s}'
+.*: Error: selected processor does not support `famax {z4.s-z5.s},{z4.s-z5.s},{z10.s-z11.s}'
+.*: Error: selected processor does not support `famax {z0.d-z1.d},{z0.d-z1.d},{z0.d-z1.d}'
+.*: Error: selected processor does not support `famax {z30.d-z31.d},{z30.d-z31.d},{z0.d-z1.d}'
+.*: Error: selected processor does not support `famax {z0.d-z1.d},{z0.d-z1.d},{z30.d-z31.d}'
+.*: Error: selected processor does not support `famax {z28.d-z29.d},{z28.d-z29.d},{z8.d-z9.d}'
+.*: Error: selected processor does not support `famax {z0.h-z3.h},{z0.h-z3.h},{z0.h-z3.h}'
+.*: Error: selected processor does not support `famax {z28.h-z31.h},{z28.h-z31.h},{z0.h-z3.h}'
+.*: Error: selected processor does not support `famax {z0.h-z3.h},{z0.h-z3.h},{z28.h-z31.h}'
+.*: Error: selected processor does not support `famax {z16.h-z19.h},{z16.h-z19.h},{z20.h-z23.h}'
+.*: Error: selected processor does not support `famax {z0.s-z3.s},{z0.s-z3.s},{z0.s-z3.s}'
+.*: Error: selected processor does not support `famax {z28.s-z31.s},{z28.s-z31.s},{z0.s-z3.s}'
+.*: Error: selected processor does not support `famax {z0.s-z3.s},{z0.s-z3.s},{z28.s-z31.s}'
+.*: Error: selected processor does not support `famax {z24.s-z27.s},{z24.s-z27.s},{z4.s-z7.s}'
+.*: Error: selected processor does not support `famax {z0.d-z3.d},{z0.d-z3.d},{z0.d-z3.d}'
+.*: Error: selected processor does not support `famax {z28.d-z31.d},{z28.d-z31.d},{z0.d-z3.d}'
+.*: Error: selected processor does not support `famax {z0.d-z3.d},{z0.d-z3.d},{z28.d-z31.d}'
+.*: Error: selected processor does not support `famax {z12.d-z15.d},{z12.d-z15.d},{z8.d-z11.d}'
+.*: Error: selected processor does not support `famin {z0.h-z1.h},{z0.h-z1.h},{z0.h-z1.h}'
+.*: Error: selected processor does not support `famin {z30.h-z31.h},{z30.h-z31.h},{z0.h-z1.h}'
+.*: Error: selected processor does not support `famin {z0.h-z1.h},{z0.h-z1.h},{z30.h-z31.h}'
+.*: Error: selected processor does not support `famin {z18.h-z19.h},{z18.h-z19.h},{z26.h-z27.h}'
+.*: Error: selected processor does not support `famin {z0.s-z1.s},{z0.s-z1.s},{z0.s-z1.s}'
+.*: Error: selected processor does not support `famin {z30.s-z31.s},{z30.s-z31.s},{z0.s-z1.s}'
+.*: Error: selected processor does not support `famin {z0.s-z1.s},{z0.s-z1.s},{z30.s-z31.s}'
+.*: Error: selected processor does not support `famin {z4.s-z5.s},{z4.s-z5.s},{z10.s-z11.s}'
+.*: Error: selected processor does not support `famin {z0.d-z1.d},{z0.d-z1.d},{z0.d-z1.d}'
+.*: Error: selected processor does not support `famin {z30.d-z31.d},{z30.d-z31.d},{z0.d-z1.d}'
+.*: Error: selected processor does not support `famin {z0.d-z1.d},{z0.d-z1.d},{z30.d-z31.d}'
+.*: Error: selected processor does not support `famin {z28.d-z29.d},{z28.d-z29.d},{z8.d-z9.d}'
+.*: Error: selected processor does not support `famin {z0.h-z3.h},{z0.h-z3.h},{z0.h-z3.h}'
+.*: Error: selected processor does not support `famin {z28.h-z31.h},{z28.h-z31.h},{z0.h-z3.h}'
+.*: Error: selected processor does not support `famin {z0.h-z3.h},{z0.h-z3.h},{z28.h-z31.h}'
+.*: Error: selected processor does not support `famin {z16.h-z19.h},{z16.h-z19.h},{z20.h-z23.h}'
+.*: Error: selected processor does not support `famin {z0.s-z3.s},{z0.s-z3.s},{z0.s-z3.s}'
+.*: Error: selected processor does not support `famin {z28.s-z31.s},{z28.s-z31.s},{z0.s-z3.s}'
+.*: Error: selected processor does not support `famin {z0.s-z3.s},{z0.s-z3.s},{z28.s-z31.s}'
+.*: Error: selected processor does not support `famin {z24.s-z27.s},{z24.s-z27.s},{z4.s-z7.s}'
+.*: Error: selected processor does not support `famin {z0.d-z3.d},{z0.d-z3.d},{z0.d-z3.d}'
+.*: Error: selected processor does not support `famin {z28.d-z31.d},{z28.d-z31.d},{z0.d-z3.d}'
+.*: Error: selected processor does not support `famin {z0.d-z3.d},{z0.d-z3.d},{z28.d-z31.d}'
+.*: Error: selected processor does not support `famin {z12.d-z15.d},{z12.d-z15.d},{z8.d-z11.d}'
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.d b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.d
new file mode 100644
index 00000000000..d6ac3608e98
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+faminmax+sme2
+#source: sme2-faminmax-illegal.s
+#error_output: sme2-faminmax-illegal.l
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.l b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.l
new file mode 100644
index 00000000000..6eb0a000f73
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.l
@@ -0,0 +1,87 @@
+[^ :]+: Assembler messages:
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.s-z31\.s}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax {z18\.h-z19\.h}, {z18\.h-z19\.h}, {z30\.h-z31\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax {z18\.s-z19\.s}, {z18\.s-z19\.s}, {z30\.s-z31\.s}
+[^ :]+:[0-9]+: Info: famax {z18\.d-z19\.d}, {z18\.d-z19\.d}, {z30\.d-z31\.d}
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax {z30\.s-z31\.s},{z30\.s-z31\.s},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax {z30\.s-z31\.s}, {z30\.s-z31\.s}, {z18\.s-z19\.s}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax {z30\.h-z31\.h}, {z30\.h-z31\.h}, {z18\.h-z19\.h}
+[^ :]+:[0-9]+: Info: famax {z30\.d-z31\.d}, {z30\.d-z31\.d}, {z18\.d-z19\.d}
+[^ :]+:[0-9]+: Error: expected a list of 4 registers at operand 3 -- `famax {z24\.s-z27\.s},{z24\.s-z27\.s},{z30\.s-z31\.s}'
+[^ :]+:[0-9]+: Error: expected a list of 2 registers at operand 3 -- `famax {z30\.h-z31\.h},{z30\.h-z31\.h},{z24\.h-z27\.h}'
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.s-z31\.s}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin {z18\.h-z19\.h}, {z18\.h-z19\.h}, {z30\.h-z31\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin {z18\.s-z19\.s}, {z18\.s-z19\.s}, {z30\.s-z31\.s}
+[^ :]+:[0-9]+: Info: famin {z18\.d-z19\.d}, {z18\.d-z19\.d}, {z30\.d-z31\.d}
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin {z30\.s-z31\.s},{z30\.s-z31\.s},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin {z30\.s-z31\.s}, {z30\.s-z31\.s}, {z18\.s-z19\.s}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin {z30\.h-z31\.h}, {z30\.h-z31\.h}, {z18\.h-z19\.h}
+[^ :]+:[0-9]+: Info: famin {z30\.d-z31\.d}, {z30\.d-z31\.d}, {z18\.d-z19\.d}
+[^ :]+:[0-9]+: Error: expected a list of 4 registers at operand 3 -- `famin {z24\.s-z27\.s},{z24\.s-z27\.s},{z30\.s-z31\.s}'
+[^ :]+:[0-9]+: Error: expected a list of 2 registers at operand 3 -- `famin {z30\.h-z31\.h},{z30\.h-z31\.h},{z24\.h-z27\.h}'
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax {z18\.b-z19\.b},{z18\.b-z19\.b},{z30\.b-z31\.b}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax {z18\.h-z19\.h}, {z18\.h-z19\.h}, {z30\.h-z31\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax {z18\.s-z19\.s}, {z18\.s-z19\.s}, {z30\.s-z31\.s}
+[^ :]+:[0-9]+: Info: famax {z18\.d-z19\.d}, {z18\.d-z19\.d}, {z30\.d-z31\.d}
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax {z24\.b-z27\.b},{z24\.b-z27\.b},{z19\.b-z22\.b}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax {z24\.h-z27\.h}, {z24\.h-z27\.h}, {z19\.h-z22\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax {z24\.s-z27\.s}, {z24\.s-z27\.s}, {z19\.s-z22\.s}
+[^ :]+:[0-9]+: Info: famax {z24\.d-z27\.d}, {z24\.d-z27\.d}, {z19\.d-z22\.d}
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin {z18\.b-z19\.b},{z18\.b-z19\.b},{z30\.b-z31\.b}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin {z18\.h-z19\.h}, {z18\.h-z19\.h}, {z30\.h-z31\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin {z18\.s-z19\.s}, {z18\.s-z19\.s}, {z30\.s-z31\.s}
+[^ :]+:[0-9]+: Info: famin {z18\.d-z19\.d}, {z18\.d-z19\.d}, {z30\.d-z31\.d}
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin {z24\.b-z27\.b},{z24\.b-z27\.b},{z19\.b-z22\.b}'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin {z24\.h-z27\.h}, {z24\.h-z27\.h}, {z19\.h-z22\.h}
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin {z24\.s-z27\.s}, {z24\.s-z27\.s}, {z19\.s-z22\.s}
+[^ :]+:[0-9]+: Info: famin {z24\.d-z27\.d}, {z24\.d-z27\.d}, {z19\.d-z22\.d}
+[^ :]+:[0-9]+: Error: expected a list of 2 or 4 registers at operand 1 -- `famax {z18\.h-z20\.h},{z18\.h-z20\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: too many registers in vector register list at operand 1 -- `famax {z27\.s-z31\.s},{z27\.s-z31\.s},{z16\.s-z20\.s}'
+[^ :]+:[0-9]+: Error: operand 2 must be the same register as operand 1 -- `famax {z27\.s-z28\.s},{z27\.s-z30\.s},{z16\.s-z17\.s}'
+[^ :]+:[0-9]+: Error: expected a list of 2 or 4 registers at operand 1 -- `famin {z18\.h-z20\.h},{z18\.h-z20\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: too many registers in vector register list at operand 1 -- `famin {z27\.s-z31\.s},{z27\.s-z31\.s},{z16\.s-z20\.s}'
+[^ :]+:[0-9]+: Error: operand 2 must be the same register as operand 1 -- `famin {z27\.s-z28\.s},{z27\.s-z30\.s},{z16\.s-z17\.s}'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famax {z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z12\.h-z13\.h},{z12\.h-z13\.h}'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famin {z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z12\.h-z13\.h},{z12\.h-z13\.h}'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.t-z31\.t}'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famax {z18\.t-z19\.t},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.t-z31\.t}'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famin {z18\.t-z19\.t},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},\{30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 2 -- `famax {z18\.h-z19\.h},\{18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 1 -- `famax {z18\.h-19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z30-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 2 -- `famax {z18\.h-z19\.h},{z18-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 1 -- `famax {z18-z19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},\{30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 2 -- `famin {z18\.h-z19\.h},\{18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: syntax error in register list at operand 1 -- `famin {z18\.h-19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z30-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 2 -- `famin {z18\.h-z19\.h},{z18-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: missing type suffix at operand 1 -- `famin {z18-z19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z34\.h-z35\.h}'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 1 -- `famax {z34\.h-z35\.h},{z34\.h-z35\.h},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z34\.h-z35\.h}'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 1 -- `famin {z34\.h-z35\.h},{z34\.h-z35\.h},{z18\.h-z19\.h}'
+[^ :]+:[0-9]+: Warning: SVE `movprfx' compatible instruction expected -- `famax {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
+[^ :]+:[0-9]+: Warning: SVE `movprfx' compatible instruction expected -- `famin {z18\.h-z19\.h},{z18\.h-z19\.h},{z30\.h-z31\.h}'
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.s b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.s
new file mode 100644
index 00000000000..b104501df99
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax-illegal.s
@@ -0,0 +1,63 @@
+// Operand mismatch
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z30.s - z31.s }
+famax { z30.s - z31.s }, { z30.s - z31.s }, { z18.h - z19.h }
+famax { z24.s - z27.s }, { z24.s - z27.s }, { z30.s - z31.s }
+famax { z30.h - z31.h }, { z30.h - z31.h }, { z24.h - z27.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z30.s - z31.s }
+famin { z30.s - z31.s }, { z30.s - z31.s }, { z18.h - z19.h }
+famin { z24.s - z27.s }, { z24.s - z27.s }, { z30.s - z31.s }
+famin { z30.h - z31.h }, { z30.h - z31.h }, { z24.h - z27.h }
+
+// Disallowed types
+famax { z18.b - z19.b }, { z18.b - z19.b }, { z30.b - z31.b }
+famax { z24.b - z27.b }, { z24.b - z27.b }, { z19.b - z22.b }
+famin { z18.b - z19.b }, { z18.b - z19.b }, { z30.b - z31.b }
+famin { z24.b - z27.b }, { z24.b - z27.b }, { z19.b - z22.b }
+
+// Incorrect operands
+famax { z18.h - z20.h }, { z18.h - z20.h }, { z30.h - z31.h }
+famax { z27.s - z31.s }, { z27.s - z31.s }, { z16.s - z20.s }
+famax { z27.s - z28.s }, { z27.s - z30.s }, { z16.s - z17.s }
+famin { z18.h - z20.h }, { z18.h - z20.h }, { z30.h - z31.h }
+famin { z27.s - z31.s }, { z27.s - z31.s }, { z16.s - z20.s }
+famin { z27.s - z28.s }, { z27.s - z30.s }, { z16.s - z17.s }
+
+// Incorrect number of arguments
+famax { z18.h - z19.h }
+famax { z18.h - z19.h }, { z18.h - z19.h }
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z12.h - z13.h }, { z12.h - z13.h }
+famin { z18.h - z19.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z12.h - z13.h }, { z12.h - z13.h }
+
+// Spelling mistakes
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z30.t - z31.t }
+famax { z18.t - z19.t }, { z18.h - z19.h }, { z30.h - z31.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z30.t - z31.t }
+famin { z18.t - z19.t }, { z18.h - z19.h }, { z30.h - z31.h }
+
+// Missing qualifers
+famax { z18.h - z19.h }, { z18.h - z19.h }, { 30.h - z31.h }
+famax { z18.h - z19.h }, { 18.h - z19.h }, { z30.h - z31.h }
+famax { z18.h - 19.h }, { z18.h - z19.h }, { z30.h - z31.h }
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z30 - z31.h }
+famax { z18.h - z19.h }, { z18 - z19.h }, { z30.h - z31.h }
+famax { z18 - z19.h }, { z18.h - z19.h }, { z30.h - z31.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { 30.h - z31.h }
+famin { z18.h - z19.h }, { 18.h - z19.h }, { z30.h - z31.h }
+famin { z18.h - 19.h }, { z18.h - z19.h }, { z30.h - z31.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z30 - z31.h }
+famin { z18.h - z19.h }, { z18 - z19.h }, { z30.h - z31.h }
+famin { z18 - z19.h }, { z18.h - z19.h }, { z30.h - z31.h }
+
+// Out of range numbers
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z34.h - z35.h }
+famax { z34.h - z35.h }, { z34.h - z35.h }, { z18.h - z19.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z34.h - z35.h }
+famin { z34.h - z35.h }, { z34.h - z35.h }, { z18.h - z19.h }
+
+// Preceded by movprfx
+movprfx z17, z9
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z30.h - z31.h }
+movprfx z17, z9
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z30.h - z31.h }
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax.d b/gas/testsuite/gas/aarch64/sme2-faminmax.d
new file mode 100644
index 00000000000..9a6d69e30d8
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax.d
@@ -0,0 +1,58 @@
+#objdump: -dr
+#as: -march=armv8-a+faminmax+sme2
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+ 0: c160b140 famax {z0.h-z1.h}, {z0.h-z1.h}, {z0.h-z1.h}
+ 4: c160b15e famax {z30.h-z31.h}, {z30.h-z31.h}, {z0.h-z1.h}
+ 8: c17eb140 famax {z0.h-z1.h}, {z0.h-z1.h}, {z30.h-z31.h}
+ c: c17ab152 famax {z18.h-z19.h}, {z18.h-z19.h}, {z26.h-z27.h}
+ 10: c1a0b140 famax {z0.s-z1.s}, {z0.s-z1.s}, {z0.s-z1.s}
+ 14: c1a0b15e famax {z30.s-z31.s}, {z30.s-z31.s}, {z0.s-z1.s}
+ 18: c1beb140 famax {z0.s-z1.s}, {z0.s-z1.s}, {z30.s-z31.s}
+ 1c: c1aab144 famax {z4.s-z5.s}, {z4.s-z5.s}, {z10.s-z11.s}
+ 20: c1e0b140 famax {z0.d-z1.d}, {z0.d-z1.d}, {z0.d-z1.d}
+ 24: c1e0b15e famax {z30.d-z31.d}, {z30.d-z31.d}, {z0.d-z1.d}
+ 28: c1feb140 famax {z0.d-z1.d}, {z0.d-z1.d}, {z30.d-z31.d}
+ 2c: c1e8b15c famax {z28.d-z29.d}, {z28.d-z29.d}, {z8.d-z9.d}
+ 30: c160b940 famax {z0.h-z3.h}, {z0.h-z3.h}, {z0.h-z3.h}
+ 34: c160b95c famax {z28.h-z31.h}, {z28.h-z31.h}, {z0.h-z3.h}
+ 38: c17cb940 famax {z0.h-z3.h}, {z0.h-z3.h}, {z28.h-z31.h}
+ 3c: c174b950 famax {z16.h-z19.h}, {z16.h-z19.h}, {z20.h-z23.h}
+ 40: c1a0b940 famax {z0.s-z3.s}, {z0.s-z3.s}, {z0.s-z3.s}
+ 44: c1a0b95c famax {z28.s-z31.s}, {z28.s-z31.s}, {z0.s-z3.s}
+ 48: c1bcb940 famax {z0.s-z3.s}, {z0.s-z3.s}, {z28.s-z31.s}
+ 4c: c1a4b958 famax {z24.s-z27.s}, {z24.s-z27.s}, {z4.s-z7.s}
+ 50: c1e0b940 famax {z0.d-z3.d}, {z0.d-z3.d}, {z0.d-z3.d}
+ 54: c1e0b95c famax {z28.d-z31.d}, {z28.d-z31.d}, {z0.d-z3.d}
+ 58: c1fcb940 famax {z0.d-z3.d}, {z0.d-z3.d}, {z28.d-z31.d}
+ 5c: c1e8b94c famax {z12.d-z15.d}, {z12.d-z15.d}, {z8.d-z11.d}
+ 60: c128b94c .inst 0xc128b94c ; undefined
+ 64: c160b141 famin {z0.h-z1.h}, {z0.h-z1.h}, {z0.h-z1.h}
+ 68: c160b15f famin {z30.h-z31.h}, {z30.h-z31.h}, {z0.h-z1.h}
+ 6c: c17eb141 famin {z0.h-z1.h}, {z0.h-z1.h}, {z30.h-z31.h}
+ 70: c17ab153 famin {z18.h-z19.h}, {z18.h-z19.h}, {z26.h-z27.h}
+ 74: c1a0b141 famin {z0.s-z1.s}, {z0.s-z1.s}, {z0.s-z1.s}
+ 78: c1a0b15f famin {z30.s-z31.s}, {z30.s-z31.s}, {z0.s-z1.s}
+ 7c: c1beb141 famin {z0.s-z1.s}, {z0.s-z1.s}, {z30.s-z31.s}
+ 80: c1aab145 famin {z4.s-z5.s}, {z4.s-z5.s}, {z10.s-z11.s}
+ 84: c1e0b141 famin {z0.d-z1.d}, {z0.d-z1.d}, {z0.d-z1.d}
+ 88: c1e0b15f famin {z30.d-z31.d}, {z30.d-z31.d}, {z0.d-z1.d}
+ 8c: c1feb141 famin {z0.d-z1.d}, {z0.d-z1.d}, {z30.d-z31.d}
+ 90: c1e8b15d famin {z28.d-z29.d}, {z28.d-z29.d}, {z8.d-z9.d}
+ 94: c160b941 famin {z0.h-z3.h}, {z0.h-z3.h}, {z0.h-z3.h}
+ 98: c160b95d famin {z28.h-z31.h}, {z28.h-z31.h}, {z0.h-z3.h}
+ 9c: c17cb941 famin {z0.h-z3.h}, {z0.h-z3.h}, {z28.h-z31.h}
+ a0: c174b951 famin {z16.h-z19.h}, {z16.h-z19.h}, {z20.h-z23.h}
+ a4: c1a0b941 famin {z0.s-z3.s}, {z0.s-z3.s}, {z0.s-z3.s}
+ a8: c1a0b95d famin {z28.s-z31.s}, {z28.s-z31.s}, {z0.s-z3.s}
+ ac: c1bcb941 famin {z0.s-z3.s}, {z0.s-z3.s}, {z28.s-z31.s}
+ b0: c1a4b959 famin {z24.s-z27.s}, {z24.s-z27.s}, {z4.s-z7.s}
+ b4: c1e0b941 famin {z0.d-z3.d}, {z0.d-z3.d}, {z0.d-z3.d}
+ b8: c1e0b95d famin {z28.d-z31.d}, {z28.d-z31.d}, {z0.d-z3.d}
+ bc: c1fcb941 famin {z0.d-z3.d}, {z0.d-z3.d}, {z28.d-z31.d}
+ c0: c1e8b94d famin {z12.d-z15.d}, {z12.d-z15.d}, {z8.d-z11.d}
+ c4: c128b94d .inst 0xc128b94d ; undefined
diff --git a/gas/testsuite/gas/aarch64/sme2-faminmax.s b/gas/testsuite/gas/aarch64/sme2-faminmax.s
new file mode 100644
index 00000000000..7fdad8c9d5d
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sme2-faminmax.s
@@ -0,0 +1,67 @@
+// Valid instructions
+famax { z0.h - z1.h }, { z0.h - z1.h }, { z0.h - z1.h }
+famax { z30.h - z31.h }, { z30.h - z31.h }, { z0.h - z1.h }
+famax { z0.h - z1.h }, { z0.h - z1.h }, { z30.h - z31.h }
+famax { z18.h - z19.h }, { z18.h - z19.h }, { z26.h - z27.h }
+
+famax { z0.s - z1.s }, { z0.s - z1.s }, { z0.s - z1.s }
+famax { z30.s - z31.s }, { z30.s - z31.s }, { z0.s - z1.s }
+famax { z0.s - z1.s }, { z0.s - z1.s }, { z30.s - z31.s }
+famax { z4.s - z5.s }, { z4.s - z5.s }, { z10.s - z11.s }
+
+famax { z0.d - z1.d }, { z0.d - z1.d }, { z0.d - z1.d }
+famax { z30.d - z31.d }, { z30.d - z31.d }, { z0.d - z1.d }
+famax { z0.d - z1.d }, { z0.d - z1.d }, { z30.d - z31.d }
+famax { z28.d - z29.d }, { z28.d - z29.d }, { z8.d - z9.d }
+
+famax { z0.h - z3.h }, { z0.h - z3.h }, { z0.h - z3.h }
+famax { z28.h - z31.h }, { z28.h - z31.h }, { z0.h - z3.h }
+famax { z0.h - z3.h }, { z0.h - z3.h }, { z28.h - z31.h }
+famax { z16.h - z19.h }, { z16.h - z19.h }, { z20.h - z23.h }
+
+famax { z0.s - z3.s }, { z0.s - z3.s }, { z0.s - z3.s }
+famax { z28.s - z31.s }, { z28.s - z31.s }, { z0.s - z3.s }
+famax { z0.s - z3.s }, { z0.s - z3.s }, { z28.s - z31.s }
+famax { z24.s - z27.s }, { z24.s - z27.s }, { z4.s - z7.s }
+
+famax { z0.d - z3.d }, { z0.d - z3.d }, { z0.d - z3.d }
+famax { z28.d - z31.d }, { z28.d - z31.d }, { z0.d - z3.d }
+famax { z0.d - z3.d }, { z0.d - z3.d }, { z28.d - z31.d }
+famax { z12.d - z15.d }, { z12.d - z15.d }, { z8.d - z11.d }
+
+// Invalid instruction because sz is 00 which is invalid
+.inst 0xc128b94c
+
+// Valid instructions
+famin { z0.h - z1.h }, { z0.h - z1.h }, { z0.h - z1.h }
+famin { z30.h - z31.h }, { z30.h - z31.h }, { z0.h - z1.h }
+famin { z0.h - z1.h }, { z0.h - z1.h }, { z30.h - z31.h }
+famin { z18.h - z19.h }, { z18.h - z19.h }, { z26.h - z27.h }
+
+famin { z0.s - z1.s }, { z0.s - z1.s }, { z0.s - z1.s }
+famin { z30.s - z31.s }, { z30.s - z31.s }, { z0.s - z1.s }
+famin { z0.s - z1.s }, { z0.s - z1.s }, { z30.s - z31.s }
+famin { z4.s - z5.s }, { z4.s - z5.s }, { z10.s - z11.s }
+
+famin { z0.d - z1.d }, { z0.d - z1.d }, { z0.d - z1.d }
+famin { z30.d - z31.d }, { z30.d - z31.d }, { z0.d - z1.d }
+famin { z0.d - z1.d }, { z0.d - z1.d }, { z30.d - z31.d }
+famin { z28.d - z29.d }, { z28.d - z29.d }, { z8.d - z9.d }
+
+famin { z0.h - z3.h }, { z0.h - z3.h }, { z0.h - z3.h }
+famin { z28.h - z31.h }, { z28.h - z31.h }, { z0.h - z3.h }
+famin { z0.h - z3.h }, { z0.h - z3.h }, { z28.h - z31.h }
+famin { z16.h - z19.h }, { z16.h - z19.h }, { z20.h - z23.h }
+
+famin { z0.s - z3.s }, { z0.s - z3.s }, { z0.s - z3.s }
+famin { z28.s - z31.s }, { z28.s - z31.s }, { z0.s - z3.s }
+famin { z0.s - z3.s }, { z0.s - z3.s }, { z28.s - z31.s }
+famin { z24.s - z27.s }, { z24.s - z27.s }, { z4.s - z7.s }
+
+famin { z0.d - z3.d }, { z0.d - z3.d }, { z0.d - z3.d }
+famin { z28.d - z31.d }, { z28.d - z31.d }, { z0.d - z3.d }
+famin { z0.d - z3.d }, { z0.d - z3.d }, { z28.d - z31.d }
+famin { z12.d - z15.d }, { z12.d - z15.d }, { z8.d - z11.d }
+
+// Invalid instruction because sz is 00 which is invalid
+.inst 0xc128B94d
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-bad.d b/gas/testsuite/gas/aarch64/sve2-faminmax-bad.d
new file mode 100644
index 00000000000..9e0de7d274c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax-bad.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+faminmax
+#source: sve2-faminmax.s
+#error_output: sve2-faminmax-bad.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-bad.l b/gas/testsuite/gas/aarch64/sve2-faminmax-bad.l
new file mode 100644
index 00000000000..8382dfdd8f0
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax-bad.l
@@ -0,0 +1,81 @@
+[^ :]+: Assembler messages:
+.*: Error: selected processor does not support `famax z0.h,p0/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famax z0.h,p2/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famax z0.h,p7/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famax z31.h,p0/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famax z31.h,p2/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famax z31.h,p7/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famax z0.h,p0/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famax z0.h,p2/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famax z0.h,p7/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famax z5.h,p0/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famax z5.h,p2/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famax z5.h,p7/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famax z0.s,p0/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famax z0.s,p2/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famax z0.s,p7/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famax z31.s,p0/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famax z31.s,p2/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famax z31.s,p7/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famax z0.s,p0/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famax z0.s,p2/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famax z0.s,p7/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famax z5.s,p0/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famax z5.s,p2/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famax z5.s,p7/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famax z0.d,p0/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famax z0.d,p2/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famax z0.d,p7/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famax z31.d,p0/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famax z31.d,p2/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famax z31.d,p7/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famax z0.d,p0/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famax z0.d,p2/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famax z0.d,p7/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famax z5.d,p0/m,z5.d,z7.d'
+.*: Error: selected processor does not support `famax z5.d,p2/m,z5.d,z7.d'
+.*: Error: selected processor does not support `famax z5.d,p7/m,z5.d,z7.d'
+.*: Error: selected processor does not support `movprfx z5,z9'
+.*: Error: selected processor does not support `famax z5.h,p7/m,z5.h,z7.h'
+.*: Error: selected processor does not support `movprfx z5.d,p7/m,z8.d'
+.*: Error: selected processor does not support `famax z5.d,p7/m,z5.d,z9.d'
+.*: Error: selected processor does not support `famin z0.h,p0/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famin z0.h,p2/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famin z0.h,p7/m,z0.h,z0.h'
+.*: Error: selected processor does not support `famin z31.h,p0/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famin z31.h,p2/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famin z31.h,p7/m,z31.h,z0.h'
+.*: Error: selected processor does not support `famin z0.h,p0/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famin z0.h,p2/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famin z0.h,p7/m,z0.h,z31.h'
+.*: Error: selected processor does not support `famin z5.h,p0/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famin z5.h,p2/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famin z5.h,p7/m,z5.h,z7.h'
+.*: Error: selected processor does not support `famin z0.s,p0/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famin z0.s,p2/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famin z0.s,p7/m,z0.s,z0.s'
+.*: Error: selected processor does not support `famin z31.s,p0/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famin z31.s,p2/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famin z31.s,p7/m,z31.s,z0.s'
+.*: Error: selected processor does not support `famin z0.s,p0/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famin z0.s,p2/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famin z0.s,p7/m,z0.s,z31.s'
+.*: Error: selected processor does not support `famin z5.s,p0/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famin z5.s,p2/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famin z5.s,p7/m,z5.s,z7.s'
+.*: Error: selected processor does not support `famin z0.d,p0/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famin z0.d,p2/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famin z0.d,p7/m,z0.d,z0.d'
+.*: Error: selected processor does not support `famin z31.d,p0/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famin z31.d,p2/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famin z31.d,p7/m,z31.d,z0.d'
+.*: Error: selected processor does not support `famin z0.d,p0/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famin z0.d,p2/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famin z0.d,p7/m,z0.d,z31.d'
+.*: Error: selected processor does not support `famin z5.d,p0/m,z5.d,z7.d'
+.*: Error: selected processor does not support `famin z5.d,p2/m,z5.d,z7.d'
+.*: Error: selected processor does not support `famin z5.d,p7/m,z5.d,z7.d'
+.*: Error: selected processor does not support `movprfx z5,z9'
+.*: Error: selected processor does not support `famin z5.h,p7/m,z5.h,z7.h'
+.*: Error: selected processor does not support `movprfx z5.d,p7/m,z8.d'
+.*: Error: selected processor does not support `famin z5.d,p7/m,z5.d,z9.d'
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.d b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.d
new file mode 100644
index 00000000000..e1c6a5dc14c
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.d
@@ -0,0 +1,3 @@
+#as: -march=armv8-a+faminmax+sve2
+#source: sve2-faminmax-illegal.s
+#error_output: sve2-faminmax-illegal.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.l b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.l
new file mode 100644
index 00000000000..55ce8e6085b
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.l
@@ -0,0 +1,123 @@
+[^ :]+: Assembler messages:
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.h,p0/m,z5\.h,z7\.s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p0/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p0/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p0/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.s,p2/m,z5\.s,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.h,p0/m,z5\.h,z7\.s'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p0/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p0/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p0/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.s,p2/m,z5\.s,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand 3 must be the same register as operand 1 -- `famax z5\.h,p0/m,z7\.h,z9\.h'
+[^ :]+:[0-9]+: Error: operand 3 must be the same register as operand 1 -- `famin z5\.h,p0/m,z7\.h,z9\.h'
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.b,p2/m,z5\.b,z5\.b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z5\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z5\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z5\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.b,p2/m,z5\.b,z5\.b'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z5\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z5\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z5\.d
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famax z5\.h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famax z5\.h,p2/m'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 4 -- `famax z5\.h,p2/m,z5\.h'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 4 -- `famax z5\.h,p2/m,z5\.h,z6\.h,z6\.h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 2 -- `famin z5\.h'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 3 -- `famin z5\.h,p2/m'
+[^ :]+:[0-9]+: Error: comma expected between operands at operand 4 -- `famin z5\.h,p2/m,z5\.h'
+[^ :]+:[0-9]+: Error: unexpected characters following instruction at operand 4 -- `famin z5\.h,p2/m,z5\.h,z6\.h,z6\.h'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famax z5\.t,p2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 3 -- `famax z5\.s,p2/m,z5\.t,z7\.s'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 4 -- `famax z5\.s,p2/m,z5\.s,z7\.t'
+[^ :]+:[0-9]+: Error: expected an SVE predicate register at operand 2 -- `famax z5\.s,j2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 1 -- `famin z5\.t,p2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 3 -- `famin z5\.s,p2/m,z5\.t,z7\.s'
+[^ :]+:[0-9]+: Error: unexpected character `t' in element size at operand 4 -- `famin z5\.s,p2/m,z5\.s,z7\.t'
+[^ :]+:[0-9]+: Error: expected an SVE predicate register at operand 2 -- `famin z5\.s,j2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famax 5\.h,p2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famax z5\.h,p2/m,5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 4 -- `famax z5\.h,p2/m,z5\.h,7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE predicate register at operand 2 -- `famax z5\.h,2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5,p2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.h,p2/m,z5,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.h,p2/m,z5\.h,z7'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famax z5\.h,p2,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famax z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famax z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famax z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famin 5\.h,p2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famin z5\.h,p2/m,5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 4 -- `famin z5\.h,p2/m,z5\.h,7\.h'
+[^ :]+:[0-9]+: Error: expected an SVE predicate register at operand 2 -- `famin z5\.h,2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5,p2/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.h,p2/m,z5,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.h,p2/m,z5\.h,z7'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: operand mismatch -- `famin z5\.h,p2,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Info: did you mean this\?
+[^ :]+:[0-9]+: Info: famin z5\.h, p2/m, z5\.h, z7\.h
+[^ :]+:[0-9]+: Info: other valid variant\(s\):
+[^ :]+:[0-9]+: Info: famin z5\.s, p2/m, z5\.s, z7\.s
+[^ :]+:[0-9]+: Info: famin z5\.d, p2/m, z5\.d, z7\.d
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famax z35\.s,p2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famax z5\.s,p2/m,z35\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 4 -- `famax z5\.s,p2/m,z5\.s,z35\.s'
+[^ :]+:[0-9]+: Error: p0-p7 expected at operand 2 -- `famax z5\.s,p9/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected a register or register list at operand 1 -- `famin z35\.s,p2/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 3 -- `famin z5\.s,p2/m,z35\.s,z7\.s'
+[^ :]+:[0-9]+: Error: expected an SVE vector register at operand 4 -- `famin z5\.s,p2/m,z5\.s,z35\.s'
+[^ :]+:[0-9]+: Error: p0-p7 expected at operand 2 -- `famin z5\.s,p9/m,z5\.s,z7\.s'
+[^ :]+:[0-9]+: Warning: output register of preceding `movprfx' not used in current instruction at operand 1 -- `famax z5\.h,p7/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Warning: predicate register differs from that in preceding `movprfx' at operand 2 -- `famax z5\.d,p7/m,z5\.d,z9\.d'
+[^ :]+:[0-9]+: Warning: output register of preceding `movprfx' not used in current instruction at operand 1 -- `famin z5\.h,p7/m,z5\.h,z7\.h'
+[^ :]+:[0-9]+: Warning: predicate register differs from that in preceding `movprfx' at operand 2 -- `famin z5\.d,p7/m,z5\.d,z9\.d'
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.s b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.s
new file mode 100644
index 00000000000..6dab6655bb9
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax-illegal.s
@@ -0,0 +1,71 @@
+// Operand mismatch
+famax z5.h, p0/m, z5.h, z7.s
+famax z5.s, p2/m, z5.s, z7.h
+famin z5.h, p0/m, z5.h, z7.s
+famin z5.s, p2/m, z5.s, z7.h
+
+// Incorrect operands
+famax z5.h, p0/m, z7.h, z9.h
+famin z5.h, p0/m, z7.h, z9.h
+
+// Disallowed types
+famax z5.b, p2/m, z5.b, z5.b
+famin z5.b, p2/m, z5.b, z5.b
+
+// Incorrect number of arguments
+famax z5.h
+famax z5.h, p2/m
+famax z5.h, p2/m, z5.h
+famax z5.h, p2/m, z5.h, z6.h, z6.h
+famin z5.h
+famin z5.h, p2/m
+famin z5.h, p2/m, z5.h
+famin z5.h, p2/m, z5.h, z6.h, z6.h
+
+// Spelling mistakes
+famax z5.t, p2/m, z5.s, z7.s
+famax z5.s, p2/m, z5.t, z7.s
+famax z5.s, p2/m, z5.s, z7.t
+famax z5.s, j2/m, z5.s, z7.s
+famin z5.t, p2/m, z5.s, z7.s
+famin z5.s, p2/m, z5.t, z7.s
+famin z5.s, p2/m, z5.s, z7.t
+famin z5.s, j2/m, z5.s, z7.s
+
+// Missing qualifiers
+famax 5.h, p2/m, z5.h, z7.h
+famax z5.h, p2/m, 5.h, z7.h
+famax z5.h, p2/m, z5.h, 7.h
+famax z5.h, 2/m, z5.h, z7.h
+famax z5, p2/m, z5.h, z7.h
+famax z5.h, p2/m, z5, z7.h
+famax z5.h, p2/m, z5.h, z7
+famax z5.h, p2, z5.h, z7.h
+famin 5.h, p2/m, z5.h, z7.h
+famin z5.h, p2/m, 5.h, z7.h
+famin z5.h, p2/m, z5.h, 7.h
+famin z5.h, 2/m, z5.h, z7.h
+famin z5, p2/m, z5.h, z7.h
+famin z5.h, p2/m, z5, z7.h
+famin z5.h, p2/m, z5.h, z7
+famin z5.h, p2, z5.h, z7.h
+
+// Out of range numbers
+famax z35.s, p2/m, z5.s, z7.s
+famax z5.s, p2/m, z35.s, z7.s
+famax z5.s, p2/m, z5.s, z35.s
+famax z5.s, p9/m, z5.s, z7.s
+famin z35.s, p2/m, z5.s, z7.s
+famin z5.s, p2/m, z35.s, z7.s
+famin z5.s, p2/m, z5.s, z35.s
+famin z5.s, p9/m, z5.s, z7.s
+
+// movprfx mismatch
+movprfx z6, z9
+famax z5.h, p7/m, z5.h, z7.h
+movprfx z5.d, p6/m, z8.d
+famax z5.d, p7/m, z5.d, z9.d
+movprfx z6, z9
+famin z5.h, p7/m, z5.h, z7.h
+movprfx z5.d, p6/m, z8.d
+famin z5.d, p7/m, z5.d, z9.d
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax-warning.s b/gas/testsuite/gas/aarch64/sve2-faminmax-warning.s
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax.d b/gas/testsuite/gas/aarch64/sve2-faminmax.d
new file mode 100644
index 00000000000..d85019ccd29
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax.d
@@ -0,0 +1,90 @@
+#objdump: -dr
+#as: -march=armv8-a+faminmax+sve2
+
+.*: file format .*
+
+Disassembly of section \.text:
+
+0+ <.*>:
+ 0: 654e8000 famax z0.h, p0/m, z0.h, z0.h
+ 4: 654e8800 famax z0.h, p2/m, z0.h, z0.h
+ 8: 654e9c00 famax z0.h, p7/m, z0.h, z0.h
+ c: 654e801f famax z31.h, p0/m, z31.h, z0.h
+ 10: 654e881f famax z31.h, p2/m, z31.h, z0.h
+ 14: 654e9c1f famax z31.h, p7/m, z31.h, z0.h
+ 18: 654e83e0 famax z0.h, p0/m, z0.h, z31.h
+ 1c: 654e8be0 famax z0.h, p2/m, z0.h, z31.h
+ 20: 654e9fe0 famax z0.h, p7/m, z0.h, z31.h
+ 24: 654e80e5 famax z5.h, p0/m, z5.h, z7.h
+ 28: 654e88e5 famax z5.h, p2/m, z5.h, z7.h
+ 2c: 654e9ce5 famax z5.h, p7/m, z5.h, z7.h
+ 30: 658e8000 famax z0.s, p0/m, z0.s, z0.s
+ 34: 658e8800 famax z0.s, p2/m, z0.s, z0.s
+ 38: 658e9c00 famax z0.s, p7/m, z0.s, z0.s
+ 3c: 658e801f famax z31.s, p0/m, z31.s, z0.s
+ 40: 658e881f famax z31.s, p2/m, z31.s, z0.s
+ 44: 658e9c1f famax z31.s, p7/m, z31.s, z0.s
+ 48: 658e83e0 famax z0.s, p0/m, z0.s, z31.s
+ 4c: 658e8be0 famax z0.s, p2/m, z0.s, z31.s
+ 50: 658e9fe0 famax z0.s, p7/m, z0.s, z31.s
+ 54: 658e80e5 famax z5.s, p0/m, z5.s, z7.s
+ 58: 658e88e5 famax z5.s, p2/m, z5.s, z7.s
+ 5c: 658e9ce5 famax z5.s, p7/m, z5.s, z7.s
+ 60: 65ce8000 famax z0.d, p0/m, z0.d, z0.d
+ 64: 65ce8800 famax z0.d, p2/m, z0.d, z0.d
+ 68: 65ce9c00 famax z0.d, p7/m, z0.d, z0.d
+ 6c: 65ce801f famax z31.d, p0/m, z31.d, z0.d
+ 70: 65ce881f famax z31.d, p2/m, z31.d, z0.d
+ 74: 65ce9c1f famax z31.d, p7/m, z31.d, z0.d
+ 78: 65ce83e0 famax z0.d, p0/m, z0.d, z31.d
+ 7c: 65ce8be0 famax z0.d, p2/m, z0.d, z31.d
+ 80: 65ce9fe0 famax z0.d, p7/m, z0.d, z31.d
+ 84: 65ce80e5 famax z5.d, p0/m, z5.d, z7.d
+ 88: 65ce88e5 famax z5.d, p2/m, z5.d, z7.d
+ 8c: 65ce9ce5 famax z5.d, p7/m, z5.d, z7.d
+ 90: 0420bd25 movprfx z5, z9
+ 94: 654e9ce5 famax z5.h, p7/m, z5.h, z7.h
+ 98: 04d13d05 movprfx z5.d, p7/m, z8.d
+ 9c: 65ce9d25 famax z5.d, p7/m, z5.d, z9.d
+ a0: 650e9d25 .inst 0x650e9d25 ; undefined
+ a4: 654f8000 famin z0.h, p0/m, z0.h, z0.h
+ a8: 654f8800 famin z0.h, p2/m, z0.h, z0.h
+ ac: 654f9c00 famin z0.h, p7/m, z0.h, z0.h
+ b0: 654f801f famin z31.h, p0/m, z31.h, z0.h
+ b4: 654f881f famin z31.h, p2/m, z31.h, z0.h
+ b8: 654f9c1f famin z31.h, p7/m, z31.h, z0.h
+ bc: 654f83e0 famin z0.h, p0/m, z0.h, z31.h
+ c0: 654f8be0 famin z0.h, p2/m, z0.h, z31.h
+ c4: 654f9fe0 famin z0.h, p7/m, z0.h, z31.h
+ c8: 654f80e5 famin z5.h, p0/m, z5.h, z7.h
+ cc: 654f88e5 famin z5.h, p2/m, z5.h, z7.h
+ d0: 654f9ce5 famin z5.h, p7/m, z5.h, z7.h
+ d4: 658f8000 famin z0.s, p0/m, z0.s, z0.s
+ d8: 658f8800 famin z0.s, p2/m, z0.s, z0.s
+ dc: 658f9c00 famin z0.s, p7/m, z0.s, z0.s
+ e0: 658f801f famin z31.s, p0/m, z31.s, z0.s
+ e4: 658f881f famin z31.s, p2/m, z31.s, z0.s
+ e8: 658f9c1f famin z31.s, p7/m, z31.s, z0.s
+ ec: 658f83e0 famin z0.s, p0/m, z0.s, z31.s
+ f0: 658f8be0 famin z0.s, p2/m, z0.s, z31.s
+ f4: 658f9fe0 famin z0.s, p7/m, z0.s, z31.s
+ f8: 658f80e5 famin z5.s, p0/m, z5.s, z7.s
+ fc: 658f88e5 famin z5.s, p2/m, z5.s, z7.s
+ 100: 658f9ce5 famin z5.s, p7/m, z5.s, z7.s
+ 104: 65cf8000 famin z0.d, p0/m, z0.d, z0.d
+ 108: 65cf8800 famin z0.d, p2/m, z0.d, z0.d
+ 10c: 65cf9c00 famin z0.d, p7/m, z0.d, z0.d
+ 110: 65cf801f famin z31.d, p0/m, z31.d, z0.d
+ 114: 65cf881f famin z31.d, p2/m, z31.d, z0.d
+ 118: 65cf9c1f famin z31.d, p7/m, z31.d, z0.d
+ 11c: 65cf83e0 famin z0.d, p0/m, z0.d, z31.d
+ 120: 65cf8be0 famin z0.d, p2/m, z0.d, z31.d
+ 124: 65cf9fe0 famin z0.d, p7/m, z0.d, z31.d
+ 128: 65cf80e5 famin z5.d, p0/m, z5.d, z7.d
+ 12c: 65cf88e5 famin z5.d, p2/m, z5.d, z7.d
+ 130: 65cf9ce5 famin z5.d, p7/m, z5.d, z7.d
+ 134: 0420bd25 movprfx z5, z9
+ 138: 654f9ce5 famin z5.h, p7/m, z5.h, z7.h
+ 13c: 04d13d05 movprfx z5.d, p7/m, z8.d
+ 140: 65cf9d25 famin z5.d, p7/m, z5.d, z9.d
+ 144: 650f9d25 .inst 0x650f9d25 ; undefined
\ No newline at end of file
diff --git a/gas/testsuite/gas/aarch64/sve2-faminmax.s b/gas/testsuite/gas/aarch64/sve2-faminmax.s
new file mode 100644
index 00000000000..ae00a9e71d1
--- /dev/null
+++ b/gas/testsuite/gas/aarch64/sve2-faminmax.s
@@ -0,0 +1,95 @@
+// Valid instructions
+famax z0.h, p0/m, z0.h, z0.h
+famax z0.h, p2/m, z0.h, z0.h
+famax z0.h, p7/m, z0.h, z0.h
+famax z31.h, p0/m, z31.h, z0.h
+famax z31.h, p2/m, z31.h, z0.h
+famax z31.h, p7/m, z31.h, z0.h
+famax z0.h, p0/m, z0.h, z31.h
+famax z0.h, p2/m, z0.h, z31.h
+famax z0.h, p7/m, z0.h, z31.h
+famax z5.h, p0/m, z5.h, z7.h
+famax z5.h, p2/m, z5.h, z7.h
+famax z5.h, p7/m, z5.h, z7.h
+
+famax z0.s, p0/m, z0.s, z0.s
+famax z0.s, p2/m, z0.s, z0.s
+famax z0.s, p7/m, z0.s, z0.s
+famax z31.s, p0/m, z31.s, z0.s
+famax z31.s, p2/m, z31.s, z0.s
+famax z31.s, p7/m, z31.s, z0.s
+famax z0.s, p0/m, z0.s, z31.s
+famax z0.s, p2/m, z0.s, z31.s
+famax z0.s, p7/m, z0.s, z31.s
+famax z5.s, p0/m, z5.s, z7.s
+famax z5.s, p2/m, z5.s, z7.s
+famax z5.s, p7/m, z5.s, z7.s
+
+famax z0.d, p0/m, z0.d, z0.d
+famax z0.d, p2/m, z0.d, z0.d
+famax z0.d, p7/m, z0.d, z0.d
+famax z31.d, p0/m, z31.d, z0.d
+famax z31.d, p2/m, z31.d, z0.d
+famax z31.d, p7/m, z31.d, z0.d
+famax z0.d, p0/m, z0.d, z31.d
+famax z0.d, p2/m, z0.d, z31.d
+famax z0.d, p7/m, z0.d, z31.d
+famax z5.d, p0/m, z5.d, z7.d
+famax z5.d, p2/m, z5.d, z7.d
+famax z5.d, p7/m, z5.d, z7.d
+
+movprfx z5, z9
+famax z5.h, p7/m, z5.h, z7.h
+movprfx z5.d, p7/m, z8.d
+famax z5.d, p7/m, z5.d, z9.d
+
+// Invalid instruction because sz is 00 which is reserved
+.inst 0x650e9d25
+
+// Valid instructions
+famin z0.h, p0/m, z0.h, z0.h
+famin z0.h, p2/m, z0.h, z0.h
+famin z0.h, p7/m, z0.h, z0.h
+famin z31.h, p0/m, z31.h, z0.h
+famin z31.h, p2/m, z31.h, z0.h
+famin z31.h, p7/m, z31.h, z0.h
+famin z0.h, p0/m, z0.h, z31.h
+famin z0.h, p2/m, z0.h, z31.h
+famin z0.h, p7/m, z0.h, z31.h
+famin z5.h, p0/m, z5.h, z7.h
+famin z5.h, p2/m, z5.h, z7.h
+famin z5.h, p7/m, z5.h, z7.h
+
+famin z0.s, p0/m, z0.s, z0.s
+famin z0.s, p2/m, z0.s, z0.s
+famin z0.s, p7/m, z0.s, z0.s
+famin z31.s, p0/m, z31.s, z0.s
+famin z31.s, p2/m, z31.s, z0.s
+famin z31.s, p7/m, z31.s, z0.s
+famin z0.s, p0/m, z0.s, z31.s
+famin z0.s, p2/m, z0.s, z31.s
+famin z0.s, p7/m, z0.s, z31.s
+famin z5.s, p0/m, z5.s, z7.s
+famin z5.s, p2/m, z5.s, z7.s
+famin z5.s, p7/m, z5.s, z7.s
+
+famin z0.d, p0/m, z0.d, z0.d
+famin z0.d, p2/m, z0.d, z0.d
+famin z0.d, p7/m, z0.d, z0.d
+famin z31.d, p0/m, z31.d, z0.d
+famin z31.d, p2/m, z31.d, z0.d
+famin z31.d, p7/m, z31.d, z0.d
+famin z0.d, p0/m, z0.d, z31.d
+famin z0.d, p2/m, z0.d, z31.d
+famin z0.d, p7/m, z0.d, z31.d
+famin z5.d, p0/m, z5.d, z7.d
+famin z5.d, p2/m, z5.d, z7.d
+famin z5.d, p7/m, z5.d, z7.d
+
+movprfx z5, z9
+famin z5.h, p7/m, z5.h, z7.h
+movprfx z5.d, p7/m, z8.d
+famin z5.d, p7/m, z5.d, z9.d
+
+// Invalid instruction because sz is 00 which is reserved
+.inst 0x650f9d25
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 1e134a61b80..2fca9528c20 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -230,6 +230,8 @@ enum aarch64_feature_bit {
AARCH64_FEATURE_RCPC3,
/* Checked Pointer Arithmetic instructions. */
AARCH64_FEATURE_CPA,
+ /* FAMINMAX instructions. */
+ AARCH64_FEATURE_FAMINMAX,
AARCH64_NUM_FEATURES
};
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c
index 7b43525bd57..53eb8c67204 100644
--- a/opcodes/aarch64-asm-2.c
+++ b/opcodes/aarch64-asm-2.c
@@ -418,194 +418,194 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
case 1136: /* lduminl */
value = 1136; /* --> lduminl. */
break;
- case 1207: /* mov */
- case 1206: /* movn */
- value = 1206; /* --> movn. */
- break;
- case 1209: /* mov */
- case 1208: /* movz */
- value = 1208; /* --> movz. */
- break;
- case 3205: /* clrbhb */
- case 1288: /* autibsp */
- case 1287: /* autibz */
- case 1286: /* autiasp */
- case 1285: /* autiaz */
- case 1284: /* pacibsp */
- case 1283: /* pacibz */
- case 1282: /* paciasp */
- case 1281: /* paciaz */
- case 1261: /* gcsb */
- case 1241: /* clearbhb */
- case 1240: /* tsb */
- case 1239: /* psb */
- case 1238: /* esb */
- case 1237: /* autib1716 */
- case 1236: /* autia1716 */
- case 1235: /* pacib1716 */
- case 1234: /* pacia1716 */
- case 1233: /* xpaclri */
- case 1231: /* sevl */
- case 1230: /* sev */
- case 1229: /* wfi */
- case 1228: /* wfe */
- case 1227: /* yield */
- case 1226: /* bti */
- case 1225: /* csdb */
- case 1224: /* nop */
- case 1223: /* hint */
- value = 1223; /* --> hint. */
- break;
- case 1247: /* pssbb */
- case 1246: /* ssbb */
- case 1245: /* dfb */
- case 1243: /* dsb */
- value = 1243; /* --> dsb. */
- break;
- case 1244: /* dsb */
- value = 1244; /* --> dsb. */
- break;
- case 3206: /* trcit */
- case 1274: /* cosp */
- case 1273: /* cpp */
- case 1272: /* dvp */
- case 1271: /* cfp */
- case 1267: /* tlbi */
- case 1266: /* ic */
- case 1265: /* dc */
- case 1264: /* at */
- case 1262: /* sys */
- value = 1262; /* --> sys. */
- break;
- case 1268: /* tlbip */
- case 1263: /* sysp */
- value = 1263; /* --> sysp. */
- break;
- case 1269: /* wfet */
- value = 1269; /* --> wfet. */
- break;
- case 1270: /* wfit */
- value = 1270; /* --> wfit. */
- break;
- case 2090: /* bic */
- case 1337: /* and */
- value = 1337; /* --> and. */
+ case 1217: /* mov */
+ case 1216: /* movn */
+ value = 1216; /* --> movn. */
+ break;
+ case 1219: /* mov */
+ case 1218: /* movz */
+ value = 1218; /* --> movz. */
+ break;
+ case 3215: /* clrbhb */
+ case 1298: /* autibsp */
+ case 1297: /* autibz */
+ case 1296: /* autiasp */
+ case 1295: /* autiaz */
+ case 1294: /* pacibsp */
+ case 1293: /* pacibz */
+ case 1292: /* paciasp */
+ case 1291: /* paciaz */
+ case 1271: /* gcsb */
+ case 1251: /* clearbhb */
+ case 1250: /* tsb */
+ case 1249: /* psb */
+ case 1248: /* esb */
+ case 1247: /* autib1716 */
+ case 1246: /* autia1716 */
+ case 1245: /* pacib1716 */
+ case 1244: /* pacia1716 */
+ case 1243: /* xpaclri */
+ case 1241: /* sevl */
+ case 1240: /* sev */
+ case 1239: /* wfi */
+ case 1238: /* wfe */
+ case 1237: /* yield */
+ case 1236: /* bti */
+ case 1235: /* csdb */
+ case 1234: /* nop */
+ case 1233: /* hint */
+ value = 1233; /* --> hint. */
+ break;
+ case 1257: /* pssbb */
+ case 1256: /* ssbb */
+ case 1255: /* dfb */
+ case 1253: /* dsb */
+ value = 1253; /* --> dsb. */
+ break;
+ case 1254: /* dsb */
+ value = 1254; /* --> dsb. */
+ break;
+ case 3216: /* trcit */
+ case 1284: /* cosp */
+ case 1283: /* cpp */
+ case 1282: /* dvp */
+ case 1281: /* cfp */
+ case 1277: /* tlbi */
+ case 1276: /* ic */
+ case 1275: /* dc */
+ case 1274: /* at */
+ case 1272: /* sys */
+ value = 1272; /* --> sys. */
+ break;
+ case 1278: /* tlbip */
+ case 1273: /* sysp */
+ value = 1273; /* --> sysp. */
+ break;
+ case 1279: /* wfet */
+ value = 1279; /* --> wfet. */
+ break;
+ case 1280: /* wfit */
+ value = 1280; /* --> wfit. */
+ break;
+ case 2100: /* bic */
+ case 1347: /* and */
+ value = 1347; /* --> and. */
+ break;
+ case 1330: /* mov */
+ case 1349: /* and */
+ value = 1349; /* --> and. */
+ break;
+ case 1334: /* movs */
+ case 1350: /* ands */
+ value = 1350; /* --> ands. */
+ break;
+ case 2101: /* cmple */
+ case 1385: /* cmpge */
+ value = 1385; /* --> cmpge. */
+ break;
+ case 2104: /* cmplt */
+ case 1388: /* cmpgt */
+ value = 1388; /* --> cmpgt. */
+ break;
+ case 2102: /* cmplo */
+ case 1390: /* cmphi */
+ value = 1390; /* --> cmphi. */
+ break;
+ case 2103: /* cmpls */
+ case 1393: /* cmphs */
+ value = 1393; /* --> cmphs. */
+ break;
+ case 1327: /* mov */
+ case 1415: /* cpy */
+ value = 1415; /* --> cpy. */
+ break;
+ case 1329: /* mov */
+ case 1416: /* cpy */
+ value = 1416; /* --> cpy. */
+ break;
+ case 2111: /* fmov */
+ case 1332: /* mov */
+ case 1417: /* cpy */
+ value = 1417; /* --> cpy. */
break;
- case 1320: /* mov */
- case 1339: /* and */
- value = 1339; /* --> and. */
- break;
- case 1324: /* movs */
- case 1340: /* ands */
- value = 1340; /* --> ands. */
- break;
- case 2091: /* cmple */
- case 1375: /* cmpge */
- value = 1375; /* --> cmpge. */
- break;
- case 2094: /* cmplt */
- case 1378: /* cmpgt */
- value = 1378; /* --> cmpgt. */
- break;
- case 2092: /* cmplo */
- case 1380: /* cmphi */
- value = 1380; /* --> cmphi. */
- break;
- case 2093: /* cmpls */
- case 1383: /* cmphs */
- value = 1383; /* --> cmphs. */
- break;
- case 1317: /* mov */
- case 1405: /* cpy */
- value = 1405; /* --> cpy. */
- break;
- case 1319: /* mov */
- case 1406: /* cpy */
- value = 1406; /* --> cpy. */
- break;
- case 2101: /* fmov */
- case 1322: /* mov */
- case 1407: /* cpy */
- value = 1407; /* --> cpy. */
- break;
- case 1311: /* mov */
- case 1419: /* dup */
- value = 1419; /* --> dup. */
+ case 1321: /* mov */
+ case 1429: /* dup */
+ value = 1429; /* --> dup. */
break;
- case 1314: /* mov */
- case 1310: /* mov */
- case 1420: /* dup */
- value = 1420; /* --> dup. */
+ case 1324: /* mov */
+ case 1320: /* mov */
+ case 1430: /* dup */
+ value = 1430; /* --> dup. */
break;
- case 2100: /* fmov */
- case 1316: /* mov */
- case 1421: /* dup */
- value = 1421; /* --> dup. */
+ case 2110: /* fmov */
+ case 1326: /* mov */
+ case 1431: /* dup */
+ value = 1431; /* --> dup. */
break;
- case 1315: /* mov */
- case 1422: /* dupm */
- value = 1422; /* --> dupm. */
+ case 1325: /* mov */
+ case 1432: /* dupm */
+ value = 1432; /* --> dupm. */
break;
- case 2095: /* eon */
- case 1424: /* eor */
- value = 1424; /* --> eor. */
+ case 2105: /* eon */
+ case 1434: /* eor */
+ value = 1434; /* --> eor. */
break;
- case 1325: /* not */
- case 1426: /* eor */
- value = 1426; /* --> eor. */
+ case 1335: /* not */
+ case 1436: /* eor */
+ value = 1436; /* --> eor. */
break;
- case 1326: /* nots */
- case 1427: /* eors */
- value = 1427; /* --> eors. */
+ case 1336: /* nots */
+ case 1437: /* eors */
+ value = 1437; /* --> eors. */
break;
- case 2096: /* facle */
- case 1432: /* facge */
- value = 1432; /* --> facge. */
+ case 2106: /* facle */
+ case 1442: /* facge */
+ value = 1442; /* --> facge. */
break;
- case 2097: /* faclt */
- case 1433: /* facgt */
- value = 1433; /* --> facgt. */
+ case 2107: /* faclt */
+ case 1443: /* facgt */
+ value = 1443; /* --> facgt. */
break;
- case 2098: /* fcmle */
- case 1446: /* fcmge */
- value = 1446; /* --> fcmge. */
+ case 2108: /* fcmle */
+ case 1456: /* fcmge */
+ value = 1456; /* --> fcmge. */
break;
- case 2099: /* fcmlt */
- case 1448: /* fcmgt */
- value = 1448; /* --> fcmgt. */
+ case 2109: /* fcmlt */
+ case 1458: /* fcmgt */
+ value = 1458; /* --> fcmgt. */
break;
- case 1308: /* fmov */
- case 1454: /* fcpy */
- value = 1454; /* --> fcpy. */
+ case 1318: /* fmov */
+ case 1464: /* fcpy */
+ value = 1464; /* --> fcpy. */
break;
- case 1307: /* fmov */
- case 1477: /* fdup */
- value = 1477; /* --> fdup. */
+ case 1317: /* fmov */
+ case 1487: /* fdup */
+ value = 1487; /* --> fdup. */
break;
- case 1309: /* mov */
- case 1809: /* orr */
- value = 1809; /* --> orr. */
+ case 1319: /* mov */
+ case 1819: /* orr */
+ value = 1819; /* --> orr. */
break;
- case 2102: /* orn */
- case 1810: /* orr */
- value = 1810; /* --> orr. */
+ case 2112: /* orn */
+ case 1820: /* orr */
+ value = 1820; /* --> orr. */
break;
- case 1313: /* mov */
- case 1312: /* mov */
- case 1812: /* orr */
- value = 1812; /* --> orr. */
+ case 1323: /* mov */
+ case 1322: /* mov */
+ case 1822: /* orr */
+ value = 1822; /* --> orr. */
break;
- case 1323: /* movs */
- case 1813: /* orrs */
- value = 1813; /* --> orrs. */
+ case 1333: /* movs */
+ case 1823: /* orrs */
+ value = 1823; /* --> orrs. */
break;
- case 1318: /* mov */
- case 1876: /* sel */
- value = 1876; /* --> sel. */
+ case 1328: /* mov */
+ case 1886: /* sel */
+ value = 1886; /* --> sel. */
break;
- case 1321: /* mov */
- case 1877: /* sel */
- value = 1877; /* --> sel. */
+ case 1331: /* mov */
+ case 1887: /* sel */
+ value = 1887; /* --> sel. */
break;
default: return NULL;
}
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index adc2a49530b..46aa21bf98f 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -62,7 +62,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000100xxxxxxxxxxxxxxxx00xxx
fmopa. */
- return 2402;
+ return 2412;
}
else
{
@@ -70,7 +70,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000100xxxxxxxxxxxxxxxx10xxx
fmops. */
- return 2405;
+ return 2415;
}
}
else
@@ -81,7 +81,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000100xxxxxxxxxxxxxxxx01xxx
bmopa. */
- return 2516;
+ return 2526;
}
else
{
@@ -89,7 +89,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000100xxxxxxxxxxxxxxxx11xxx
bmops. */
- return 2517;
+ return 2527;
}
}
}
@@ -102,7 +102,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000x10xxxxxxxxxxxxxxxx0xxxx
fmopa. */
- return 2403;
+ return 2413;
}
else
{
@@ -110,7 +110,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x0000000x10xxxxxxxxxxxxxxxx1xxxx
fmops. */
- return 2406;
+ return 2416;
}
}
}
@@ -128,7 +128,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx00000xxxxxxxxxxxxxxxxx
mov. */
- return 2426;
+ return 2436;
}
else
{
@@ -140,7 +140,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x0010000xxxxxxxxxxxxxxxx
addha. */
- return 2394;
+ return 2404;
}
else
{
@@ -148,7 +148,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x1010000xxxxxxxxxxxxxxxx
addha. */
- return 2395;
+ return 2405;
}
}
else
@@ -159,7 +159,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x0010001xxxxxxxxxxxxxxxx
addva. */
- return 2398;
+ return 2408;
}
else
{
@@ -167,7 +167,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x1010001xxxxxxxxxxxxxxxx
addva. */
- return 2399;
+ return 2409;
}
}
}
@@ -180,7 +180,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x00x100xxxxxxxxxxxxxxxxx
zero. */
- return 2429;
+ return 2439;
}
else
{
@@ -188,7 +188,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x10x100xxxxxxxxxxxxxxxxx
zero. */
- return 2946;
+ return 2956;
}
}
}
@@ -200,7 +200,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0x001xxxxxxxxxxxxxxxxx
mov. */
- return 2425;
+ return 2435;
}
else
{
@@ -212,7 +212,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x00x101xx0xxxxxxxxxxxxxx
luti4. */
- return 2660;
+ return 2670;
}
else
{
@@ -220,7 +220,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x00x101xx1xxxxxxxxxxxxxx
luti4. */
- return 2659;
+ return 2669;
}
}
else
@@ -229,7 +229,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x10x101xxxxxxxxxxxxxxxxx
luti4. */
- return 2658;
+ return 2668;
}
}
}
@@ -248,7 +248,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0x010xxxxx00xxxxxxxxxx
mov. */
- return 2667;
+ return 2677;
}
else
{
@@ -258,7 +258,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0x011xxxxx000xxxxxxxxx
mov. */
- return 2663;
+ return 2673;
}
else
{
@@ -270,7 +270,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000000x011xxxxx001xxxxxxxxx
movaz. */
- return 3291;
+ return 3301;
}
else
{
@@ -278,7 +278,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000100x011xxxxx001xxxxxxxxx
movaz. */
- return 3293;
+ return 3303;
}
}
else
@@ -289,7 +289,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000010x011xxxxx001xxxxxxxxx
movaz. */
- return 3292;
+ return 3302;
}
else
{
@@ -297,7 +297,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000110x011xxxxx001xxxxxxxxx
movaz. */
- return 3294;
+ return 3304;
}
}
}
@@ -313,7 +313,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x00x11xxx0xx00xxxxxxxxxx
luti2. */
- return 2657;
+ return 2667;
}
else
{
@@ -321,7 +321,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000x00x11xxx1xx00xxxxxxxxxx
luti2. */
- return 2656;
+ return 2666;
}
}
else
@@ -334,7 +334,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000010x110xxxxx00xxxxxxxxxx
movt. */
- return 2678;
+ return 2688;
}
else
{
@@ -342,7 +342,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000010x111xxxxx00xxxxxxxxxx
movt. */
- return 2677;
+ return 2687;
}
}
else
@@ -351,7 +351,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000110x11xxxxxx00xxxxxxxxxx
luti2. */
- return 2655;
+ return 2665;
}
}
}
@@ -364,7 +364,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0xx10xxxxx10xxxxxxxxxx
mov. */
- return 2665;
+ return 2675;
}
else
{
@@ -372,7 +372,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0xx11xxxxx10xxxxxxxxxx
mov. */
- return 2661;
+ return 2671;
}
}
}
@@ -386,7 +386,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0xx10xxxxx01xxxxxxxxxx
mov. */
- return 2668;
+ return 2678;
}
else
{
@@ -396,7 +396,7 @@ aarch64_opcode_lookup_1 (uint32_t word)
10987654321098765432109876543210
x1000000xx0xx11xxxxx010xxxxxxxxx
mov. */
- return 2664;
+ return 2674;
[...]
[diff truncated at 100000 bytes]
More information about the Binutils-cvs
mailing list