Skip to content

Commit 762e65c

Browse files
authored
[AArch64] Add assembly/disassembly for FRINT{32,64}{X,Z} (merging) (#113562)
This patch adds assembly/disassembly support for the following SVE2.2 instructions - FRINT32X (merging) - FRINT32Z (merging) - FRINT64X (merging) - FRINT64Z (merging) - In accordance with: https://developer.arm.com/documentation/ddi0602/latest/
1 parent 2646ce2 commit 762e65c

File tree

11 files changed

+343
-2
lines changed

11 files changed

+343
-2
lines changed

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,13 @@ def SVEUnsupported : AArch64Unsupported {
7373
SVE2Unsupported.F);
7474
}
7575

76-
let F = [HasSME2p1, HasSVE2p1_or_HasSME2p1, HasSVE2p1orSSVE_AES] in
77-
def SME2p1Unsupported : AArch64Unsupported;
76+
let F = [HasSME2p2, HasSVE2p2orSME2p2] in
77+
def SME2p2Unsupported : AArch64Unsupported;
78+
79+
def SME2p1Unsupported : AArch64Unsupported {
80+
let F = !listconcat([HasSME2p1, HasSVE2p1_or_HasSME2p1, HasSVE2p1orSSVE_AES],
81+
SME2p2Unsupported.F);
82+
}
7883

7984
def SME2Unsupported : AArch64Unsupported {
8085
let F = !listconcat([HasSME2, HasSVE2orSME2, HasSVE2p1_or_HasSME2, HasSSVE_FP8FMA,

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4226,6 +4226,13 @@ let Predicates = [HasSVE2p2orSME2p2] in {
42264226

42274227
// SVE2p2 floating-point convert single-to-bf (placing odd), zeroing predicate
42284228
def BFCVTNT_ZPzZ : sve_fp_fcvt2z<0b1010, "bfcvtnt", ZPR16, ZPR32>;
4229+
4230+
// Floating point round to integral fp value in integer size range
4231+
// Merging
4232+
defm FRINT32Z_ZPmZ : sve_fp_2op_p_zd_frint<0b00, "frint32z">;
4233+
defm FRINT32X_ZPmZ : sve_fp_2op_p_zd_frint<0b01, "frint32x">;
4234+
defm FRINT64X_ZPmZ : sve_fp_2op_p_zd_frint<0b10, "frint64z">;
4235+
defm FRINT64Z_ZPmZ : sve_fp_2op_p_zd_frint<0b11, "frint64x">;
42294236
} // End HasSME2p2orSVE2p2
42304237

42314238
//===----------------------------------------------------------------------===//

llvm/lib/Target/AArch64/SVEInstrFormats.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3104,6 +3104,11 @@ multiclass sve2_fp_convert_down_odd_rounding<string asm, string op, SDPatternOpe
31043104
def : SVE_1_Op_Passthru_Pat<nxv2f32, ir_op, nxv2i1, nxv2f64, !cast<Instruction>(NAME # _DtoS)>;
31053105
}
31063106

3107+
multiclass sve_fp_2op_p_zd_frint<bits<2> opc, string asm> {
3108+
def _S : sve_fp_2op_p_zd<{ 0b0010, opc{1}, 0, opc{0} }, asm, ZPR32, ZPR32, ElementSizeS>;
3109+
def _D : sve_fp_2op_p_zd<{ 0b0010, opc{1}, 1, opc{0} }, asm, ZPR64, ZPR64, ElementSizeD>;
3110+
}
3111+
31073112
//===----------------------------------------------------------------------===//
31083113
// SVE Floating Point Unary Operations - Unpredicated Group
31093114
//===----------------------------------------------------------------------===//
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s
2+
3+
// ------------------------------------------------------------------------- //
4+
// Invalid element width
5+
6+
frint32x z31.b, p7/m, z31.b
7+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
8+
// CHECK-NEXT: frint32x z31.b, p7/m, z31.b
9+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10+
11+
frint32x z31.h, p7/m, z31.h
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
13+
// CHECK-NEXT: frint32x z31.h, p7/m, z31.h
14+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15+
16+
frint32x z31.s, p7/m, z31.d
17+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
18+
// CHECK-NEXT: frint32x z31.s, p7/m, z31.d
19+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20+
21+
frint32x z31.d, p7/m, z31.s
22+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
23+
// CHECK-NEXT: frint32x z31.d, p7/m, z31.s
24+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
25+
26+
// ------------------------------------------------------------------------- //
27+
// Invalid predicate
28+
29+
frint32x z31.s, p8/m, z31.s
30+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
31+
// CHECK-NEXT: frint32x z31.s, p8/m, z31.s
32+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %s \
4+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
5+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
6+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
8+
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST
9+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
10+
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
11+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
12+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
13+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
14+
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \
15+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
16+
17+
movprfx z23.d, p3/m, z31.d
18+
frint32x z23.d, p3/m, z13.d // 01100101-00010011-10101101-10110111
19+
// CHECK-INST: movprfx z23.d, p3/m, z31.d
20+
// CHECK-INST: frint32x z23.d, p3/m, z13.d
21+
// CHECK-ENCODING: [0xb7,0xad,0x13,0x65]
22+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
23+
// CHECK-UNKNOWN: 6513adb7 <unknown>
24+
25+
movprfx z23, z31
26+
frint32x z23.s, p3/m, z13.s // 01100101-00010001-10101101-10110111
27+
// CHECK-INST: movprfx z23, z31
28+
// CHECK-INST: frint32x z23.s, p3/m, z13.s
29+
// CHECK-ENCODING: [0xb7,0xad,0x11,0x65]
30+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
31+
// CHECK-UNKNOWN: 6511adb7 <unknown>
32+
33+
frint32x z0.s, p0/m, z0.s // 01100101-00010001-10100000-00000000
34+
// CHECK-INST: frint32x z0.s, p0/m, z0.s
35+
// CHECK-ENCODING: [0x00,0xa0,0x11,0x65]
36+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
37+
// CHECK-UNKNOWN: 6511a000 <unknown>
38+
39+
frint32x z21.d, p5/m, z10.d // 01100101-00010011-10110101-01010101
40+
// CHECK-INST: frint32x z21.d, p5/m, z10.d
41+
// CHECK-ENCODING: [0x55,0xb5,0x13,0x65]
42+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
43+
// CHECK-UNKNOWN: 6513b555 <unknown>
44+
45+
frint32x z31.d, p7/m, z31.d // 01100101-00010011-10111111-11111111
46+
// CHECK-INST: frint32x z31.d, p7/m, z31.d
47+
// CHECK-ENCODING: [0xff,0xbf,0x13,0x65]
48+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
49+
// CHECK-UNKNOWN: 6513bfff <unknown>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s
2+
3+
// ------------------------------------------------------------------------- //
4+
// Invalid element width
5+
6+
frint32z z31.b, p7/m, z31.b
7+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
8+
// CHECK-NEXT: frint32z z31.b, p7/m, z31.b
9+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10+
11+
frint32z z31.h, p7/m, z31.h
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
13+
// CHECK-NEXT: frint32z z31.h, p7/m, z31.h
14+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15+
16+
frint32z z31.s, p7/m, z31.d
17+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
18+
// CHECK-NEXT: frint32z z31.s, p7/m, z31.d
19+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20+
21+
frint32z z31.d, p7/m, z31.s
22+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
23+
// CHECK-NEXT: frint32z z31.d, p7/m, z31.s
24+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
25+
26+
// ------------------------------------------------------------------------- //
27+
// Invalid predicate
28+
29+
frint32z z31.s, p8/m, z31.s
30+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
31+
// CHECK-NEXT: frint32z z31.s, p8/m, z31.s
32+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %s \
4+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
5+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
6+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
8+
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST
9+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
10+
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
11+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
12+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
13+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
14+
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \
15+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
16+
17+
movprfx z23.d, p3/m, z31.d
18+
frint32z z23.d, p3/m, z13.d // 01100101-00010010-10101101-10110111
19+
// CHECK-INST: movprfx z23.d, p3/m, z31.d
20+
// CHECK-INST: frint32z z23.d, p3/m, z13.d
21+
// CHECK-ENCODING: [0xb7,0xad,0x12,0x65]
22+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
23+
// CHECK-UNKNOWN: 6512adb7 <unknown>
24+
25+
movprfx z23, z31
26+
frint32z z23.s, p3/m, z13.s // 01100101-00010000-10101101-10110111
27+
// CHECK-INST: movprfx z23, z31
28+
// CHECK-INST: frint32z z23.s, p3/m, z13.s
29+
// CHECK-ENCODING: [0xb7,0xad,0x10,0x65]
30+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
31+
// CHECK-UNKNOWN: 6510adb7 <unknown>
32+
33+
frint32z z0.s, p0/m, z0.s // 01100101-00010000-10100000-00000000
34+
// CHECK-INST: frint32z z0.s, p0/m, z0.s
35+
// CHECK-ENCODING: [0x00,0xa0,0x10,0x65]
36+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
37+
// CHECK-UNKNOWN: 6510a000 <unknown>
38+
39+
frint32z z21.d, p5/m, z10.d // 01100101-00010010-10110101-01010101
40+
// CHECK-INST: frint32z z21.d, p5/m, z10.d
41+
// CHECK-ENCODING: [0x55,0xb5,0x12,0x65]
42+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
43+
// CHECK-UNKNOWN: 6512b555 <unknown>
44+
45+
frint32z z31.d, p7/m, z31.d // 01100101-00010010-10111111-11111111
46+
// CHECK-INST: frint32z z31.d, p7/m, z31.d
47+
// CHECK-ENCODING: [0xff,0xbf,0x12,0x65]
48+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
49+
// CHECK-UNKNOWN: 6512bfff <unknown>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s
2+
3+
// ------------------------------------------------------------------------- //
4+
// Invalid element width
5+
6+
frint64x z31.b, p7/m, z31.b
7+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
8+
// CHECK-NEXT: frint64x z31.b, p7/m, z31.b
9+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10+
11+
frint64x z31.h, p7/m, z31.h
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
13+
// CHECK-NEXT: frint64x z31.h, p7/m, z31.h
14+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15+
16+
frint64x z31.s, p7/m, z31.d
17+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
18+
// CHECK-NEXT: frint64x z31.s, p7/m, z31.d
19+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20+
21+
frint64x z31.d, p7/m, z31.s
22+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
23+
// CHECK-NEXT: frint64x z31.d, p7/m, z31.s
24+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
25+
26+
// ------------------------------------------------------------------------- //
27+
// Invalid predicate
28+
29+
frint64x z31.s, p8/m, z31.s
30+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
31+
// CHECK-NEXT: frint64x z31.s, p8/m, z31.s
32+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %s \
4+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
5+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
6+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
8+
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST
9+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
10+
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
11+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
12+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
13+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
14+
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \
15+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
16+
17+
movprfx z23.d, p3/m, z31.d
18+
frint64x z23.d, p3/m, z13.d // 01100101-00010111-10101101-10110111
19+
// CHECK-INST: movprfx z23.d, p3/m, z31.d
20+
// CHECK-INST: frint64x z23.d, p3/m, z13.d
21+
// CHECK-ENCODING: [0xb7,0xad,0x17,0x65]
22+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
23+
// CHECK-UNKNOWN: 6517adb7 <unknown>
24+
25+
movprfx z23, z31
26+
frint64x z23.s, p3/m, z13.s // 01100101-00010101-10101101-10110111
27+
// CHECK-INST: movprfx z23, z31
28+
// CHECK-INST: frint64x z23.s, p3/m, z13.s
29+
// CHECK-ENCODING: [0xb7,0xad,0x15,0x65]
30+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
31+
// CHECK-UNKNOWN: 6515adb7 <unknown>
32+
33+
frint64x z21.d, p5/m, z10.d // 01100101-00010111-10110101-01010101
34+
// CHECK-INST: frint64x z21.d, p5/m, z10.d
35+
// CHECK-ENCODING: [0x55,0xb5,0x17,0x65]
36+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
37+
// CHECK-UNKNOWN: 6517b555 <unknown>
38+
39+
frint64x z31.d, p7/m, z31.d // 01100101-00010111-10111111-11111111
40+
// CHECK-INST: frint64x z31.d, p7/m, z31.d
41+
// CHECK-ENCODING: [0xff,0xbf,0x17,0x65]
42+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
43+
// CHECK-UNKNOWN: 6517bfff <unknown>
44+
45+
frint64x z31.s, p7/m, z31.s // 01100101-00010101-10111111-11111111
46+
// CHECK-INST: frint64x z31.s, p7/m, z31.s
47+
// CHECK-ENCODING: [0xff,0xbf,0x15,0x65]
48+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
49+
// CHECK-UNKNOWN: 6515bfff <unknown>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 2>&1 < %s| FileCheck %s
2+
3+
// ------------------------------------------------------------------------- //
4+
// Invalid element width
5+
6+
frint64z z31.b, p7/m, z31.b
7+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
8+
// CHECK-NEXT: frint64z z31.b, p7/m, z31.b
9+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10+
11+
frint64z z31.h, p7/m, z31.h
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
13+
// CHECK-NEXT: frint64z z31.h, p7/m, z31.h
14+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15+
16+
frint64z z31.s, p7/m, z31.d
17+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
18+
// CHECK-NEXT: frint64z z31.s, p7/m, z31.d
19+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20+
21+
frint64z z31.d, p7/m, z31.s
22+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width
23+
// CHECK-NEXT: frint64z z31.d, p7/m, z31.s
24+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
25+
26+
// ------------------------------------------------------------------------- //
27+
// Invalid predicate
28+
29+
frint64z z31.s, p8/m, z31.s
30+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix)
31+
// CHECK-NEXT: frint64z z31.s, p8/m, z31.s
32+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2p2 < %s \
4+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
5+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
6+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
8+
// RUN: | llvm-objdump -d --mattr=+sve2p2 - | FileCheck %s --check-prefix=CHECK-INST
9+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+sve2p2 < %s \
10+
// RUN: | llvm-objdump -d --mattr=-sme2 - | FileCheck %s --check-prefix=CHECK-UNKNOWN
11+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
12+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+sve2p2 < %s \
13+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
14+
// RUN: | llvm-mc -triple=aarch64 -mattr=+sve2p2 -disassemble -show-encoding \
15+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
16+
17+
movprfx z23.d, p3/m, z31.d
18+
frint64z z23.d, p3/m, z13.d // 01100101-00010110-10101101-10110111
19+
// CHECK-INST: movprfx z23.d, p3/m, z31.d
20+
// CHECK-INST: frint64z z23.d, p3/m, z13.d
21+
// CHECK-ENCODING: [0xb7,0xad,0x16,0x65]
22+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
23+
// CHECK-UNKNOWN: 6516adb7 <unknown>
24+
25+
movprfx z23, z31
26+
frint64z z23.s, p3/m, z13.s // 01100101-00010100-10101101-10110111
27+
// CHECK-INST: movprfx z23, z31
28+
// CHECK-INST: frint64z z23.s, p3/m, z13.s
29+
// CHECK-ENCODING: [0xb7,0xad,0x14,0x65]
30+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
31+
// CHECK-UNKNOWN: 6514adb7 <unknown>
32+
33+
frint64z z0.s, p0/m, z0.s // 01100101-00010100-10100000-00000000
34+
// CHECK-INST: frint64z z0.s, p0/m, z0.s
35+
// CHECK-ENCODING: [0x00,0xa0,0x14,0x65]
36+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
37+
// CHECK-UNKNOWN: 6514a000 <unknown>
38+
39+
frint64z z21.d, p5/m, z10.d // 01100101-00010110-10110101-01010101
40+
// CHECK-INST: frint64z z21.d, p5/m, z10.d
41+
// CHECK-ENCODING: [0x55,0xb5,0x16,0x65]
42+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
43+
// CHECK-UNKNOWN: 6516b555 <unknown>
44+
45+
frint64z z31.d, p7/m, z31.d // 01100101-00010110-10111111-11111111
46+
// CHECK-INST: frint64z z31.d, p7/m, z31.d
47+
// CHECK-ENCODING: [0xff,0xbf,0x16,0x65]
48+
// CHECK-ERROR: instruction requires: sme2p2 or sve2p2
49+
// CHECK-UNKNOWN: 6516bfff <unknown>

0 commit comments

Comments
 (0)