@@ -1293,6 +1293,7 @@ def WaitVMVSrc : NamedIntOperand<"wait_vm_vsrc"> {
12931293def ByteSel : NamedIntOperand<"byte_sel"> {
12941294 let Validator = "isUInt<2>";
12951295}
1296+ def ByteSel0 : DefaultOperand<ByteSel, 0>;
12961297
12971298let PrintMethod = "printBitOp3" in
12981299def BitOp3 : NamedIntOperand<"bitop3">;
@@ -1971,7 +1972,8 @@ class getIns32 <RegisterOperand Src0RC, RegisterOperand Src1RC, int NumSrcArgs>
19711972class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19721973 RegisterOperand Src2RC, int NumSrcArgs,
19731974 bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
1974- Operand Src0Mod, Operand Src1Mod, Operand Src2Mod> {
1975+ Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
1976+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
19751977 dag src0 = !if(!ge(NumSrcArgs, 1),
19761978 !if (HasModifiers,
19771979 (ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1989,18 +1991,23 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19891991 (ins));
19901992 dag clamp = !if(HasClamp, (ins Clamp0:$clamp), (ins));
19911993 dag omod = !if(HasOMod, (ins omod0:$omod), (ins));
1994+ dag bytesel = !if(HasFP8ByteSel,
1995+ !con(!if(HasFP8DstByteSel, (ins VGPR_32:$vdst_in), (ins)),
1996+ (ins ByteSel0:$byte_sel)),
1997+ (ins));
19921998
1993- dag ret = !con(src0, src1, src2, clamp, omod);
1999+ dag ret = !con(src0, src1, src2, clamp, omod, bytesel );
19942000}
19952001
19962002class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
19972003 RegisterOperand Src2RC, int NumSrcArgs,
19982004 bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
1999- Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel> {
2005+ Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel,
2006+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
20002007 // getInst64 handles clamp and omod. implicit mutex between vop3p and omod
20012008 dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
20022009 HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2003- Src0Mod, Src1Mod, Src2Mod>.ret;
2010+ Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel >.ret;
20042011 dag opsel = (ins op_sel0:$op_sel);
20052012 dag ret = !con(base, !if(HasOpSel, opsel, (ins)));
20062013}
@@ -2612,7 +2619,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26122619 field dag Ins32 = getIns32<Src0RC32, Src1RC32, NumSrcArgs>.ret;
26132620 field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
26142621 HasClamp, HasModifiers, HasSrc2Mods,
2615- HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret;
2622+ HasOMod, Src0Mod, Src1Mod, Src2Mod,
2623+ HasFP8ByteSel, HasFP8DstByteSel>.ret;
26162624 field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
26172625 NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26182626 Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
@@ -2630,7 +2638,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26302638 Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret;
26312639 defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
26322640 Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2633- Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel>.ret;
2641+ Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2642+ HasFP8ByteSel, HasFP8DstByteSel>.ret;
26342643 defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
26352644 Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26362645 Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
0 commit comments