Skip to content

Commit b23426e

Browse files
[LLVM][AArch64][Assembly]: Add FAMINMAX assembly/disasse… (llvm#70115)
…mbly. This patch adds the feature flag FAMINMAX and the assembly/disassembly for the following instructions of NEON, SVE2 and SME2: * NEON: - FAMIN - FAMAX * SVE2: - FAMIN_ZPmZ - FAMAX_ZPmZ * SME2: - FAMAX_2Z2Z - FAMIN_2Z2Z - FAMAX_4Z4Z - FAMIN_4Z4Z That is according to this documentation: https://developer.arm.com/documentation/ddi0602/2023-09 Co-authored-by: Caroline Concatto <[email protected]>
1 parent 7360c6a commit b23426e

15 files changed

+770
-2
lines changed

llvm/include/llvm/TargetParser/AArch64TargetParser.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ enum ArchExtKind : unsigned {
161161
AEK_GCS = 57, // FEAT_GCS
162162
AEK_FPMR = 58, // FEAT_FPMR
163163
AEK_FP8 = 59, // FEAT_FP8
164+
AEK_FAMINMAX = 60, // FEAT_FAMINMAX
164165
AEK_NUM_EXTENSIONS
165166
};
166167
using ExtensionBitset = Bitset<AEK_NUM_EXTENSIONS>;
@@ -271,6 +272,7 @@ inline constexpr ExtensionInfo Extensions[] = {
271272
{"gcs", AArch64::AEK_GCS, "+gcs", "-gcs", FEAT_INIT, "", 0},
272273
{"fpmr", AArch64::AEK_FPMR, "+fpmr", "-fpmr", FEAT_INIT, "", 0},
273274
{"fp8", AArch64::AEK_FP8, "+fp8", "-fp8", FEAT_INIT, "+fpmr", 0},
275+
{"faminmax", AArch64::AEK_FAMINMAX, "+faminmax", "-faminmax", FEAT_INIT, "", 0},
274276
// Special cases
275277
{"none", AArch64::AEK_NONE, {}, {}, FEAT_INIT, "", ExtensionInfo::MaxFMVPriority},
276278
};

llvm/lib/Target/AArch64/AArch64.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,9 @@ def FeatureSME2 : SubtargetFeature<"sme2", "HasSME2", "true",
514514
def FeatureSME2p1 : SubtargetFeature<"sme2p1", "HasSME2p1", "true",
515515
"Enable Scalable Matrix Extension 2.1 (FEAT_SME2p1) instructions", [FeatureSME2]>;
516516

517+
def FeatureFAMINMAX: SubtargetFeature<"faminmax", "HasFAMINMAX", "true",
518+
"Enable FAMIN and FAMAX instructions (FEAT_FAMINMAX)">;
519+
517520
def FeatureAppleA7SysReg : SubtargetFeature<"apple-a7-sysreg", "HasAppleA7SysReg", "true",
518521
"Apple A7 (the CPU formerly known as Cyclone)">;
519522

llvm/lib/Target/AArch64/AArch64InstrInfo.td

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ def HasFPMR : Predicate<"Subtarget->hasFPMR()">,
164164
AssemblerPredicateWithAll<(all_of FeatureFPMR), "fpmr">;
165165
def HasFP8 : Predicate<"Subtarget->hasFP8()">,
166166
AssemblerPredicateWithAll<(all_of FeatureFP8), "fp8">;
167+
def HasFAMINMAX : Predicate<"Subtarget->hasFAMINMAX()">,
168+
AssemblerPredicateWithAll<(all_of FeatureFAMINMAX), "faminmax">;
167169

168170
// A subset of SVE(2) instructions are legal in Streaming SVE execution mode,
169171
// they should be enabled if either has been specified.
@@ -9265,6 +9267,12 @@ let Predicates = [HasFP8] in {
92659267
defm FSCALE : SIMDThreeSameVectorFP<0b1, 0b1, 0b111, "fscale", null_frag>;
92669268
} // End let Predicates = [HasFP8]
92679269

9270+
let Predicates = [HasFAMINMAX] in {
9271+
defm FAMAX : SIMDThreeSameVectorFP<0b0, 0b1, 0b011, "famax", null_frag>;
9272+
defm FAMIN : SIMDThreeSameVectorFP<0b1, 0b1, 0b011, "famin", null_frag>;
9273+
} // End let Predicates = [HasFAMAXMIN]
9274+
9275+
92689276
include "AArch64InstrAtomics.td"
92699277
include "AArch64SVEInstrInfo.td"
92709278
include "AArch64SMEInstrInfo.td"

llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,3 +878,10 @@ defm FSCALE_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"fscale", 0b001100
878878

879879
} // [HasSME2, HasFP8]
880880

881+
let Predicates = [HasSME2, HasFAMINMAX] in {
882+
defm FAMAX_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"famax", 0b0010100>;
883+
defm FAMIN_2Z2Z : sme2_fp_sve_destructive_vector_vg2_multi<"famin", 0b0010101>;
884+
885+
defm FAMAX_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"famax", 0b0010100>;
886+
defm FAMIN_4Z4Z : sme2_fp_sve_destructive_vector_vg4_multi<"famin", 0b0010101>;
887+
} //[HasSME2, HasFAMINMAX]

llvm/lib/Target/AArch64/AArch64SVEInstrInfo.td

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4022,4 +4022,10 @@ defm FCVTN_Z2Z_HtoB : sve2_fp8_down_cvt_single<0b00, "fcvtn", ZZ_h_mul_r>;
40224022
defm FCVTNB_Z2Z_StoB : sve2_fp8_down_cvt_single<0b01, "fcvtnb", ZZ_s_mul_r>;
40234023
defm BFCVTN_Z2Z_HtoB : sve2_fp8_down_cvt_single<0b10, "bfcvtn", ZZ_h_mul_r>;
40244024
defm FCVTNT_Z2Z_StoB : sve2_fp8_down_cvt_single<0b11, "fcvtnt", ZZ_s_mul_r>;
4025-
} // End HasSVE2orSME2, HasFP8
4025+
} // End HasSVE2orSME2, HasFP8
4026+
4027+
let Predicates = [HasSVE2orSME2, HasFAMINMAX] in {
4028+
// FP8 Arithmetic - Predicated Group
4029+
defm FAMIN_ZPmZ : sve_fp_2op_p_zds<0b1111, "famin", "", null_frag, DestructiveOther>;
4030+
defm FAMAX_ZPmZ : sve_fp_2op_p_zds<0b1110, "famax", "", null_frag, DestructiveOther>;
4031+
} // End HasSVE2orSME2, HasFAMINMAX

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3640,6 +3640,7 @@ static const struct Extension {
36403640
{"tme", {AArch64::FeatureTME}},
36413641
{"fpmr", {AArch64::FeatureFPMR}},
36423642
{"fp8", {AArch64::FeatureFP8}},
3643+
{"faminmax", {AArch64::FeatureFAMINMAX}},
36433644
};
36443645

36453646
static void setRequiredFeatureString(FeatureBitset FBS, std::string &Str) {

llvm/test/MC/AArch64/FP8/directive-arch-negative.s

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@
55
bf1cvtl v0.8h, v0.8b
66
// CHECK: error: instruction requires: fp8
77
// CHECK: bf1cvtl v0.8h, v0.8b
8+
9+
.arch armv9-a+faminmax
10+
.arch armv9-a+nofaminmax
11+
famax v31.4h, v31.4h, v31.4h
12+
// CHECK: error: instruction requires: faminmax
13+
// CHECK: famax v31.4h, v31.4h, v31.4h
14+

llvm/test/MC/AArch64/FP8/directive-arch.s

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,9 @@ bf1cvtl v0.8h, v0.8b
55
// CHECK: bf1cvtl v0.8h, v0.8b
66

77
.arch armv9-a+nofp8
8+
.arch armv9-a+faminmax
9+
famax v31.4h, v31.4h, v31.4h
10+
// CHECK: famax v31.4h, v31.4h, v31.4h
11+
12+
.arch armv9-a+nofaminmax
13+
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+faminmax 2>&1 < %s| FileCheck %s
2+
3+
// --------------------------------------------------------------------------//
4+
// Element size extension incorrect
5+
6+
famax v0.16s, v0.4s, v0.4s
7+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid vector kind qualifier
8+
// CHECK-NEXT: famax v0.16s, v0.4s, v0.4s
9+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
10+
11+
famax v0.4h, v0.4s, v0.4s
12+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
13+
// CHECK-NEXT: famax v0.4h, v0.4s, v0.4s
14+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
15+
16+
famax v0.8h, v0.8s, v0.8s
17+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid vector kind qualifier
18+
// CHECK-NEXT: famax v0.8h, v0.8s, v0.8s
19+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
20+
21+
famax v0.2s, v0.2h, v0.2h
22+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
23+
// CHECK-NEXT: famax v0.2s, v0.2h, v0.2h
24+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
25+
26+
famax v0.4s, v31.4h, v0.4h
27+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
28+
// CHECK-NEXT: famax v0.4s, v31.4h, v0.4h
29+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
30+
31+
famax v0.2d, v31.2h, v0.2h
32+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
33+
// CHECK-NEXT: famax v0.2d, v31.2h, v0.2h
34+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
35+
36+
famin v0.16s, v0.4s, v0.4s
37+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid vector kind qualifier
38+
// CHECK-NEXT: famin v0.16s, v0.4s, v0.4s
39+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
40+
41+
famin v0.4h, v0.4s, v0.4s
42+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
43+
// CHECK-NEXT: famin v0.4h, v0.4s, v0.4s
44+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
45+
46+
famin v0.8h, v0.8s, v0.8s
47+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid vector kind qualifier
48+
// CHECK-NEXT: famin v0.8h, v0.8s, v0.8s
49+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
50+
51+
famin v0.2s, v0.2h, v0.2h
52+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
53+
// CHECK-NEXT: famin v0.2s, v0.2h, v0.2h
54+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
55+
56+
famin v0.4s, v31.4h, v0.4h
57+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
58+
// CHECK-NEXT: famin v0.4s, v31.4h, v0.4h
59+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
60+
61+
famin v0.2d, v31.2h, v0.2h
62+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
63+
// CHECK-NEXT: famin v0.2d, v31.2h, v0.2h
64+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:

llvm/test/MC/AArch64/FP8/faminmax.s

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+faminmax < %s \
2+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
// RUN: not llvm-mc -triple=aarch64 -show-encoding < %s 2>&1 \
4+
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
5+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+faminmax < %s \
6+
// RUN: | llvm-objdump -d --mattr=+faminmax - | FileCheck %s --check-prefix=CHECK-INST
7+
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=+faminmax < %s \
8+
// RUN: | llvm-objdump -d --mattr=-faminmax - | FileCheck %s --check-prefix=CHECK-UNKNOWN
9+
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
10+
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=+faminmax < %s \
11+
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
12+
// RUN: | llvm-mc -triple=aarch64 -mattr=+faminmax -disassemble -show-encoding \
13+
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
14+
15+
/// FAMAX instructions.
16+
famax v31.4h, v31.4h, v31.4h
17+
// CHECK-INST: famax v31.4h, v31.4h, v31.4h
18+
// CHECK-ENCODING: [0xff,0x1f,0xdf,0x0e]
19+
// CHECK-ERROR: instruction requires: faminmax
20+
// CHECK-UNKNOWN: 0edf1fff <unknown>
21+
22+
famax v31.4h, v0.4h, v31.4h
23+
// CHECK-INST: famax v31.4h, v0.4h, v31.4h
24+
// CHECK-ENCODING: [0x1f,0x1c,0xdf,0x0e]
25+
// CHECK-ERROR: instruction requires: faminmax
26+
// CHECK-UNKNOWN: 0edf1c1f <unknown>
27+
28+
famax v0.4h, v0.4h, v0.4h
29+
// CHECK-INST: famax v0.4h, v0.4h, v0.4h
30+
// CHECK-ENCODING: [0x00,0x1c,0xc0,0x0e]
31+
// CHECK-ERROR: instruction requires: faminmax
32+
// CHECK-UNKNOWN: 0ec01c00 <unknown>
33+
34+
famax v31.8h, v31.8h, v31.8h
35+
// CHECK-INST: famax v31.8h, v31.8h, v31.8h
36+
// CHECK-ENCODING: [0xff,0x1f,0xdf,0x4e]
37+
// CHECK-ERROR: instruction requires: faminmax
38+
// CHECK-UNKNOWN: 4edf1fff <unknown>
39+
40+
famax v31.8h, v31.8h, v0.8h
41+
// CHECK-INST: famax v31.8h, v31.8h, v0.8h
42+
// CHECK-ENCODING: [0xff,0x1f,0xc0,0x4e]
43+
// CHECK-ERROR: instruction requires: faminmax
44+
// CHECK-UNKNOWN: 4ec01fff <unknown>
45+
46+
famax v0.8h, v0.8h, v0.8h
47+
// CHECK-INST: famax v0.8h, v0.8h, v0.8h
48+
// CHECK-ENCODING: [0x00,0x1c,0xc0,0x4e]
49+
// CHECK-ERROR: instruction requires: faminmax
50+
// CHECK-UNKNOWN: 4ec01c00 <unknown>
51+
52+
famax v31.2s, v31.2s, v31.2s
53+
// CHECK-INST: famax v31.2s, v31.2s, v31.2s
54+
// CHECK-ENCODING: [0xff,0xdf,0xbf,0x0e]
55+
// CHECK-ERROR: instruction requires: faminmax
56+
// CHECK-UNKNOWN: 0ebfdfff <unknown>
57+
58+
famax v31.2s, v0.2s, v0.2s
59+
// CHECK-INST: famax v31.2s, v0.2s, v0.2s
60+
// CHECK-ENCODING: [0x1f,0xdc,0xa0,0x0e]
61+
// CHECK-ERROR: instruction requires: faminmax
62+
// CHECK-UNKNOWN: 0ea0dc1f <unknown>
63+
64+
famax v0.2s, v0.2s, v0.2s
65+
// CHECK-INST: famax v0.2s, v0.2s, v0.2s
66+
// CHECK-ENCODING: [0x00,0xdc,0xa0,0x0e]
67+
// CHECK-ERROR: instruction requires: faminmax
68+
// CHECK-UNKNOWN: 0ea0dc00 <unknown>
69+
70+
famax v31.4s, v31.4s, v31.4s
71+
// CHECK-INST: famax v31.4s, v31.4s, v31.4s
72+
// CHECK-ENCODING: [0xff,0xdf,0xbf,0x4e]
73+
// CHECK-ERROR: instruction requires: faminmax
74+
// CHECK-UNKNOWN: 4ebfdfff <unknown>
75+
76+
famax v0.4s, v31.4s, v31.4s
77+
// CHECK-INST: famax v0.4s, v31.4s, v31.4s
78+
// CHECK-ENCODING: [0xe0,0xdf,0xbf,0x4e]
79+
// CHECK-ERROR: instruction requires: faminmax
80+
// CHECK-UNKNOWN: 4ebfdfe0 <unknown>
81+
82+
famax v0.4s, v0.4s, v0.4s
83+
// CHECK-INST: famax v0.4s, v0.4s, v0.4s
84+
// CHECK-ENCODING: [0x00,0xdc,0xa0,0x4e]
85+
// CHECK-ERROR: instruction requires: faminmax
86+
// CHECK-UNKNOWN: 4ea0dc00 <unknown>
87+
88+
famax v31.2d, v31.2d, v31.2d
89+
// CHECK-INST: famax v31.2d, v31.2d, v31.2d
90+
// CHECK-ENCODING: [0xff,0xdf,0xff,0x4e]
91+
// CHECK-ERROR: instruction requires: faminmax
92+
// CHECK-UNKNOWN: 4effdfff <unknown>
93+
94+
famax v0.2d, v0.2d, v31.2d
95+
// CHECK-INST: famax v0.2d, v0.2d, v31.2d
96+
// CHECK-ENCODING: [0x00,0xdc,0xff,0x4e]
97+
// CHECK-ERROR: instruction requires: faminmax
98+
// CHECK-UNKNOWN: 4effdc00 <unknown>
99+
100+
famax v0.2d, v0.2d, v0.2d
101+
// CHECK-INST: famax v0.2d, v0.2d, v0.2d
102+
// CHECK-ENCODING: [0x00,0xdc,0xe0,0x4e]
103+
// CHECK-ERROR: instruction requires: faminmax
104+
// CHECK-UNKNOWN: 4ee0dc00 <unknown>
105+
106+
107+
/// FAMIN instructions.
108+
famin v31.4h, v31.4h, v31.4h
109+
// CHECK-INST: famin v31.4h, v31.4h, v31.4h
110+
// CHECK-ENCODING: [0xff,0x1f,0xdf,0x2e]
111+
// CHECK-ERROR: instruction requires: faminmax
112+
// CHECK-UNKNOWN: 2edf1fff <unknown>
113+
114+
famin v31.4h, v0.4h, v31.4h
115+
// CHECK-INST: famin v31.4h, v0.4h, v31.4h
116+
// CHECK-ENCODING: [0x1f,0x1c,0xdf,0x2e]
117+
// CHECK-ERROR: instruction requires: faminmax
118+
// CHECK-UNKNOWN: 2edf1c1f <unknown>
119+
120+
famin v0.4h, v0.4h, v0.4h
121+
// CHECK-INST: famin v0.4h, v0.4h, v0.4h
122+
// CHECK-ENCODING: [0x00,0x1c,0xc0,0x2e]
123+
// CHECK-ERROR: instruction requires: faminmax
124+
// CHECK-UNKNOWN: 2ec01c00 <unknown>
125+
126+
famin v31.8h, v31.8h, v31.8h
127+
// CHECK-INST: famin v31.8h, v31.8h, v31.8h
128+
// CHECK-ENCODING: [0xff,0x1f,0xdf,0x6e]
129+
// CHECK-ERROR: instruction requires: faminmax
130+
// CHECK-UNKNOWN: 6edf1fff <unknown>
131+
132+
famin v31.8h, v31.8h, v0.8h
133+
// CHECK-INST: famin v31.8h, v31.8h, v0.8h
134+
// CHECK-ENCODING: [0xff,0x1f,0xc0,0x6e]
135+
// CHECK-ERROR: instruction requires: faminmax
136+
// CHECK-UNKNOWN: 6ec01fff <unknown>
137+
138+
famin v0.8h, v0.8h, v0.8h
139+
// CHECK-INST: famin v0.8h, v0.8h, v0.8h
140+
// CHECK-ENCODING: [0x00,0x1c,0xc0,0x6e]
141+
// CHECK-ERROR: instruction requires: faminmax
142+
// CHECK-UNKNOWN: 6ec01c00 <unknown>
143+
144+
famin v31.2s, v31.2s, v31.2s
145+
// CHECK-INST: famin v31.2s, v31.2s, v31.2s
146+
// CHECK-ENCODING: [0xff,0xdf,0xbf,0x2e]
147+
// CHECK-ERROR: instruction requires: faminmax
148+
// CHECK-UNKNOWN: 2ebfdfff <unknown>
149+
150+
famin v31.2s, v0.2s, v0.2s
151+
// CHECK-INST: famin v31.2s, v0.2s, v0.2s
152+
// CHECK-ENCODING: [0x1f,0xdc,0xa0,0x2e]
153+
// CHECK-ERROR: instruction requires: faminmax
154+
// CHECK-UNKNOWN: 2ea0dc1f <unknown>
155+
156+
famin v0.2s, v0.2s, v0.2s
157+
// CHECK-INST: famin v0.2s, v0.2s, v0.2s
158+
// CHECK-ENCODING: [0x00,0xdc,0xa0,0x2e]
159+
// CHECK-ERROR: instruction requires: faminmax
160+
// CHECK-UNKNOWN: 2ea0dc00 <unknown>
161+
162+
famin v31.4s, v31.4s, v31.4s
163+
// CHECK-INST: famin v31.4s, v31.4s, v31.4s
164+
// CHECK-ENCODING: [0xff,0xdf,0xbf,0x6e]
165+
// CHECK-ERROR: instruction requires: faminmax
166+
// CHECK-UNKNOWN: 6ebfdfff <unknown>
167+
168+
famin v0.4s, v31.4s, v31.4s
169+
// CHECK-INST: famin v0.4s, v31.4s, v31.4s
170+
// CHECK-ENCODING: [0xe0,0xdf,0xbf,0x6e]
171+
// CHECK-ERROR: instruction requires: faminmax
172+
// CHECK-UNKNOWN: 6ebfdfe0 <unknown>
173+
174+
famin v0.4s, v0.4s, v0.4s
175+
// CHECK-INST: famin v0.4s, v0.4s, v0.4s
176+
// CHECK-ENCODING: [0x00,0xdc,0xa0,0x6e]
177+
// CHECK-ERROR: instruction requires: faminmax
178+
// CHECK-UNKNOWN: 6ea0dc00 <unknown>
179+
180+
famin v31.2d, v31.2d, v31.2d
181+
// CHECK-INST: famin v31.2d, v31.2d, v31.2d
182+
// CHECK-ENCODING: [0xff,0xdf,0xff,0x6e]
183+
// CHECK-ERROR: instruction requires: faminmax
184+
// CHECK-UNKNOWN: 6effdfff <unknown>
185+
186+
famin v0.2d, v0.2d, v31.2d
187+
// CHECK-INST: famin v0.2d, v0.2d, v31.2d
188+
// CHECK-ENCODING: [0x00,0xdc,0xff,0x6e]
189+
// CHECK-ERROR: instruction requires: faminmax
190+
// CHECK-UNKNOWN: 6effdc00 <unknown>
191+
192+
famin v0.2d, v0.2d, v0.2d
193+
// CHECK-INST: famin v0.2d, v0.2d, v0.2d
194+
// CHECK-ENCODING: [0x00,0xdc,0xe0,0x6e]
195+
// CHECK-ERROR: instruction requires: faminmax
196+
// CHECK-UNKNOWN: 6ee0dc00 <unknown>
197+

0 commit comments

Comments
 (0)