@@ -21,23 +21,21 @@ let SVETargetGuard = InvalidMode in {
2121// Loads
2222
2323multiclass ZALoad<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
24- let SMETargetGuard = "sme" in {
25- def NAME # _H : MInst<"svld1_hor_" # n_suffix, "vimPQ", t,
26- [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
27- MemEltTyDefault, i_prefix # "_horiz", ch>;
28-
29- def NAME # _H_VNUM : MInst<"svld1_hor_vnum_" # n_suffix, "vimPQl", t,
30- [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
31- MemEltTyDefault, i_prefix # "_horiz", ch>;
32-
33- def NAME # _V : MInst<"svld1_ver_" # n_suffix, "vimPQ", t,
34- [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
35- MemEltTyDefault, i_prefix # "_vert", ch>;
36-
37- def NAME # _V_VNUM : MInst<"svld1_ver_vnum_" # n_suffix, "vimPQl", t,
38- [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
39- MemEltTyDefault, i_prefix # "_vert", ch>;
40- }
24+ def NAME # _H : MInst<"svld1_hor_" # n_suffix, "vimPQ", t,
25+ [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
26+ MemEltTyDefault, i_prefix # "_horiz", ch>;
27+
28+ def NAME # _H_VNUM : MInst<"svld1_hor_vnum_" # n_suffix, "vimPQl", t,
29+ [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
30+ MemEltTyDefault, i_prefix # "_horiz", ch>;
31+
32+ def NAME # _V : MInst<"svld1_ver_" # n_suffix, "vimPQ", t,
33+ [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
34+ MemEltTyDefault, i_prefix # "_vert", ch>;
35+
36+ def NAME # _V_VNUM : MInst<"svld1_ver_vnum_" # n_suffix, "vimPQl", t,
37+ [IsLoad, IsOverloadNone, IsStreaming, IsInOutZA],
38+ MemEltTyDefault, i_prefix # "_vert", ch>;
4139}
4240
4341defm SVLD1_ZA8 : ZALoad<"za8", "c", "aarch64_sme_ld1b", [ImmCheck<0, ImmCheck0_0>]>;
@@ -46,37 +44,33 @@ defm SVLD1_ZA32 : ZALoad<"za32", "i", "aarch64_sme_ld1w", [ImmCheck<0, ImmCheck0
4644defm SVLD1_ZA64 : ZALoad<"za64", "l", "aarch64_sme_ld1d", [ImmCheck<0, ImmCheck0_7>]>;
4745defm SVLD1_ZA128 : ZALoad<"za128", "q", "aarch64_sme_ld1q", [ImmCheck<0, ImmCheck0_15>]>;
4846
49- let SMETargetGuard = "sme" in {
5047def SVLDR_VNUM_ZA : MInst<"svldr_vnum_za", "vmQl", "",
5148 [IsOverloadNone, IsStreamingCompatible, IsInOutZA],
5249 MemEltTyDefault, "aarch64_sme_ldr">;
5350
5451def SVLDR_ZA : MInst<"svldr_za", "vmQ", "",
5552 [IsOverloadNone, IsStreamingCompatible, IsInOutZA],
5653 MemEltTyDefault, "aarch64_sme_ldr", []>;
57- }
5854
5955////////////////////////////////////////////////////////////////////////////////
6056// Stores
6157
6258multiclass ZAStore<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
63- let SMETargetGuard = "sme" in {
64- def NAME # _H : MInst<"svst1_hor_" # n_suffix, "vimP%", t,
65- [IsStore, IsOverloadNone, IsStreaming, IsInZA],
66- MemEltTyDefault, i_prefix # "_horiz", ch>;
67-
68- def NAME # _H_VNUM : MInst<"svst1_hor_vnum_" # n_suffix, "vimP%l", t,
69- [IsStore, IsOverloadNone, IsStreaming, IsInZA],
70- MemEltTyDefault, i_prefix # "_horiz", ch>;
71-
72- def NAME # _V : MInst<"svst1_ver_" # n_suffix, "vimP%", t,
73- [IsStore, IsOverloadNone, IsStreaming, IsInZA],
74- MemEltTyDefault, i_prefix # "_vert", ch>;
75-
76- def NAME # _V_VNUM : MInst<"svst1_ver_vnum_" # n_suffix, "vimP%l", t,
77- [IsStore, IsOverloadNone, IsStreaming, IsInZA],
78- MemEltTyDefault, i_prefix # "_vert", ch>;
79- }
59+ def NAME # _H : MInst<"svst1_hor_" # n_suffix, "vimP%", t,
60+ [IsStore, IsOverloadNone, IsStreaming, IsInZA],
61+ MemEltTyDefault, i_prefix # "_horiz", ch>;
62+
63+ def NAME # _H_VNUM : MInst<"svst1_hor_vnum_" # n_suffix, "vimP%l", t,
64+ [IsStore, IsOverloadNone, IsStreaming, IsInZA],
65+ MemEltTyDefault, i_prefix # "_horiz", ch>;
66+
67+ def NAME # _V : MInst<"svst1_ver_" # n_suffix, "vimP%", t,
68+ [IsStore, IsOverloadNone, IsStreaming, IsInZA],
69+ MemEltTyDefault, i_prefix # "_vert", ch>;
70+
71+ def NAME # _V_VNUM : MInst<"svst1_ver_vnum_" # n_suffix, "vimP%l", t,
72+ [IsStore, IsOverloadNone, IsStreaming, IsInZA],
73+ MemEltTyDefault, i_prefix # "_vert", ch>;
8074}
8175
8276defm SVST1_ZA8 : ZAStore<"za8", "c", "aarch64_sme_st1b", [ImmCheck<0, ImmCheck0_0>]>;
@@ -85,29 +79,25 @@ defm SVST1_ZA32 : ZAStore<"za32", "i", "aarch64_sme_st1w", [ImmCheck<0, ImmCheck
8579defm SVST1_ZA64 : ZAStore<"za64", "l", "aarch64_sme_st1d", [ImmCheck<0, ImmCheck0_7>]>;
8680defm SVST1_ZA128 : ZAStore<"za128", "q", "aarch64_sme_st1q", [ImmCheck<0, ImmCheck0_15>]>;
8781
88- let SMETargetGuard = "sme" in {
8982def SVSTR_VNUM_ZA : MInst<"svstr_vnum_za", "vm%l", "",
9083 [IsOverloadNone, IsStreamingCompatible, IsInZA],
9184 MemEltTyDefault, "aarch64_sme_str">;
9285
9386def SVSTR_ZA : MInst<"svstr_za", "vm%", "",
9487 [IsOverloadNone, IsStreamingCompatible, IsInZA],
9588 MemEltTyDefault, "aarch64_sme_str", []>;
96- }
9789
9890////////////////////////////////////////////////////////////////////////////////
9991// Read horizontal/vertical ZA slices
10092
10193multiclass ZARead<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
102- let SMETargetGuard = "sme" in {
103- def NAME # _H : SInst<"svread_hor_" # n_suffix # "[_{d}]", "ddPim", t,
104- MergeOp1, i_prefix # "_horiz",
105- [IsReadZA, IsStreaming, IsInZA], ch>;
106-
107- def NAME # _V : SInst<"svread_ver_" # n_suffix # "[_{d}]", "ddPim", t,
108- MergeOp1, i_prefix # "_vert",
109- [IsReadZA, IsStreaming, IsInZA], ch>;
110- }
94+ def NAME # _H : SInst<"svread_hor_" # n_suffix # "[_{d}]", "ddPim", t,
95+ MergeOp1, i_prefix # "_horiz",
96+ [IsReadZA, IsStreaming, IsInZA], ch>;
97+
98+ def NAME # _V : SInst<"svread_ver_" # n_suffix # "[_{d}]", "ddPim", t,
99+ MergeOp1, i_prefix # "_vert",
100+ [IsReadZA, IsStreaming, IsInZA], ch>;
111101}
112102
113103defm SVREAD_ZA8 : ZARead<"za8", "cUcm", "aarch64_sme_read", [ImmCheck<2, ImmCheck0_0>]>;
@@ -120,15 +110,13 @@ defm SVREAD_ZA128 : ZARead<"za128", "csilUcUsUiUlmhbfd", "aarch64_sme_readq", [I
120110// Write horizontal/vertical ZA slices
121111
122112multiclass ZAWrite<string n_suffix, string t, string i_prefix, list<ImmCheck> ch> {
123- let SMETargetGuard = "sme" in {
124- def NAME # _H : SInst<"svwrite_hor_" # n_suffix # "[_{d}]", "vimPd", t,
125- MergeOp1, i_prefix # "_horiz",
126- [IsWriteZA, IsStreaming, IsInOutZA], ch>;
127-
128- def NAME # _V : SInst<"svwrite_ver_" # n_suffix # "[_{d}]", "vimPd", t,
129- MergeOp1, i_prefix # "_vert",
130- [IsWriteZA, IsStreaming, IsInOutZA], ch>;
131- }
113+ def NAME # _H : SInst<"svwrite_hor_" # n_suffix # "[_{d}]", "vimPd", t,
114+ MergeOp1, i_prefix # "_horiz",
115+ [IsWriteZA, IsStreaming, IsInOutZA], ch>;
116+
117+ def NAME # _V : SInst<"svwrite_ver_" # n_suffix # "[_{d}]", "vimPd", t,
118+ MergeOp1, i_prefix # "_vert",
119+ [IsWriteZA, IsStreaming, IsInOutZA], ch>;
132120}
133121
134122defm SVWRITE_ZA8 : ZAWrite<"za8", "cUcm", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_0>]>;
@@ -140,13 +128,11 @@ defm SVWRITE_ZA128 : ZAWrite<"za128", "csilUcUsUiUlmhbfd", "aarch64_sme_writeq",
140128////////////////////////////////////////////////////////////////////////////////
141129// SME - Zero
142130
143- let SMETargetGuard = "sme" in {
144- def SVZERO_MASK_ZA : SInst<"svzero_mask_za", "vi", "", MergeNone, "aarch64_sme_zero",
145- [IsOverloadNone, IsStreamingCompatible, IsInOutZA],
146- [ImmCheck<0, ImmCheck0_255>]>;
147- def SVZERO_ZA : SInst<"svzero_za", "vv", "", MergeNone, "aarch64_sme_zero",
148- [IsOverloadNone, IsStreamingCompatible, IsOutZA]>;
149- }
131+ def SVZERO_MASK_ZA : SInst<"svzero_mask_za", "vi", "", MergeNone, "aarch64_sme_zero",
132+ [IsOverloadNone, IsStreamingCompatible, IsInOutZA],
133+ [ImmCheck<0, ImmCheck0_255>]>;
134+ def SVZERO_ZA : SInst<"svzero_za", "vv", "", MergeNone, "aarch64_sme_zero",
135+ [IsOverloadNone, IsStreamingCompatible, IsOutZA]>;
150136
151137let SMETargetGuard = "sme2p1" in {
152138 def SVZERO_ZA64_VG1x2 : SInst<"svzero_za64_vg1x2", "vm", "", MergeNone, "aarch64_sme_zero_za64_vg1x2",
@@ -171,11 +157,9 @@ let SMETargetGuard = "sme2p1" in {
171157// SME - Counting elements in a streaming vector
172158
173159multiclass ZACount<string n_suffix> {
174- let SMETargetGuard = "sme" in {
175- def NAME : SInst<"sv" # n_suffix, "nv", "", MergeNone,
176- "aarch64_sme_" # n_suffix,
177- [IsOverloadNone, IsStreamingCompatible]>;
178- }
160+ def NAME : SInst<"sv" # n_suffix, "nv", "", MergeNone,
161+ "aarch64_sme_" # n_suffix,
162+ [IsOverloadNone, IsStreamingCompatible]>;
179163}
180164
181165defm SVCNTSB : ZACount<"cntsb">;
@@ -187,11 +171,9 @@ defm SVCNTSD : ZACount<"cntsd">;
187171// SME - ADDHA/ADDVA
188172
189173multiclass ZAAdd<string n_suffix> {
190- let SMETargetGuard = "sme" in {
191- def NAME # _ZA32: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPd", "iUi", MergeOp1,
192- "aarch64_sme_" # n_suffix, [IsStreaming, IsInOutZA],
193- [ImmCheck<0, ImmCheck0_3>]>;
194- }
174+ def NAME # _ZA32: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPd", "iUi", MergeOp1,
175+ "aarch64_sme_" # n_suffix, [IsStreaming, IsInOutZA],
176+ [ImmCheck<0, ImmCheck0_3>]>;
195177
196178 let SMETargetGuard = "sme-i16i64" in {
197179 def NAME # _ZA64: SInst<"sv" # n_suffix # "_za64[_{d}]", "viPPd", "lUl", MergeOp1,
@@ -207,13 +189,11 @@ defm SVADDVA : ZAAdd<"addva">;
207189// SME - SMOPA, SMOPS, UMOPA, UMOPS
208190
209191multiclass ZAIntOuterProd<string n_suffix1, string n_suffix2> {
210- let SMETargetGuard = "sme" in {
211- def NAME # _ZA32_B: SInst<"sv" # n_suffix2 # "_za32[_{d}]",
212- "viPPdd", !cond(!eq(n_suffix1, "s") : "", true: "U") # "c",
213- MergeOp1, "aarch64_sme_" # n_suffix1 # n_suffix2 # "_wide",
214- [IsStreaming, IsInOutZA],
215- [ImmCheck<0, ImmCheck0_3>]>;
216- }
192+ def NAME # _ZA32_B: SInst<"sv" # n_suffix2 # "_za32[_{d}]",
193+ "viPPdd", !cond(!eq(n_suffix1, "s") : "", true: "U") # "c",
194+ MergeOp1, "aarch64_sme_" # n_suffix1 # n_suffix2 # "_wide",
195+ [IsStreaming, IsInOutZA],
196+ [ImmCheck<0, ImmCheck0_3>]>;
217197
218198 let SMETargetGuard = "sme-i16i64" in {
219199 def NAME # _ZA64_H: SInst<"sv" # n_suffix2 # "_za64[_{d}]",
@@ -233,14 +213,12 @@ defm SVUMOPS : ZAIntOuterProd<"u", "mops">;
233213// SME - SUMOPA, SUMOPS, USMOPA, USMOPS
234214
235215multiclass ZAIntOuterProdMixedSigns<string n_suffix1, string n_suffix2> {
236- let SMETargetGuard = "sme" in {
237- def NAME # _ZA32_B: SInst<"sv" # n_suffix1 # n_suffix2 # "_za32[_{d}]",
238- "viPPd" # !cond(!eq(n_suffix1, "su") : "u", true: "x"),
239- !cond(!eq(n_suffix1, "su") : "", true: "U") # "c",
240- MergeOp1, "aarch64_sme_" # n_suffix1 # n_suffix2 # "_wide",
241- [IsStreaming, IsInOutZA],
242- [ImmCheck<0, ImmCheck0_3>]>;
243- }
216+ def NAME # _ZA32_B: SInst<"sv" # n_suffix1 # n_suffix2 # "_za32[_{d}]",
217+ "viPPd" # !cond(!eq(n_suffix1, "su") : "u", true: "x"),
218+ !cond(!eq(n_suffix1, "su") : "", true: "U") # "c",
219+ MergeOp1, "aarch64_sme_" # n_suffix1 # n_suffix2 # "_wide",
220+ [IsStreaming, IsInOutZA],
221+ [ImmCheck<0, ImmCheck0_3>]>;
244222
245223 let SMETargetGuard = "sme-i16i64" in {
246224 def NAME # _ZA64_H: SInst<"sv" # n_suffix1 # n_suffix2 # "_za64[_{d}]",
@@ -261,22 +239,20 @@ defm SVUSMOPS : ZAIntOuterProdMixedSigns<"us", "mops">;
261239// SME - FMOPA, FMOPS
262240
263241multiclass ZAFPOuterProd<string n_suffix> {
264- let SMETargetGuard = "sme" in {
265- def NAME # _ZA32_B: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "h",
266- MergeOp1, "aarch64_sme_" # n_suffix # "_wide",
267- [IsStreaming, IsInOutZA],
268- [ImmCheck<0, ImmCheck0_3>]>;
242+ def NAME # _ZA32_B: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "h",
243+ MergeOp1, "aarch64_sme_" # n_suffix # "_wide",
244+ [IsStreaming, IsInOutZA],
245+ [ImmCheck<0, ImmCheck0_3>]>;
269246
270- def NAME # _ZA32_H: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "b",
271- MergeOp1, "aarch64_sme_" # n_suffix # "_wide",
272- [IsStreaming, IsInOutZA],
273- [ImmCheck<0, ImmCheck0_3>]>;
247+ def NAME # _ZA32_H: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "b",
248+ MergeOp1, "aarch64_sme_" # n_suffix # "_wide",
249+ [IsStreaming, IsInOutZA],
250+ [ImmCheck<0, ImmCheck0_3>]>;
274251
275- def NAME # _ZA32_S: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "f",
276- MergeOp1, "aarch64_sme_" # n_suffix,
277- [IsStreaming, IsInOutZA],
278- [ImmCheck<0, ImmCheck0_3>]>;
279- }
252+ def NAME # _ZA32_S: SInst<"sv" # n_suffix # "_za32[_{d}]", "viPPdd", "f",
253+ MergeOp1, "aarch64_sme_" # n_suffix,
254+ [IsStreaming, IsInOutZA],
255+ [ImmCheck<0, ImmCheck0_3>]>;
280256
281257 let SMETargetGuard = "sme-f64f64" in {
282258 def NAME # _ZA64_D: SInst<"sv" # n_suffix # "_za64[_{d}]", "viPPdd", "d",
0 commit comments