diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -98,6 +98,46 @@ // Scheduling definitions. //===----------------------------------------------------------------------===// +class SchedNary reads, + string mx, int sew = 0, bit maskedOnly = 0>: Sched<[]> { + defvar WriteList = [!cast( + !if(sew, write # "_" # mx # "_E" # sew, + write # "_" # mx))]; + defvar ReadList = !foreach(read, reads, + !cast( + !if(sew, read # "_" # mx # "_E" # sew, + read # "_" # mx))); + defvar IsMasked = !ne(!find(NAME, "_MASK"), -1); + defvar AddReadVMask = !or(maskedOnly, IsMasked); + let SchedRW = !listconcat(WriteList, ReadList, + !if(AddReadVMask, [ReadVMask], [])); +} + +class SchedNullary: + SchedNary; + +class SchedUnary: + SchedNary; + +class SchedBinary: + SchedNary; + +class SchedTernary: + SchedNary; + +class SchedReduction: Sched<[]> { + defvar Write = !cast(write # "_" # mx # "_E" # sew); + defvar Read = !cast(read); + defvar IsMasked = !ne(!find(NAME, "_MASK"), -1); + defvar WriteList = [Write]; + defvar ReadList = [Read, Read, Read]; + let SchedRW = !listconcat(WriteList, ReadList, + !if(IsMasked, [ReadVMask], [])); +} + class VMVRSched : Sched<[ !cast("WriteVMov" #n #"V"), !cast("ReadVMov" #n #"V") diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td @@ -1871,13 +1871,11 @@ multiclass VPseudoVPOP_M { foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMPopV_MX = !cast("WriteVMPopV_" # mx); - defvar ReadVMPopV_MX = !cast("ReadVMPopV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMaskGPROut, - Sched<[WriteVMPopV_MX, ReadVMPopV_MX, ReadVMPopV_MX]>; + SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut, - Sched<[WriteVMPopV_MX, ReadVMPopV_MX, ReadVMPopV_MX]>; + SchedBinary<"WriteVMPopV", "ReadVMPopV", "ReadVMPopV", mx>; } } } @@ -1885,13 +1883,11 @@ multiclass VPseudoV1ST_M { foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMFFSV_MX = !cast("WriteVMFFSV_" # mx); - defvar ReadVMFFSV_MX = !cast("ReadVMFFSV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMaskGPROut, - Sched<[WriteVMFFSV_MX, ReadVMFFSV_MX, ReadVMFFSV_MX]>; + SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMaskGPROut, - Sched<[WriteVMFFSV_MX, ReadVMFFSV_MX, ReadVMFFSV_MX]>; + SchedBinary<"WriteVMFFSV", "ReadVMFFSV", "ReadVMFFSV", mx>; } } } @@ -1900,13 +1896,11 @@ defvar constraint = "@earlyclobber $rd"; foreach mti = AllMasks in { defvar mx = mti.LMul.MX; - defvar WriteVMSFSV_MX = !cast("WriteVMSFSV_" # mx); - defvar ReadVMSFSV_MX = !cast("ReadVMSFSV_" # mx); let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoUnaryNoMask, - Sched<[WriteVMSFSV_MX, ReadVMSFSV_MX, ReadVMask]>; + SchedUnary<"WriteVMSFSV", "ReadVMSFSV", mx>; def "_M_" # mti.BX # "_MASK" : VPseudoUnaryMask, - Sched<[WriteVMSFSV_MX, ReadVMSFSV_MX, ReadVMask]>; + SchedUnary<"WriteVMSFSV", "ReadVMSFSV", mx>; } } } @@ -1914,28 +1908,21 @@ multiclass VPseudoVID_V { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMIdxV_MX = !cast("WriteVMIdxV_" # mx); - defvar ReadVMIdxV_MX = !cast("ReadVMIdxV_" # mx); - let VLMul = m.value in { - def "_V_" # m.MX : VPseudoNullaryNoMask, - Sched<[WriteVMIdxV_MX, ReadVMask]>; - def "_V_" # m.MX # "_MASK" : VPseudoNullaryMask, + def "_V_" # mx : VPseudoNullaryNoMask, + SchedNullary<"WriteVMIdxV", mx>; + def "_V_" # mx # "_MASK" : VPseudoNullaryMask, RISCVMaskedPseudo, - Sched<[WriteVMIdxV_MX, ReadVMask]>; + SchedNullary<"WriteVMIdxV", mx>; } } } multiclass VPseudoNullaryPseudoM { foreach mti = AllMasks in { - defvar mx = mti.LMul.MX; - defvar WriteVMALUV_MX = !cast("WriteVMALUV_" # mx); - defvar ReadVMALUV_MX = !cast("ReadVMALUV_" # mx); - let VLMul = mti.LMul.value in { def "_M_" # mti.BX : VPseudoNullaryPseudoM, - Sched<[WriteVMALUV_MX, ReadVMALUV_MX, ReadVMALUV_MX]>; + SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mti.LMul.MX>; } } } @@ -1944,14 +1931,12 @@ defvar constraint = "@earlyclobber $rd"; foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMIotV_MX = !cast("WriteVMIotV_" # mx); - defvar ReadVMIotV_MX = !cast("ReadVMIotV_" # mx); let VLMul = m.value in { - def "_" # m.MX : VPseudoUnaryNoMask, - Sched<[WriteVMIotV_MX, ReadVMIotV_MX, ReadVMask]>; - def "_" # m.MX # "_MASK" : VPseudoUnaryMask, + def "_" # mx : VPseudoUnaryNoMask, + SchedUnary<"WriteVMIotV", "ReadVMIotV", mx>; + def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVMIotV_MX, ReadVMIotV_MX, ReadVMask]>; + SchedUnary<"WriteVMIotV", "ReadVMIotV", mx>; } } } @@ -1963,12 +1948,10 @@ let VLMul = m.value in foreach e = sews in { defvar suffix = "_" # m.MX # "_E" # e; - defvar WriteVCompressV_MX_E = !cast("WriteVCompressV" # suffix); - defvar ReadVCompressV_MX_E = !cast("ReadVCompressV" # suffix); - let SEW = e in def _VM # suffix : VPseudoUnaryAnyMask, - Sched<[WriteVCompressV_MX_E, ReadVCompressV_MX_E, ReadVCompressV_MX_E]>; + SchedBinary<"WriteVCompressV", "ReadVCompressV", "ReadVCompressV", + mx, e>; } } } @@ -2098,11 +2081,9 @@ defvar emul = !cast("V_" # emulMX); defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVRGatherVV_MX_E = !cast("WriteVRGatherVV_" # mx # "_E" # e); - defvar ReadVRGatherVV_data_MX_E = !cast("ReadVRGatherVV_data_" # mx # "_E" # e); - defvar ReadVRGatherVV_index_MX_E = !cast("ReadVRGatherVV_index_" # mx # "_E" # e); defm _VV : VPseudoBinaryEmul, - Sched<[WriteVRGatherVV_MX_E, ReadVRGatherVV_data_MX_E, ReadVRGatherVV_index_MX_E]>; + SchedBinary<"WriteVRGatherVV", "ReadVRGatherVV_data", "ReadVRGatherVV_index", + mx, e>; } } } @@ -2119,13 +2100,8 @@ multiclass VPseudoVSLD1_VX { foreach m = MxList in { - defvar mx = m.MX; - defvar WriteVISlide1X_MX = !cast("WriteVISlide1X_" # mx); - defvar ReadVISlideV_MX = !cast("ReadVISlideV_" # mx); - defvar ReadVISlideX_MX = !cast("ReadVISlideX_" # mx); - defm "_VX" : VPseudoBinary, - Sched<[WriteVISlide1X_MX, ReadVISlideV_MX, ReadVISlideX_MX, ReadVMask]>; + SchedBinary<"WriteVISlide1X", "ReadVISlideV", "ReadVISlideX", m.MX>; } } @@ -2143,14 +2119,9 @@ multiclass VPseudoVSLD1_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFSlide1F_MX = !cast("WriteVFSlide1F_" # mx); - defvar ReadVFSlideV_MX = !cast("ReadVFSlideV_" # mx); - defvar ReadVFSlideF_MX = !cast("ReadVFSlideF_" # mx); - defm "_V" # f.FX : VPseudoBinary, - Sched<[WriteVFSlide1F_MX, ReadVFSlideV_MX, ReadVFSlideF_MX, ReadVMask]>; + SchedBinary<"WriteVFSlide1F", "ReadVFSlideV", "ReadVFSlideF", m.MX>; } } } @@ -2166,12 +2137,9 @@ multiclass VPseudoVALU_MM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVMALUV_MX = !cast("WriteVMALUV_" # mx); - defvar ReadVMALUV_MX = !cast("ReadVMALUV_" # mx); - let VLMul = m.value in { def "_MM_" # mx : VPseudoBinaryNoMask, - Sched<[WriteVMALUV_MX, ReadVMALUV_MX, ReadVMALUV_MX]>; + SchedBinary<"WriteVMALUV", "ReadVMALUV", "ReadVMALUV", mx>; } } } @@ -2315,14 +2283,10 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar WriteVFMergeV_MX = !cast("WriteVFMergeV_" # mx); - defvar ReadVFMergeV_MX = !cast("ReadVFMergeV_" # mx); - defvar ReadVFMergeF_MX = !cast("ReadVFMergeF_" # mx); - def "_V" # f.FX # "M_" # mx: VPseudoTiedBinaryCarryIn.R, m.vrclass, f.fprclass, m, CarryIn=1, Constraint="">, - Sched<[WriteVFMergeV_MX, ReadVFMergeV_MX, ReadVFMergeF_MX, ReadVMask]>; + SchedBinary<"WriteVFMergeV", "ReadVFMergeV", "ReadVFMergeF", mx, maskedOnly=1>; } } } @@ -2346,19 +2310,13 @@ foreach m = MxList in { let VLMul = m.value in { defvar mx = m.MX; - defvar WriteVIMovV_MX = !cast("WriteVIMovV_" # mx); - defvar WriteVIMovX_MX = !cast("WriteVIMovX_" # mx); - defvar WriteVIMovI_MX = !cast("WriteVIMovI_" # mx); - defvar ReadVIMovV_MX = !cast("ReadVIMovV_" # mx); - defvar ReadVIMovX_MX = !cast("ReadVIMovX_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovV_MX, ReadVIMovV_MX]>; + SchedUnary<"WriteVIMovV", "ReadVIMovV", mx>; def "_X_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovX_MX, ReadVIMovX_MX]>; + SchedUnary<"WriteVIMovX", "ReadVIMovX", mx>; def "_I_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVIMovI_MX]>; + SchedNullary<"WriteVIMovI", mx>; } } } @@ -2368,13 +2326,10 @@ foreach f = FPList in { foreach m = f.MxList in { defvar mx = m.MX; - defvar WriteVFMovV_MX = !cast("WriteVFMovV_" # mx); - defvar ReadVFMovF_MX = !cast("ReadVFMovF_" # mx); - let VLMul = m.value in { def "_" # f.FX # "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFMovV_MX, ReadVFMovF_MX]>; + SchedUnary<"WriteVFMovV", "ReadVFMovF", mx>; } } } @@ -2383,15 +2338,12 @@ multiclass VPseudoVCLS_V { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFClassV_MX = !cast("WriteVFClassV_" # mx); - defvar ReadVFClassV_MX = !cast("ReadVFClassV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFClassV_MX, ReadVFClassV_MX, ReadVMask]>; + SchedUnary<"WriteVFClassV", "ReadVFClassV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVFClassV_MX, ReadVFClassV_MX, ReadVMask]>; + SchedUnary<"WriteVFClassV", "ReadVFClassV", mx>; } } } @@ -2404,17 +2356,12 @@ let VLMul = m.value in foreach e = sews in { defvar suffix = "_" # mx # "_E" # e; - defvar WriteVFSqrtV_MX_E = !cast("WriteVFSqrtV" # suffix); - defvar ReadVFSqrtV_MX_E = !cast("ReadVFSqrtV" # suffix); - let SEW = e in { def "_V" # suffix : VPseudoUnaryNoMaskRoundingMode, - Sched<[WriteVFSqrtV_MX_E, ReadVFSqrtV_MX_E, - ReadVMask]>; + SchedUnary<"WriteVFSqrtV", "ReadVFSqrtV", mx, e>; def "_V" # suffix # "_MASK" : VPseudoUnaryMaskRoundingMode, RISCVMaskedPseudo, - Sched<[WriteVFSqrtV_MX_E, ReadVFSqrtV_MX_E, - ReadVMask]>; + SchedUnary<"WriteVFSqrtV", "ReadVFSqrtV", mx, e>; } } } @@ -2423,15 +2370,12 @@ multiclass VPseudoVRCP_V { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFRecpV_MX = !cast("WriteVFRecpV_" # mx); - defvar ReadVFRecpV_MX = !cast("ReadVFRecpV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; } } } @@ -2439,15 +2383,12 @@ multiclass VPseudoVRCP_V_RM { foreach m = MxListF in { defvar mx = m.MX; - defvar WriteVFRecpV_MX = !cast("WriteVFRecpV_" # mx); - defvar ReadVFRecpV_MX = !cast("ReadVFRecpV_" # mx); - let VLMul = m.value in { def "_V_" # mx : VPseudoUnaryNoMaskRoundingMode, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; def "_V_" # mx # "_MASK" : VPseudoUnaryMaskRoundingMode, RISCVMaskedPseudo, - Sched<[WriteVFRecpV_MX, ReadVFRecpV_MX, ReadVMask]>; + SchedUnary<"WriteVFRecpV", "ReadVFRecpV", mx>; } } } @@ -2456,16 +2397,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF2 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2474,16 +2412,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF4 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2492,16 +2427,13 @@ defvar constraints = "@earlyclobber $rd"; foreach m = MxListVF8 in { defvar mx = m.MX; - defvar WriteVExtV_MX = !cast("WriteVExtV_" # mx); - defvar ReadVExtV_MX = !cast("ReadVExtV_" # mx); - let VLMul = m.value in { def "_" # mx : VPseudoUnaryNoMask, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; def "_" # mx # "_MASK" : VPseudoUnaryMask, RISCVMaskedPseudo, - Sched<[WriteVExtV_MX, ReadVExtV_MX, ReadVMask]>; + SchedUnary<"WriteVExtV", "ReadVExtV", mx>; } } } @@ -2542,26 +2474,17 @@ multiclass VPseudoVGTR_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVRGatherVX_MX = !cast("WriteVRGatherVX_" # mx); - defvar WriteVRGatherVI_MX = !cast("WriteVRGatherVI_" # mx); - defvar ReadVRGatherVX_data_MX = !cast("ReadVRGatherVX_data_" # mx); - defvar ReadVRGatherVX_index_MX = !cast("ReadVRGatherVX_index_" # mx); - defvar ReadVRGatherVI_data_MX = !cast("ReadVRGatherVI_data_" # mx); - defm "" : VPseudoBinaryV_VX, - Sched<[WriteVRGatherVX_MX, ReadVRGatherVX_data_MX, - ReadVRGatherVX_index_MX, ReadVMask]>; + SchedBinary<"WriteVRGatherVX", "ReadVRGatherVX_data", + "ReadVRGatherVX_index", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVRGatherVI_MX, ReadVRGatherVI_data_MX, ReadVMask]>; + SchedUnary<"WriteVRGatherVI", "ReadVRGatherVI_data", mx>; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVRGatherVV_MX_E = !cast("WriteVRGatherVV_" # mx # "_E" # e); - defvar ReadVRGatherVV_data_MX_E = !cast("ReadVRGatherVV_data_" # mx # "_E" # e); - defvar ReadVRGatherVV_index_MX_E = !cast("ReadVRGatherVV_index_" # mx # "_E" # e); defm "" : VPseudoBinaryV_VV, - Sched<[WriteVRGatherVV_MX_E, ReadVRGatherVV_data_MX_E, - ReadVRGatherVV_index_MX_E, ReadVMask]>; + SchedBinary<"WriteVRGatherVV", "ReadVRGatherVV_data", + "ReadVRGatherVV_index", mx, e>; } } } @@ -2569,18 +2492,12 @@ multiclass VPseudoVSALU_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSALUV_MX = !cast("WriteVSALUV_" # mx); - defvar WriteVSALUX_MX = !cast("WriteVSALUX_" # mx); - defvar WriteVSALUI_MX = !cast("WriteVSALUI_" # mx); - defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); - defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; + SchedBinary<"WriteVSALUV", "ReadVSALUV", "ReadVSALUX", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; + SchedBinary<"WriteVSALUX", "ReadVSALUV", "ReadVSALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVSALUI_MX, ReadVSALUV_MX, ReadVMask]>; + SchedUnary<"WriteVSALUI", "ReadVSALUV", mx>; } } @@ -2588,129 +2505,86 @@ multiclass VPseudoVSHT_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVShiftV_MX = !cast("WriteVShiftV_" # mx); - defvar WriteVShiftX_MX = !cast("WriteVShiftX_" # mx); - defvar WriteVShiftI_MX = !cast("WriteVShiftI_" # mx); - defvar ReadVShiftV_MX = !cast("ReadVShiftV_" # mx); - defvar ReadVShiftX_MX = !cast("ReadVShiftX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVShiftV_MX, ReadVShiftV_MX, ReadVShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVShiftV", "ReadVShiftV", "ReadVShiftV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVShiftX_MX, ReadVShiftV_MX, ReadVShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVShiftX", "ReadVShiftV", "ReadVShiftX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVShiftI_MX, ReadVShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVShiftI", "ReadVShiftV", mx>; } } multiclass VPseudoVSSHT_VV_VX_VI_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSShiftV_MX = !cast("WriteVSShiftV_" # mx); - defvar WriteVSShiftX_MX = !cast("WriteVSShiftX_" # mx); - defvar WriteVSShiftI_MX = !cast("WriteVSShiftI_" # mx); - defvar ReadVSShiftV_MX = !cast("ReadVSShiftV_" # mx); - defvar ReadVSShiftX_MX = !cast("ReadVSShiftX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVSShiftV_MX, ReadVSShiftV_MX, ReadVSShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVSShiftV", "ReadVSShiftV", "ReadVSShiftV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVSShiftX_MX, ReadVSShiftV_MX, ReadVSShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVSShiftX", "ReadVSShiftV", "ReadVSShiftX", mx>; defm "" : VPseudoBinaryV_VI_RM, - Sched<[WriteVSShiftI_MX, ReadVSShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVSShiftI", "ReadVSShiftV", mx>; } } multiclass VPseudoVALU_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIALUV_MX = !cast("WriteVIALUV_" # mx); - defvar WriteVIALUX_MX = !cast("WriteVIALUX_" # mx); - defvar WriteVIALUI_MX = !cast("WriteVIALUI_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIALUV", "ReadVIALUV", "ReadVIALUV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; + SchedUnary<"WriteVIALUI", "ReadVIALUV", mx>; } } multiclass VPseudoVSALU_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSALUV_MX = !cast("WriteVSALUV_" # mx); - defvar WriteVSALUX_MX = !cast("WriteVSALUX_" # mx); - defvar ReadVSALUV_MX = !cast("ReadVSALUV_" # mx); - defvar ReadVSALUX_MX = !cast("ReadVSALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>; + SchedBinary<"WriteVSALUV", "ReadVSALUV", "ReadVSALUV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>; + SchedBinary<"WriteVSALUX", "ReadVSALUV", "ReadVSALUX", mx>; } } multiclass VPseudoVSMUL_VV_VX_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVSMulV_MX = !cast("WriteVSMulV_" # mx); - defvar WriteVSMulX_MX = !cast("WriteVSMulX_" # mx); - defvar ReadVSMulV_MX = !cast("ReadVSMulV_" # mx); - defvar ReadVSMulX_MX = !cast("ReadVSMulX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVSMulV_MX, ReadVSMulV_MX, ReadVSMulV_MX, ReadVMask]>; + SchedBinary<"WriteVSMulV", "ReadVSMulV", "ReadVSMulV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVSMulX_MX, ReadVSMulV_MX, ReadVSMulX_MX, ReadVMask]>; + SchedBinary<"WriteVSMulX", "ReadVSMulV", "ReadVSMulX", mx>; } } multiclass VPseudoVAALU_VV_VX_RM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVAALUV_MX = !cast("WriteVAALUV_" # mx); - defvar WriteVAALUX_MX = !cast("WriteVAALUX_" # mx); - defvar ReadVAALUV_MX = !cast("ReadVAALUV_" # mx); - defvar ReadVAALUX_MX = !cast("ReadVAALUX_" # mx); - defm "" : VPseudoBinaryV_VV_RM, - Sched<[WriteVAALUV_MX, ReadVAALUV_MX, ReadVAALUV_MX, ReadVMask]>; + SchedBinary<"WriteVAALUV", "ReadVAALUV", "ReadVAALUV", mx>; defm "" : VPseudoBinaryV_VX_RM, - Sched<[WriteVAALUX_MX, ReadVAALUV_MX, ReadVAALUX_MX, ReadVMask]>; + SchedBinary<"WriteVAALUX", "ReadVAALUV", "ReadVAALUX", mx>; } } multiclass VPseudoVMINMAX_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMinMaxV_MX = !cast("WriteVIMinMaxV_" # mx); - defvar WriteVIMinMaxX_MX = !cast("WriteVIMinMaxX_" # mx); - defvar ReadVIMinMaxV_MX = !cast("ReadVIMinMaxV_" # mx); - defvar ReadVIMinMaxX_MX = !cast("ReadVIMinMaxX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIMinMaxV_MX, ReadVIMinMaxV_MX, ReadVIMinMaxV_MX, ReadVMask]>; + SchedBinary<"WriteVIMinMaxV", "ReadVIMinMaxV", "ReadVIMinMaxV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIMinMaxX_MX, ReadVIMinMaxV_MX, ReadVIMinMaxX_MX, ReadVMask]>; + SchedBinary<"WriteVIMinMaxX", "ReadVIMinMaxV", "ReadVIMinMaxX", mx>; } } multiclass VPseudoVMUL_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMulV_MX = !cast("WriteVIMulV_" # mx); - defvar WriteVIMulX_MX = !cast("WriteVIMulX_" # mx); - defvar ReadVIMulV_MX = !cast("ReadVIMulV_" # mx); - defvar ReadVIMulX_MX = !cast("ReadVIMulX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIMulV_MX, ReadVIMulV_MX, ReadVIMulV_MX, ReadVMask]>; + SchedBinary<"WriteVIMulV", "ReadVIMulV", "ReadVIMulV", mx>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIMulX_MX, ReadVIMulV_MX, ReadVIMulX_MX, ReadVMask]>; + SchedBinary<"WriteVIMulX", "ReadVIMulV", "ReadVIMulX", mx>; } } @@ -2719,38 +2593,24 @@ defvar mx = m.MX; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVIDivV_MX_E = !cast("WriteVIDivV_" # mx # "_E" # e); - defvar WriteVIDivX_MX_E = !cast("WriteVIDivX_" # mx # "_E" # e); - defvar ReadVIDivV_MX_E = !cast("ReadVIDivV_" # mx # "_E" # e); - defvar ReadVIDivX_MX_E = !cast("ReadVIDivX_" # mx # "_E" # e); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIDivV_MX_E, ReadVIDivV_MX_E, ReadVIDivV_MX_E, ReadVMask]>; + SchedBinary<"WriteVIDivV", "ReadVIDivV", "ReadVIDivV", mx, e>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIDivX_MX_E, ReadVIDivV_MX_E, ReadVIDivX_MX_E, ReadVMask]>; + SchedBinary<"WriteVIDivX", "ReadVIDivV", "ReadVIDivX", mx, e>; } } } multiclass VPseudoVFMUL_VV_VF_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulV_MX = !cast("WriteVFMulV_" # mx); - defvar ReadVFMulV_MX = !cast("ReadVFMulV_" # mx); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFMulV_MX, ReadVFMulV_MX, ReadVFMulV_MX, ReadVMask]>; + SchedBinary<"WriteVFMulV", "ReadVFMulV", "ReadVFMulV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulF_MX = !cast("WriteVFMulF_" # mx); - defvar ReadVFMulV_MX = !cast("ReadVFMulV_" # mx); - defvar ReadVFMulF_MX = !cast("ReadVFMulF_" # mx); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFMulF_MX, ReadVFMulV_MX, ReadVFMulF_MX, ReadVMask]>; + SchedBinary<"WriteVFMulF", "ReadVFMulV", "ReadVFMulF", m.MX>; } } } @@ -2760,23 +2620,15 @@ defvar mx = m.MX; defvar sews = SchedSEWSet.val; foreach e = sews in { - defvar WriteVFDivV_MX_E = !cast("WriteVFDivV_" # mx # "_E" # e); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # e); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFDivV_MX_E, ReadVFDivV_MX_E, ReadVFDivV_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivV", "ReadVFDivV", "ReadVFDivV", mx, e>; } } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # f.SEW); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # f.SEW); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # f.SEW); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivF", "ReadVFDivV", "ReadVFDivF", m.MX, f.SEW>; } } } @@ -2784,118 +2636,73 @@ multiclass VPseudoVFRDIV_VF_RM { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFDivF_MX_E = !cast("WriteVFDivF_" # mx # "_E" # f.SEW); - defvar ReadVFDivV_MX_E = !cast("ReadVFDivV_" # mx # "_E" # f.SEW); - defvar ReadVFDivF_MX_E = !cast("ReadVFDivF_" # mx # "_E" # f.SEW); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFDivF_MX_E, ReadVFDivV_MX_E, ReadVFDivF_MX_E, ReadVMask]>; + SchedBinary<"WriteVFDivF", "ReadVFDivV", "ReadVFDivF", m.MX, f.SEW>; } } } multiclass VPseudoVALU_VV_VX { foreach m = MxList in { - defvar mx = m.MX; - defvar WriteVIALUV_MX = !cast("WriteVIALUV_" # mx); - defvar WriteVIALUX_MX = !cast("WriteVIALUV_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VV, - Sched<[WriteVIALUV_MX, ReadVIALUV_MX, ReadVIALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIALUV", "ReadVIALUV", "ReadVIALUV", m.MX>; defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUV", "ReadVIALUV", "ReadVIALUX", m.MX>; } } multiclass VPseudoVSGNJ_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFSgnjV_MX = !cast("WriteVFSgnjV_" # mx); - defvar ReadVFSgnjV_MX = !cast("ReadVFSgnjV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFSgnjV_MX, ReadVFSgnjV_MX, ReadVFSgnjV_MX, ReadVMask]>; + SchedBinary<"WriteVFSgnjV", "ReadVFSgnjV", "ReadVFSgnjV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFSgnjF_MX = !cast("WriteVFSgnjF_" # mx); - defvar ReadVFSgnjV_MX = !cast("ReadVFSgnjV_" # mx); - defvar ReadVFSgnjF_MX = !cast("ReadVFSgnjF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFSgnjF_MX, ReadVFSgnjV_MX, ReadVFSgnjF_MX, ReadVMask]>; + SchedBinary<"WriteVFSgnjF", "ReadVFSgnjV", "ReadVFSgnjF", m.MX>; } } } multiclass VPseudoVMAX_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMinMaxV_MX = !cast("WriteVFMinMaxV_" # mx); - defvar ReadVFMinMaxV_MX = !cast("ReadVFMinMaxV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFMinMaxV_MX, ReadVFMinMaxV_MX, ReadVFMinMaxV_MX, ReadVMask]>; + SchedBinary<"WriteVFMinMaxV", "ReadVFMinMaxV", "ReadVFMinMaxV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMinMaxF_MX = !cast("WriteVFMinMaxF_" # mx); - defvar ReadVFMinMaxV_MX = !cast("ReadVFMinMaxV_" # mx); - defvar ReadVFMinMaxF_MX = !cast("ReadVFMinMaxF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFMinMaxF_MX, ReadVFMinMaxV_MX, ReadVFMinMaxF_MX, ReadVMask]>; + SchedBinary<"WriteVFMinMaxF", "ReadVFMinMaxV", "ReadVFMinMaxF", m.MX>; } } } multiclass VPseudoVALU_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFALUV_MX = !cast("WriteVFALUV_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defm "" : VPseudoBinaryFV_VV, - Sched<[WriteVFALUV_MX, ReadVFALUV_MX, ReadVFALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFALUV", "ReadVFALUV", "ReadVFALUV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } multiclass VPseudoVALU_VV_VF_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFALUV_MX = !cast("WriteVFALUV_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defm "" : VPseudoBinaryFV_VV_RM, - Sched<[WriteVFALUV_MX, ReadVFALUV_MX, ReadVFALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFALUV", "ReadVFALUV", "ReadVFALUV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2903,13 +2710,8 @@ multiclass VPseudoVALU_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); - defm "" : VPseudoBinaryV_VF, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2917,13 +2719,8 @@ multiclass VPseudoVALU_VF_RM { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFALUF_MX = !cast("WriteVFALUF_" # mx); - defvar ReadVFALUV_MX = !cast("ReadVFALUV_" # mx); - defvar ReadVFALUF_MX = !cast("ReadVFALUF_" # mx); - defm "" : VPseudoBinaryV_VF_RM, - Sched<[WriteVFALUF_MX, ReadVFALUV_MX, ReadVFALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFALUF", "ReadVFALUV", "ReadVFALUF", m.MX>; } } } @@ -2931,67 +2728,43 @@ multiclass VPseudoVALU_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIALUX_MX = !cast("WriteVIALUX_" # mx); - defvar WriteVIALUI_MX = !cast("WriteVIALUI_" # mx); - defvar ReadVIALUV_MX = !cast("ReadVIALUV_" # mx); - defvar ReadVIALUX_MX = !cast("ReadVIALUX_" # mx); - defm "" : VPseudoBinaryV_VX, - Sched<[WriteVIALUX_MX, ReadVIALUV_MX, ReadVIALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIALUX", "ReadVIALUV", "ReadVIALUX", mx>; defm "" : VPseudoBinaryV_VI, - Sched<[WriteVIALUI_MX, ReadVIALUV_MX, ReadVMask]>; + SchedUnary<"WriteVIALUI", "ReadVIALUV", mx>; } } multiclass VPseudoVWALU_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWALUV_MX = !cast("WriteVIWALUV_" # mx); - defvar WriteVIWALUX_MX = !cast("WriteVIWALUX_" # mx); - defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); - defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_VV, - Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUV", "ReadVIWALUV", "ReadVIWALUV", mx>; defm "" : VPseudoBinaryW_VX, - Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUX", "ReadVIWALUV", "ReadVIWALUX", mx>; } } multiclass VPseudoVWMUL_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWMulV_MX = !cast("WriteVIWMulV_" # mx); - defvar WriteVIWMulX_MX = !cast("WriteVIWMulX_" # mx); - defvar ReadVIWMulV_MX = !cast("ReadVIWMulV_" # mx); - defvar ReadVIWMulX_MX = !cast("ReadVIWMulX_" # mx); - defm "" : VPseudoBinaryW_VV, - Sched<[WriteVIWMulV_MX, ReadVIWMulV_MX, ReadVIWMulV_MX, ReadVMask]>; + SchedBinary<"WriteVIWMulV", "ReadVIWMulV", "ReadVIWMulV", mx>; defm "" : VPseudoBinaryW_VX, - Sched<[WriteVIWMulX_MX, ReadVIWMulV_MX, ReadVIWMulX_MX, ReadVMask]>; + SchedBinary<"WriteVIWMulX", "ReadVIWMulV", "ReadVIWMulX", mx>; } } multiclass VPseudoVWMUL_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulV_MX = !cast("WriteVFWMulV_" # mx); - defvar ReadVFWMulV_MX = !cast("ReadVFWMulV_" # mx); - defm "" : VPseudoBinaryW_VV_RM, - Sched<[WriteVFWMulV_MX, ReadVFWMulV_MX, ReadVFWMulV_MX, ReadVMask]>; + SchedBinary<"WriteVFWMulV", "ReadVFWMulV", "ReadVFWMulV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulF_MX = !cast("WriteVFWMulF_" # mx); - defvar ReadVFWMulV_MX = !cast("ReadVFWMulV_" # mx); - defvar ReadVFWMulF_MX = !cast("ReadVFWMulF_" # mx); - defm "" : VPseudoBinaryW_VF_RM, - Sched<[WriteVFWMulF_MX, ReadVFWMulV_MX, ReadVFWMulF_MX, ReadVMask]>; + SchedBinary<"WriteVFWMulF", "ReadVFWMulV", "ReadVFWMulF", m.MX>; } } } @@ -2999,59 +2772,36 @@ multiclass VPseudoVWALU_WV_WX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWALUV_MX = !cast("WriteVIWALUV_" # mx); - defvar WriteVIWALUX_MX = !cast("WriteVIWALUX_" # mx); - defvar ReadVIWALUV_MX = !cast("ReadVIWALUV_" # mx); - defvar ReadVIWALUX_MX = !cast("ReadVIWALUX_" # mx); - defm "" : VPseudoBinaryW_WV, - Sched<[WriteVIWALUV_MX, ReadVIWALUV_MX, ReadVIWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUV", "ReadVIWALUV", "ReadVIWALUV", mx>; defm "" : VPseudoBinaryW_WX, - Sched<[WriteVIWALUX_MX, ReadVIWALUV_MX, ReadVIWALUX_MX, ReadVMask]>; + SchedBinary<"WriteVIWALUX", "ReadVIWALUV", "ReadVIWALUX", mx>; } } multiclass VPseudoVFWALU_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_VV_RM, - Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUV", "ReadVFWALUV", "ReadVFWALUV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUF_MX = !cast("WriteVFWALUF_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defvar ReadVFWALUF_MX = !cast("ReadVFWALUF_" # mx); - defm "" : VPseudoBinaryW_VF_RM, - Sched<[WriteVFWALUF_MX, ReadVFWALUV_MX, ReadVFWALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUF", "ReadVFWALUV", "ReadVFWALUF", m.MX>; } } } multiclass VPseudoVFWALU_WV_WF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUV_MX = !cast("WriteVFWALUV_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defm "" : VPseudoBinaryW_WV_RM, - Sched<[WriteVFWALUV_MX, ReadVFWALUV_MX, ReadVFWALUV_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUV", "ReadVFWALUV", "ReadVFWALUV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWALUF_MX = !cast("WriteVFWALUF_" # mx); - defvar ReadVFWALUV_MX = !cast("ReadVFWALUV_" # mx); - defvar ReadVFWALUF_MX = !cast("ReadVFWALUF_" # mx); - defm "" : VPseudoBinaryW_WF_RM, - Sched<[WriteVFWALUF_MX, ReadVFWALUV_MX, ReadVFWALUF_MX, ReadVMask]>; + SchedBinary<"WriteVFWALUF", "ReadVFWALUV", "ReadVFWALUF", m.MX>; } } } @@ -3059,159 +2809,108 @@ multiclass VPseudoVMRG_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMergeV_MX = !cast("WriteVIMergeV_" # mx); - defvar WriteVIMergeX_MX = !cast("WriteVIMergeX_" # mx); - defvar WriteVIMergeI_MX = !cast("WriteVIMergeI_" # mx); - defvar ReadVIMergeV_MX = !cast("ReadVIMergeV_" # mx); - defvar ReadVIMergeX_MX = !cast("ReadVIMergeX_" # mx); - def "_VVM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, m.vrclass, m, 1, "">, - Sched<[WriteVIMergeV_MX, ReadVIMergeV_MX, ReadVIMergeV_MX, ReadVMask]>; + SchedBinary<"WriteVIMergeV", "ReadVIMergeV", "ReadVIMergeV", mx>; def "_VXM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, GPR, m, 1, "">, - Sched<[WriteVIMergeX_MX, ReadVIMergeV_MX, ReadVIMergeX_MX, ReadVMask]>; + SchedBinary<"WriteVIMergeX", "ReadVIMergeV", "ReadVIMergeX", mx>; def "_VIM" # "_" # m.MX: VPseudoTiedBinaryCarryIn.R, m.vrclass, simm5, m, 1, "">, - Sched<[WriteVIMergeI_MX, ReadVIMergeV_MX, ReadVMask]>; + SchedUnary<"WriteVIMergeI", "ReadVIMergeV", mx>; } } multiclass VPseudoVCALU_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoTiedBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoTiedBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; defm "" : VPseudoTiedBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX, ReadVMask]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx>; } } multiclass VPseudoVCALU_VM_XM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoTiedBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoTiedBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; } } multiclass VPseudoVCALUM_VM_XM_IM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, maskedOnly=1>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx, maskedOnly=1>; defm "" : VPseudoBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX, ReadVMask]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx, maskedOnly=1>; } } multiclass VPseudoVCALUM_VM_XM { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX, ReadVMask]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx, maskedOnly=1>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX, ReadVMask]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx, maskedOnly=1>; } } multiclass VPseudoVCALUM_V_X_I { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar WriteVICALUI_MX = !cast("WriteVICALUI_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; defm "" : VPseudoBinaryV_IM, - Sched<[WriteVICALUI_MX, ReadVICALUV_MX]>; + SchedUnary<"WriteVICALUI", "ReadVICALUV", mx>; } } multiclass VPseudoVCALUM_V_X { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICALUV_MX = !cast("WriteVICALUV_" # mx); - defvar WriteVICALUX_MX = !cast("WriteVICALUX_" # mx); - defvar ReadVICALUV_MX = !cast("ReadVICALUV_" # mx); - defvar ReadVICALUX_MX = !cast("ReadVICALUX_" # mx); - defm "" : VPseudoBinaryV_VM, - Sched<[WriteVICALUV_MX, ReadVICALUV_MX, ReadVICALUV_MX]>; + SchedBinary<"WriteVICALUV", "ReadVICALUV", "ReadVICALUV", mx>; defm "" : VPseudoBinaryV_XM, - Sched<[WriteVICALUX_MX, ReadVICALUV_MX, ReadVICALUX_MX]>; + SchedBinary<"WriteVICALUX", "ReadVICALUV", "ReadVICALUX", mx>; } } multiclass VPseudoVNCLP_WV_WX_WI_RM { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVNClipV_MX = !cast("WriteVNClipV_" # mx); - defvar WriteVNClipX_MX = !cast("WriteVNClipX_" # mx); - defvar WriteVNClipI_MX = !cast("WriteVNClipI_" # mx); - defvar ReadVNClipV_MX = !cast("ReadVNClipV_" # mx); - defvar ReadVNClipX_MX = !cast("ReadVNClipX_" # mx); - defm "" : VPseudoBinaryV_WV_RM, - Sched<[WriteVNClipV_MX, ReadVNClipV_MX, ReadVNClipV_MX, ReadVMask]>; + SchedBinary<"WriteVNClipV", "ReadVNClipV", "ReadVNClipV", mx>; defm "" : VPseudoBinaryV_WX_RM, - Sched<[WriteVNClipX_MX, ReadVNClipV_MX, ReadVNClipX_MX, ReadVMask]>; + SchedBinary<"WriteVNClipX", "ReadVNClipV", "ReadVNClipX", mx>; defm "" : VPseudoBinaryV_WI_RM, - Sched<[WriteVNClipI_MX, ReadVNClipV_MX, ReadVMask]>; + SchedUnary<"WriteVNClipI", "ReadVNClipV", mx>; } } multiclass VPseudoVNSHT_WV_WX_WI { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVNShiftV_MX = !cast("WriteVNShiftV_" # mx); - defvar WriteVNShiftX_MX = !cast("WriteVNShiftX_" # mx); - defvar WriteVNShiftI_MX = !cast("WriteVNShiftI_" # mx); - defvar ReadVNShiftV_MX = !cast("ReadVNShiftV_" # mx); - defvar ReadVNShiftX_MX = !cast("ReadVNShiftX_" # mx); - defm "" : VPseudoBinaryV_WV, - Sched<[WriteVNShiftV_MX, ReadVNShiftV_MX, ReadVNShiftV_MX, ReadVMask]>; + SchedBinary<"WriteVNShiftV", "ReadVNShiftV", "ReadVNShiftV", mx>; defm "" : VPseudoBinaryV_WX, - Sched<[WriteVNShiftX_MX, ReadVNShiftV_MX, ReadVNShiftX_MX, ReadVMask]>; + SchedBinary<"WriteVNShiftX", "ReadVNShiftV", "ReadVNShiftX", mx>; defm "" : VPseudoBinaryV_WI, - Sched<[WriteVNShiftI_MX, ReadVNShiftV_MX, ReadVMask]>; + SchedUnary<"WriteVNShiftI", "ReadVNShiftV", mx>; } } @@ -3362,62 +3061,43 @@ multiclass VPseudoVMAC_VV_VX_AAXA { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVIMulAddV_MX = !cast("WriteVIMulAddV_" # mx); - defvar WriteVIMulAddX_MX = !cast("WriteVIMulAddX_" # mx); - defvar ReadVIMulAddV_MX = !cast("ReadVIMulAddV_" # mx); - defvar ReadVIMulAddX_MX = !cast("ReadVIMulAddX_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA, - Sched<[WriteVIMulAddV_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, - ReadVIMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVIMulAddV", "ReadVIMulAddV", "ReadVIMulAddV", + "ReadVIMulAddV", mx>; defm "" : VPseudoTernaryV_VX_AAXA, - Sched<[WriteVIMulAddX_MX, ReadVIMulAddV_MX, ReadVIMulAddV_MX, - ReadVIMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIMulAddX", "ReadVIMulAddV", "ReadVIMulAddV", + "ReadVIMulAddX", mx>; } } multiclass VPseudoVMAC_VV_VF_AAXA { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulAddV_MX = !cast("WriteVFMulAddV_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA, - Sched<[WriteVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddV", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulAddF_MX = !cast("WriteVFMulAddF_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defvar ReadVFMulAddF_MX = !cast("ReadVFMulAddF_" # mx); - defm "" : VPseudoTernaryV_VF_AAXA, - Sched<[WriteVFMulAddF_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddF", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddF", m.MX>; } } } multiclass VPseudoVMAC_VV_VF_AAXA_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFMulAddV_MX = !cast("WriteVFMulAddV_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defm "" : VPseudoTernaryV_VV_AAXA_RM, - Sched<[WriteVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddV", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFMulAddF_MX = !cast("WriteVFMulAddF_" # mx); - defvar ReadVFMulAddV_MX = !cast("ReadVFMulAddV_" # mx); - defvar ReadVFMulAddF_MX = !cast("ReadVFMulAddF_" # mx); - defm "" : VPseudoTernaryV_VF_AAXA_RM, - Sched<[WriteVFMulAddF_MX, ReadVFMulAddV_MX, ReadVFMulAddV_MX, ReadVFMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFMulAddF", "ReadVFMulAddV", "ReadVFMulAddV", + "ReadVFMulAddF", m.MX>; } } } @@ -3425,70 +3105,46 @@ multiclass VPseudoVSLD_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVISlideX_MX = !cast("WriteVISlideX_" # mx); - defvar WriteVISlideI_MX = !cast("WriteVISlideI_" # mx); - defvar ReadVISlideV_MX = !cast("ReadVISlideV_" # mx); - defvar ReadVISlideX_MX = !cast("ReadVISlideX_" # mx); - defm "" : VPseudoVSLDV_VX, - Sched<[WriteVISlideX_MX, ReadVISlideV_MX, ReadVISlideV_MX, - ReadVISlideX_MX, ReadVMask]>; + SchedTernary<"WriteVISlideX", "ReadVISlideV", "ReadVISlideV", + "ReadVISlideX", mx>; defm "" : VPseudoVSLDV_VI, - Sched<[WriteVISlideI_MX, ReadVISlideV_MX, ReadVISlideV_MX, ReadVMask]>; + SchedBinary<"WriteVISlideI", "ReadVISlideV", "ReadVISlideV", mx>; } } multiclass VPseudoVWMAC_VV_VX { foreach m = MxListW in { defvar mx = m.MX; - defvar WriteVIWMulAddV_MX = !cast("WriteVIWMulAddV_" # mx); - defvar WriteVIWMulAddX_MX = !cast("WriteVIWMulAddX_" # mx); - defvar ReadVIWMulAddV_MX = !cast("ReadVIWMulAddV_" # mx); - defvar ReadVIWMulAddX_MX = !cast("ReadVIWMulAddX_" # mx); - defm "" : VPseudoTernaryW_VV, - Sched<[WriteVIWMulAddV_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddV", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddV", mx>; defm "" : VPseudoTernaryW_VX, - Sched<[WriteVIWMulAddX_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddX", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddX", mx>; } } multiclass VPseudoVWMAC_VX { foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVIWMulAddX_MX = !cast("WriteVIWMulAddX_" # mx); - defvar ReadVIWMulAddV_MX= !cast("ReadVIWMulAddV_" # mx); - defvar ReadVIWMulAddX_MX = !cast("ReadVIWMulAddX_" # mx); - defm "" : VPseudoTernaryW_VX, - Sched<[WriteVIWMulAddX_MX, ReadVIWMulAddV_MX, ReadVIWMulAddV_MX, - ReadVIWMulAddX_MX, ReadVMask]>; + SchedTernary<"WriteVIWMulAddX", "ReadVIWMulAddV", "ReadVIWMulAddV", + "ReadVIWMulAddX", m.MX>; } } multiclass VPseudoVWMAC_VV_VF_RM { foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulAddV_MX = !cast("WriteVFWMulAddV_" # mx); - defvar ReadVFWMulAddV_MX = !cast("ReadVFWMulAddV_" # mx); - defm "" : VPseudoTernaryW_VV_RM, - Sched<[WriteVFWMulAddV_MX, ReadVFWMulAddV_MX, - ReadVFWMulAddV_MX, ReadVFWMulAddV_MX, ReadVMask]>; + SchedTernary<"WriteVFWMulAddV", "ReadVFWMulAddV", + "ReadVFWMulAddV", "ReadVFWMulAddV", m.MX>; } foreach f = FPListW in { foreach m = f.MxListFW in { - defvar mx = m.MX; - defvar WriteVFWMulAddF_MX = !cast("WriteVFWMulAddF_" # mx); - defvar ReadVFWMulAddV_MX = !cast("ReadVFWMulAddV_" # mx); - defvar ReadVFWMulAddF_MX = !cast("ReadVFWMulAddF_" # mx); - defm "" : VPseudoTernaryW_VF_RM, - Sched<[WriteVFWMulAddF_MX, ReadVFWMulAddV_MX, - ReadVFWMulAddV_MX, ReadVFWMulAddF_MX, ReadVMask]>; + SchedTernary<"WriteVFWMulAddF", "ReadVFWMulAddV", + "ReadVFWMulAddV", "ReadVFWMulAddF", m.MX>; } } } @@ -3496,55 +3152,35 @@ multiclass VPseudoVCMPM_VV_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpV_MX = !cast("WriteVICmpV_" # mx); - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar WriteVICmpI_MX = !cast("WriteVICmpI_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; + SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; defm "" : VPseudoBinaryM_VI, - Sched<[WriteVICmpI_MX, ReadVICmpV_MX, ReadVMask]>; + SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } multiclass VPseudoVCMPM_VV_VX { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpV_MX = !cast("WriteVICmpV_" # mx); - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVICmpV_MX, ReadVICmpV_MX, ReadVICmpV_MX, ReadVMask]>; + SchedBinary<"WriteVICmpV", "ReadVICmpV", "ReadVICmpV", mx>; defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; } } multiclass VPseudoVCMPM_VV_VF { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCmpV_MX = !cast("WriteVFCmpV_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defm "" : VPseudoBinaryM_VV, - Sched<[WriteVFCmpV_MX, ReadVFCmpV_MX, ReadVFCmpV_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpV", "ReadVFCmpV", "ReadVFCmpV", m.MX>; } foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFCmpF_MX = !cast("WriteVFCmpF_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defvar ReadVFCmpF_MX = !cast("ReadVFCmpF_" # mx); - defm "" : VPseudoBinaryM_VF, - Sched<[WriteVFCmpF_MX, ReadVFCmpV_MX, ReadVFCmpF_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } } @@ -3552,13 +3188,8 @@ multiclass VPseudoVCMPM_VF { foreach f = FPList in { foreach m = f.MxList in { - defvar mx = m.MX; - defvar WriteVFCmpF_MX = !cast("WriteVFCmpF_" # mx); - defvar ReadVFCmpV_MX = !cast("ReadVFCmpV_" # mx); - defvar ReadVFCmpF_MX = !cast("ReadVFCmpF_" # mx); - defm "" : VPseudoBinaryM_VF, - Sched<[WriteVFCmpF_MX, ReadVFCmpV_MX, ReadVFCmpF_MX, ReadVMask]>; + SchedBinary<"WriteVFCmpF", "ReadVFCmpV", "ReadVFCmpF", m.MX>; } } } @@ -3566,15 +3197,10 @@ multiclass VPseudoVCMPM_VX_VI { foreach m = MxList in { defvar mx = m.MX; - defvar WriteVICmpX_MX = !cast("WriteVICmpX_" # mx); - defvar WriteVICmpI_MX = !cast("WriteVICmpI_" # mx); - defvar ReadVICmpV_MX = !cast("ReadVICmpV_" # mx); - defvar ReadVICmpX_MX = !cast("ReadVICmpX_" # mx); - defm "" : VPseudoBinaryM_VX, - Sched<[WriteVICmpX_MX, ReadVICmpV_MX, ReadVICmpX_MX, ReadVMask]>; + SchedBinary<"WriteVICmpX", "ReadVICmpV", "ReadVICmpX", mx>; defm "" : VPseudoBinaryM_VI, - Sched<[WriteVICmpI_MX, ReadVICmpV_MX, ReadVMask]>; + SchedUnary<"WriteVICmpI", "ReadVICmpV", mx>; } } @@ -3582,10 +3208,8 @@ foreach m = MxList in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIRedV_From_MX_E = !cast("WriteVIRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIRedV_From_MX_E, ReadVIRedV, ReadVIRedV, ReadVIRedV, - ReadVMask]>; + SchedReduction<"WriteVIRedV_From", "ReadVIRedV", mx, e>; } } } @@ -3594,10 +3218,8 @@ foreach m = MxList in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIRedMinMaxV_From_MX_E = !cast("WriteVIRedMinMaxV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIRedMinMaxV_From_MX_E, ReadVIRedV, ReadVIRedV, - ReadVIRedV, ReadVMask]>; + SchedReduction<"WriteVIRedMinMaxV_From", "ReadVIRedV", mx, e>; } } } @@ -3606,10 +3228,8 @@ foreach m = MxListWRed in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVIWRedV_From_MX_E = !cast("WriteVIWRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVIWRedV_From_MX_E, ReadVIWRedV, ReadVIWRedV, - ReadVIWRedV, ReadVMask]>; + SchedReduction<"WriteVIWRedV_From", "ReadVIWRedV", mx, e>; } } } @@ -3618,12 +3238,10 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedV_From_MX_E = !cast("WriteVFRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFRedV_From_MX_E, ReadVFRedV, ReadVFRedV, ReadVFRedV, - ReadVMask]>; + SchedReduction<"WriteVFRedV_From", "ReadVFRedV", mx, e>; } } } @@ -3632,10 +3250,8 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedMinMaxV_From_MX_E = !cast("WriteVFRedMinMaxV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicy, - Sched<[WriteVFRedMinMaxV_From_MX_E, ReadVFRedV, ReadVFRedV, ReadVFRedV, - ReadVMask]>; + SchedReduction<"WriteVFRedMinMaxV_From", "ReadVFRedV", mx, e>; } } } @@ -3644,11 +3260,9 @@ foreach m = MxListF in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFRedOV_From_MX_E = !cast("WriteVFRedOV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFRedOV_From_MX_E, ReadVFRedOV, ReadVFRedOV, - ReadVFRedOV, ReadVMask]>; + SchedReduction<"WriteVFRedOV_From", "ReadVFRedOV", mx, e>; } } } @@ -3657,12 +3271,10 @@ foreach m = MxListFWRed in { defvar mx = m.MX; foreach e = SchedSEWSet.val in { - defvar WriteVFWRedV_From_MX_E = !cast("WriteVFWRedV_From_" # mx # "_E" # e); defm _VS : VPseudoTernaryWithTailPolicyRoundingMode, - Sched<[WriteVFWRedV_From_MX_E, ReadVFWRedV, ReadVFWRedV, - ReadVFWRedV, ReadVMask]>; + SchedReduction<"WriteVFWRedV_From", "ReadVFWRedV", mx, e>; } } } @@ -3716,211 +3328,139 @@ multiclass VPseudoVCVTI_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTI_V_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTI_RM_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVFROUND_NOEXCEPT_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtFToIV_MX = !cast("WriteVFCvtFToIV_" # mx); - defvar ReadVFCvtFToIV_MX = !cast("ReadVFCvtFToIV_" # mx); - defm _V : VPseudoConversionNoExcept, - Sched<[WriteVFCvtFToIV_MX, ReadVFCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtFToIV", "ReadVFCvtFToIV", m.MX>; } } multiclass VPseudoVCVTF_V_RM { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtIToFV_MX = !cast("WriteVFCvtIToFV_" # mx); - defvar ReadVFCvtIToFV_MX = !cast("ReadVFCvtIToFV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFCvtIToFV_MX, ReadVFCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtIToFV", "ReadVFCvtIToFV", m.MX>; } } multiclass VPseudoVCVTF_RM_V { foreach m = MxListF in { - defvar mx = m.MX; - defvar WriteVFCvtIToFV_MX = !cast("WriteVFCvtIToFV_" # mx); - defvar ReadVFCvtIToFV_MX = !cast("ReadVFCvtIToFV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFCvtIToFV_MX, ReadVFCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFCvtIToFV", "ReadVFCvtIToFV", m.MX>; } } multiclass VPseudoVWCVTI_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTI_V_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversionRoundingMode, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTI_RM_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToIV_MX = !cast("WriteVFWCvtFToIV_" # mx); - defvar ReadVFWCvtFToIV_MX = !cast("ReadVFWCvtFToIV_" # mx); - defm _V : VPseudoConversionRM, - Sched<[WriteVFWCvtFToIV_MX, ReadVFWCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToIV", "ReadVFWCvtFToIV", m.MX>; } } multiclass VPseudoVWCVTF_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFWCvtIToFV_MX = !cast("WriteVFWCvtIToFV_" # mx); - defvar ReadVFWCvtIToFV_MX = !cast("ReadVFWCvtIToFV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtIToFV_MX, ReadVFWCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtIToFV", "ReadVFWCvtIToFV", m.MX>; } } multiclass VPseudoVWCVTD_V { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFWCvtFToFV_MX = !cast("WriteVFWCvtFToFV_" # mx); - defvar ReadVFWCvtFToFV_MX = !cast("ReadVFWCvtFToFV_" # mx); - defm _V : VPseudoConversion, - Sched<[WriteVFWCvtFToFV_MX, ReadVFWCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFWCvtFToFV", "ReadVFWCvtFToFV", m.MX>; } } multiclass VPseudoVNCVTI_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversion, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTI_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTI_RM_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToIV_MX = !cast("WriteVFNCvtFToIV_" # mx); - defvar ReadVFNCvtFToIV_MX = !cast("ReadVFNCvtFToIV_" # mx); - defm _W : VPseudoConversionRM, - Sched<[WriteVFNCvtFToIV_MX, ReadVFNCvtFToIV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToIV", "ReadVFNCvtFToIV", m.MX>; } } multiclass VPseudoVNCVTF_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtIToFV_MX = !cast("WriteVFNCvtIToFV_" # mx); - defvar ReadVFNCvtIToFV_MX = !cast("ReadVFNCvtIToFV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtIToFV_MX, ReadVFNCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtIToFV", "ReadVFNCvtIToFV", m.MX>; } } multiclass VPseudoVNCVTF_RM_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtIToFV_MX = !cast("WriteVFNCvtIToFV_" # mx); - defvar ReadVFNCvtIToFV_MX = !cast("ReadVFNCvtIToFV_" # mx); - defm _W : VPseudoConversionRM, - Sched<[WriteVFNCvtIToFV_MX, ReadVFNCvtIToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtIToFV", "ReadVFNCvtIToFV", m.MX>; } } multiclass VPseudoVNCVTD_W { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToFV_MX = !cast("WriteVFNCvtFToFV_" # mx); - defvar ReadVFNCvtFToFV_MX = !cast("ReadVFNCvtFToFV_" # mx); - defm _W : VPseudoConversion, - Sched<[WriteVFNCvtFToFV_MX, ReadVFNCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToFV", "ReadVFNCvtFToFV", m.MX>; } } multiclass VPseudoVNCVTD_W_RM { defvar constraint = "@earlyclobber $rd"; foreach m = MxListFW in { - defvar mx = m.MX; - defvar WriteVFNCvtFToFV_MX = !cast("WriteVFNCvtFToFV_" # mx); - defvar ReadVFNCvtFToFV_MX = !cast("ReadVFNCvtFToFV_" # mx); - defm _W : VPseudoConversionRoundingMode, - Sched<[WriteVFNCvtFToFV_MX, ReadVFNCvtFToFV_MX, ReadVMask]>; + SchedUnary<"WriteVFNCvtFToFV", "ReadVFNCvtFToFV", m.MX>; } }