@@ -302,46 +302,39 @@ defm SVSUB : ZAAddSub<"sub">;
302
302
// SME2 - MOVA
303
303
304
304
//
305
- // 2 and 4 vector-group read/write intrinsics.
305
+ // Single, 2 and 4 vector-group read/write intrinsics.
306
306
//
307
307
308
- multiclass WriteHV_VG <string n, string t, string i, list<ImmCheck> checks> {
309
- let TargetGuard = "sme2" in {
310
- def NAME # _VG2_H : Inst<"svwrite_hor_ " # n # "_vg2", "vim2", t, MergeNone, i # "_hor_vg2 ", [IsSharedZA, IsStreaming], checks>;
311
- def NAME # _VG2_V : Inst<"svwrite_ver_ " # n # "_vg2 ", "vim2 ", t, MergeNone, i # "_ver_vg2 ", [IsSharedZA, IsStreaming], checks>;
312
- def NAME # _VG4_H : Inst<"svwrite_hor_ " # n # "_vg4", "vim4", t, MergeNone, i # "_hor_vg4 ", [IsSharedZA, IsStreaming], checks>;
313
- def NAME # _VG4_V : Inst<"svwrite_ver_" # n # "_vg4 ", "vim4 ", t, MergeNone, i # "_ver_vg4 ", [IsSharedZA, IsStreaming], checks >;
314
- }
308
+ multiclass ZAWrite_VG <string n, string t, string i, list<ImmCheck> checks> {
309
+ def NAME # _VG2_H : Inst<"svwrite_hor_" # n # "_vg2", "vim2", t, MergeNone, i # "_hor_vg2", [IsSharedZA, IsStreaming], checks>;
310
+ def NAME # _VG2_V : Inst<"svwrite_ver_ " # n # "_vg2", "vim2", t, MergeNone, i # "_ver_vg2 ", [IsSharedZA, IsStreaming], checks>;
311
+ def NAME # _VG4_H : Inst<"svwrite_hor_ " # n # "_vg4 ", "vim4 ", t, MergeNone, i # "_hor_vg4 ", [IsSharedZA, IsStreaming], checks>;
312
+ def NAME # _VG4_V : Inst<"svwrite_ver_ " # n # "_vg4", "vim4", t, MergeNone, i # "_ver_vg4 ", [IsSharedZA, IsStreaming], checks>;
313
+ def NAME # _VG1x2 : Inst<"svwrite_" # n # "_vg1x2 ", "vm2 ", t, MergeNone, i # "_vg1x2 ", [IsSharedZA, IsStreaming], [] >;
314
+ def NAME # _VG1x4 : Inst<"svwrite_" # n # "_vg1x4", "vm4", t, MergeNone, i # "_vg1x4", [IsSharedZA, IsStreaming], []>;
315
315
}
316
316
317
- defm SVWRITE_ZA8 : WriteHV_VG<"za8[_{d}]", "cUc", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_0>]>;
318
- defm SVWRITE_ZA16 : WriteHV_VG<"za16[_{d}]", "sUshb", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_1>]>;
319
- defm SVWRITE_ZA32 : WriteHV_VG<"za32[_{d}]", "iUif", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_3>]>;
320
- defm SVWRITE_ZA64 : WriteHV_VG<"za64[_{d}]", "lUld", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_7>]>;
321
-
322
- multiclass ReadHV_VG<string n, string t, string i, list<ImmCheck> checks> {
323
- let TargetGuard = "sme2" in {
324
- def NAME # _VG2_H : Inst<"svread_hor_" # n # "_vg2", "2im", t, MergeNone, i # "_hor_vg2", [IsSharedZA, IsPreservesZA, IsStreaming], checks>;
325
- def NAME # _VG2_V : Inst<"svread_ver_" # n # "_vg2", "2im", t, MergeNone, i # "_ver_vg2", [IsSharedZA, IsPreservesZA, IsStreaming], checks>;
326
- def NAME # _VG4_H : Inst<"svread_hor_" # n # "_vg4", "4im", t, MergeNone, i # "_hor_vg4", [IsSharedZA, IsPreservesZA, IsStreaming], checks>;
327
- def NAME # _VG4_V : Inst<"svread_ver_" # n # "_vg4", "4im", t, MergeNone, i # "_ver_vg4", [IsSharedZA, IsPreservesZA, IsStreaming], checks>;
328
- }
317
+ let TargetGuard = "sme2" in {
318
+ defm SVWRITE_ZA8 : ZAWrite_VG<"za8[_{d}]", "cUc", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_0>]>;
319
+ defm SVWRITE_ZA16 : ZAWrite_VG<"za16[_{d}]", "sUshb", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_1>]>;
320
+ defm SVWRITE_ZA32 : ZAWrite_VG<"za32[_{d}]", "iUif", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_3>]>;
321
+ defm SVWRITE_ZA64 : ZAWrite_VG<"za64[_{d}]", "lUld", "aarch64_sme_write", [ImmCheck<0, ImmCheck0_7>]>;
329
322
}
330
323
331
- defm SVREAD_ZA8 : ReadHV_VG<"za8_{d}", "cUc", "aarch64_sme_read", [ImmCheck<0, ImmCheck0_0>]>;
332
- defm SVREAD_ZA16 : ReadHV_VG<"za16_{d}", "sUshb ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_1>] >;
333
- defm SVREAD_ZA32 : ReadHV_VG<"za32_{d}", "iUif ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_3>] >;
334
- defm SVREAD_ZA64 : ReadHV_VG<"za64_{d}", "lUld ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_7>] >;
335
-
336
- //
337
- // Single vector-group read/write intrinsics.
338
- //
324
+ multiclass ZARead_VG<string n, string t, string i, list<ImmCheck> checks> {
325
+ def NAME # _VG2_H : Inst<"svread_hor_" # n # "_vg2", "2im ", t, MergeNone, i # "_hor_vg2 ", [IsSharedZA, IsPreservesZA, IsStreaming], checks >;
326
+ def NAME # _VG2_V : Inst<"svread_ver_" # n # "_vg2", "2im ", t, MergeNone, i # "_ver_vg2 ", [IsSharedZA, IsPreservesZA, IsStreaming], checks >;
327
+ def NAME # _VG4_H : Inst<"svread_hor_" # n # "_vg4", "4im ", t, MergeNone, i # "_hor_vg4 ", [IsSharedZA, IsPreservesZA, IsStreaming], checks >;
328
+ def NAME # _VG4_V : Inst<"svread_ver_" # n # "_vg4", "4im", t, MergeNone, i # "_ver_vg4", [IsSharedZA, IsPreservesZA, IsStreaming], checks>;
329
+ def NAME # _VG1x2 : Inst<"svread_" # n # "_vg1x2", "2m", t, MergeNone, i # "_vg1x2", [IsSharedZA, IsPreservesZA, IsStreaming], []>;
330
+ def NAME # _VG1x4 : Inst<"svread_" # n # "_vg1x4", "4m", t, MergeNone, i # "_vg1x4", [IsSharedZA, IsPreservesZA, IsStreaming], []>;
331
+ }
339
332
340
333
let TargetGuard = "sme2" in {
341
- def SVWRITE_ZA64_VG1x2 : Inst<"svwrite_za64[_ {d}]_vg1x2 ", "vm2", "lUld ", MergeNone, "aarch64_sme_write_vg1x2 ", [IsSharedZA, IsStreaming], [ ]>;
342
- def SVWRITE_ZA64_VG1x4 : Inst<"svwrite_za64[_ {d}]_vg1x4 ", "vm4 ", "lUld ", MergeNone, "aarch64_sme_write_vg1x4", [IsSharedZA, IsStreaming], [ ]>;
343
- def SVREAD_ZA64_VG1x2 : Inst<"svread_za64_ {d}_vg1x2 ", "2m ", "lUld ", MergeNone, "aarch64_sme_read_vg1x2", [IsSharedZA, IsPreservesZA, IsStreaming], [ ]>;
344
- def SVREAD_ZA64_VG1x4 : Inst<"svread_za64_ {d}_vg1x4 ", "4m", " lUld", MergeNone, "aarch64_sme_read_vg1x4 ", [IsSharedZA, IsPreservesZA, IsStreaming], [ ]>;
334
+ defm SVREAD_ZA8 : ZARead_VG<"za8_ {d}", "cUc ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_0> ]>;
335
+ defm SVREAD_ZA16 : ZARead_VG<"za16_ {d}", "sUshb ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_1> ]>;
336
+ defm SVREAD_ZA32 : ZARead_VG<"za32_ {d}", "iUif ", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_3> ]>;
337
+ defm SVREAD_ZA64 : ZARead_VG<"za64_ {d}", " lUld", "aarch64_sme_read ", [ImmCheck<0, ImmCheck0_7> ]>;
345
338
}
346
339
347
340
//
0 commit comments