@@ -621,6 +621,67 @@ foreach mx = SchedMxListFWRed in {
621621 }
622622}
623623
624+ // Vector Mask Instructions
625+ foreach mx = SchedMxList in {
626+ defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
627+ let Latency = 1 in {
628+ defm "" : LMULWriteResMX<"WriteVMALUV", [AscalonV], mx, IsWorstCase>;
629+ defm "" : LMULWriteResMX<"WriteVMSFSV", [AscalonV], mx, IsWorstCase>;
630+ }
631+ let Latency = 2, ReleaseAtCycles = [1, 2] in {
632+ defm "" : LMULWriteResMX<"WriteVMPopV", [AscalonFX, AscalonV], mx, IsWorstCase>;
633+ defm "" : LMULWriteResMX<"WriteVMFFSV", [AscalonFX, AscalonV], mx, IsWorstCase>;
634+ }
635+ }
636+ foreach mx = SchedMxList in {
637+ defvar Cycles = AscalonGetCyclesDefault<mx>.c;
638+ defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
639+ let Latency = Cycles, ReleaseAtCycles = [1, !sub(Cycles, 1)] in {
640+ defm "" : LMULWriteResMX<"WriteVIotaV", [AscalonFX, AscalonV], mx, IsWorstCase>;
641+ defm "" : LMULWriteResMX<"WriteVIdxV", [AscalonFX, AscalonV], mx, IsWorstCase>;
642+ }
643+ }
644+
645+ // Vector Permutation Instructions
646+ let Latency = 2, ReleaseAtCycles = [1, 2] in {
647+ def : WriteRes<WriteVMovSX, [AscalonFX, AscalonV]>;
648+ def : WriteRes<WriteVMovXS, [AscalonFX, AscalonV]>;
649+ def : WriteRes<WriteVMovSF, [AscalonFX, AscalonV]>;
650+ def : WriteRes<WriteVMovFS, [AscalonFX, AscalonV]>;
651+ }
652+ foreach mx = SchedMxList in {
653+ defvar Cycles = AscalonGetCyclesDefault<mx>.c;
654+ defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
655+ let Latency = !mul(Cycles, 2), ReleaseAtCycles = [Cycles, !mul(Cycles, 2)] in {
656+ defm "" : LMULWriteResMX<"WriteVRGatherVX", [AscalonFX, AscalonV], mx, IsWorstCase>;
657+ defm "" : LMULWriteResMX<"WriteVRGatherVI", [AscalonFX, AscalonV], mx, IsWorstCase>;
658+ }
659+ }
660+
661+ foreach mx = SchedMxList in {
662+ foreach sew = SchedSEWSet<mx>.val in {
663+ defvar Cycles = AscalonGetCyclesVRGatherVV<mx>.c;
664+ defvar IsWorstCase = AscalonIsWorstCaseMXSEW<mx, sew, SchedMxList>.c;
665+ let Latency = !add(Cycles, 3), ReleaseAtCycles = [1, !add(1, Cycles)] in {
666+ defm "" : LMULSEWWriteResMXSEW<"WriteVRGatherVV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
667+ defm "" : LMULSEWWriteResMXSEW<"WriteVRGatherEI16VV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
668+ defm "" : LMULSEWWriteResMXSEW<"WriteVCompressV", [AscalonFX, AscalonV], mx, sew, IsWorstCase>;
669+ }
670+ }
671+ }
672+
673+ foreach mx = SchedMxList in {
674+ defvar Cycles = AscalonGetCyclesDefault<mx>.c;
675+ defvar IsWorstCase = AscalonIsWorstCaseMX<mx, SchedMxList>.c;
676+ let Latency = 4, AcquireAtCycles = [0, 1], ReleaseAtCycles = [1, !add(1, Cycles)] in {
677+ defm "" : LMULWriteResMX<"WriteVSlideUpX", [AscalonFX, AscalonV], mx, IsWorstCase>;
678+ defm "" : LMULWriteResMX<"WriteVSlideDownX", [AscalonFX, AscalonV], mx, IsWorstCase>;
679+ defm "" : LMULWriteResMX<"WriteVSlideI", [AscalonFX, AscalonV], mx, IsWorstCase>;
680+ defm "" : LMULWriteResMX<"WriteVISlide1X", [AscalonFX, AscalonV], mx, IsWorstCase>;
681+ defm "" : LMULWriteResMX<"WriteVFSlide1F", [AscalonFX, AscalonV], mx, IsWorstCase>;
682+ }
683+ }
684+
624685//===----------------------------------------------------------------------===//
625686// Unsupported extensions
626687defm : UnsupportedSchedQ;
0 commit comments