Browse Source

gas, aarch64: Add faminmax extension

master
Saurabh Jha 2 years ago
committed by Nick Clifton
parent
commit
f3f34f2b26
  1. 1
      gas/config/tc-aarch64.c
  2. 3
      gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d
  3. 51
      gas/testsuite/gas/aarch64/advsimd-faminmax-bad.l
  4. 3
      gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.d
  5. 87
      gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.l
  6. 51
      gas/testsuite/gas/aarch64/advsimd-faminmax-illegal.s
  7. 60
      gas/testsuite/gas/aarch64/advsimd-faminmax.d
  8. 67
      gas/testsuite/gas/aarch64/advsimd-faminmax.s
  9. 3
      gas/testsuite/gas/aarch64/sme2-faminmax-bad.d
  10. 49
      gas/testsuite/gas/aarch64/sme2-faminmax-bad.l
  11. 3
      gas/testsuite/gas/aarch64/sme2-faminmax-illegal.d
  12. 87
      gas/testsuite/gas/aarch64/sme2-faminmax-illegal.l
  13. 63
      gas/testsuite/gas/aarch64/sme2-faminmax-illegal.s
  14. 58
      gas/testsuite/gas/aarch64/sme2-faminmax.d
  15. 67
      gas/testsuite/gas/aarch64/sme2-faminmax.s
  16. 3
      gas/testsuite/gas/aarch64/sve2-faminmax-bad.d
  17. 81
      gas/testsuite/gas/aarch64/sve2-faminmax-bad.l
  18. 3
      gas/testsuite/gas/aarch64/sve2-faminmax-illegal.d
  19. 123
      gas/testsuite/gas/aarch64/sve2-faminmax-illegal.l
  20. 71
      gas/testsuite/gas/aarch64/sve2-faminmax-illegal.s
  21. 0
      gas/testsuite/gas/aarch64/sve2-faminmax-warning.s
  22. 90
      gas/testsuite/gas/aarch64/sve2-faminmax.d
  23. 95
      gas/testsuite/gas/aarch64/sve2-faminmax.s
  24. 2
      include/opcode/aarch64.h
  25. 338
      opcodes/aarch64-asm-2.c
  26. 4714
      opcodes/aarch64-dis-2.c
  27. 30
      opcodes/aarch64-opc-2.c
  28. 30
      opcodes/aarch64-tbl.h

1
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},
};

3
gas/testsuite/gas/aarch64/advsimd-faminmax-bad.d

@ -0,0 +1,3 @@
#as:
#source: advsimd-faminmax.s
#error_output: advsimd-faminmax-bad.l

51
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'

3
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

87
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'

51
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

60
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

67
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

3
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

49
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}'

3
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

87
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}'

63
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 }

58
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

67
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

3
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

81
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'

3
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

123
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'

71
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

0
gas/testsuite/gas/aarch64/sve2-faminmax-warning.s

90
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

95
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

2
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
};

338
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;
}

4714
opcodes/aarch64-dis-2.c

File diff suppressed because it is too large

30
opcodes/aarch64-opc-2.c

@ -368,12 +368,12 @@ static const unsigned op_enum_table [] =
12,
636,
637,
1206,
1208,
1210,
1216,
1218,
1220,
998,
1209,
1207,
1219,
1217,
318,
624,
635,
@ -405,18 +405,18 @@ static const unsigned op_enum_table [] =
391,
413,
415,
1312,
1313,
1318,
1310,
1309,
1314,
1321,
1322,
1323,
1324,
1328,
1320,
1326,
1325,
1319,
1324,
1331,
1333,
1334,
1330,
1336,
1335,
131,
};

30
opcodes/aarch64-tbl.h

@ -2663,6 +2663,12 @@ static const aarch64_feature_set aarch64_feature_cpa =
AARCH64_FEATURE (CPA);
static const aarch64_feature_set aarch64_feature_cpa_sve =
AARCH64_FEATURES (2, CPA, SVE);
static const aarch64_feature_set aarch64_feature_faminmax =
AARCH64_FEATURE (FAMINMAX);
static const aarch64_feature_set aarch64_feature_faminmax_sve2 =
AARCH64_FEATURES (2, FAMINMAX, SVE2);
static const aarch64_feature_set aarch64_feature_faminmax_sme2 =
AARCH64_FEATURES (3, SVE2, FAMINMAX, SME2);
#define CORE &aarch64_feature_v8
#define FP &aarch64_feature_fp
@ -2731,6 +2737,9 @@ static const aarch64_feature_set aarch64_feature_cpa_sve =
#define RCPC3 &aarch64_feature_rcpc3
#define CPA &aarch64_feature_cpa
#define CPA_SVE &aarch64_feature_cpa_sve
#define FAMINMAX &aarch64_feature_faminmax
#define FAMINMAX_SVE2 &aarch64_feature_faminmax_sve2
#define FAMINMAX_SME2 &aarch64_feature_faminmax_sme2
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, 0, NULL }
@ -2908,6 +2917,14 @@ static const aarch64_feature_set aarch64_feature_cpa_sve =
#define CPA_SVE_INSNC(NAME,OPCODE,MASK,CLASS,OPS,QUALS,CONSTRAINTS,TIED) \
{ NAME, OPCODE, MASK, CLASS, 0, CPA_SVE, OPS, QUALS, \
F_STRICT, CONSTRAINTS, TIED, NULL }
#define FAMINMAX_INSN(NAME,OPCODE,MASK,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, asimdsame, 0, FAMINMAX, OPS, QUALS, FLAGS, 0, 0, NULL }
#define FAMINMAX_SVE2_INSN(NAME,OPCODE,MASK,OPS,QUALS,CONSTRAINTS) \
{ NAME, OPCODE, MASK, sve_size_hsd, 0, FAMINMAX_SVE2, OPS, QUALS, \
0 | F_STRICT, CONSTRAINTS, 2, NULL }
#define FAMINMAX_SME2_INSN(NAME,OPCODE,MASK,OPS,QUALS) \
{ NAME, OPCODE, MASK, sme_size_22_hsd, 0, FAMINMAX_SME2, OPS, QUALS, \
F_STRICT | 0, 0, 1, NULL }
#define MOPS_CPY_OP1_OP2_PME_INSN(NAME, OPCODE, MASK, FLAGS, CONSTRAINTS) \
MOPS_INSN (NAME, OPCODE, MASK, 0, \
@ -4245,6 +4262,19 @@ const struct aarch64_opcode aarch64_opcode_table[] =
RCPC3_INSN ("ldap1", 0x0d418400, 0xbffffc00, rcpc3, OP2 (LEt, SIMD_ADDR_SIMPLE), QL_SIMD_IMM_D, F_OD(1)),
RCPC3_INSN ("ldapur", 0x1d400800, 0x3f600C00, rcpc3, OP2 (Ft, RCPC3_ADDR_OFFSET), QL_LDST_FP, F_RCPC3_SIZE),
RCPC3_INSN ("stlur", 0x1d000800, 0x3f600C00, rcpc3, OP2 (Ft, RCPC3_ADDR_OFFSET), QL_LDST_FP, F_RCPC3_SIZE),
/* AdvSIMD faminmax. */
FAMINMAX_INSN ("famax", 0xec01c00, 0xbfe0fc00, OP3 (Vd, Vn, Vm), QL_V3SAMEH, F_SIZEQ),
FAMINMAX_INSN ("famax", 0xea0dc00, 0xbfa0fc00, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ),
FAMINMAX_INSN ("famin", 0x2ec01c00, 0xbfe0fc00, OP3 (Vd, Vn, Vm), QL_V3SAMEH, F_SIZEQ),
FAMINMAX_INSN ("famin", 0x2ea0dc00, 0xbfa0fc00, OP3 (Vd, Vn, Vm), QL_V3SAMESD, F_SIZEQ),
/* SVE2 faminmax. */
FAMINMAX_SVE2_INSN ("famax", 0x650e8000, 0xff3fe000, OP4 (SVE_Zd, SVE_Pg3, SVE_Zd, SVE_Zm_5), OP_SVE_VMVV_HSD, C_SCAN_MOVPRFX),
FAMINMAX_SVE2_INSN ("famin", 0x650f8000, 0xff3fe000, OP4 (SVE_Zd, SVE_Pg3, SVE_Zd, SVE_Zm_5), OP_SVE_VMVV_HSD, C_SCAN_MOVPRFX),
/* SME2 faminmax. */
FAMINMAX_SME2_INSN ("famax", 0xc120b140, 0xff21ffe1, OP3 (SME_Zdnx2, SME_Zdnx2, SME_Zmx2), OP_SVE_VVV_HSD),
FAMINMAX_SME2_INSN ("famax", 0xc120b940, 0xff23ffe3, OP3 (SME_Zdnx4, SME_Zdnx4, SME_Zmx4), OP_SVE_VVV_HSD),
FAMINMAX_SME2_INSN ("famin", 0xc120b141, 0xff21ffe1, OP3 (SME_Zdnx2, SME_Zdnx2, SME_Zmx2), OP_SVE_VVV_HSD),
FAMINMAX_SME2_INSN ("famin", 0xc120b941, 0xff23ffe3, OP3 (SME_Zdnx4, SME_Zdnx4, SME_Zmx4), OP_SVE_VVV_HSD),
/* Move wide (immediate). */
CORE_INSN ("movn", 0x12800000, 0x7f800000, movewide, OP_MOVN, OP2 (Rd, HALF), QL_DST_R, F_SF | F_HAS_ALIAS),
CORE_INSN ("mov", 0x12800000, 0x7f800000, movewide, OP_MOV_IMM_WIDEN, OP2 (Rd, IMM_MOV), QL_DST_R, F_SF | F_ALIAS | F_CONV),

Loading…
Cancel
Save