@@ -1293,6 +1293,7 @@ def WaitVMVSrc : NamedIntOperand<"wait_vm_vsrc"> {
1293
1293
def ByteSel : NamedIntOperand<"byte_sel"> {
1294
1294
let Validator = "isUInt<2>";
1295
1295
}
1296
+ def ByteSel0 : DefaultOperand<ByteSel, 0>;
1296
1297
1297
1298
let PrintMethod = "printBitOp3" in
1298
1299
def BitOp3 : NamedIntOperand<"bitop3">;
@@ -1971,7 +1972,8 @@ class getIns32 <RegisterOperand Src0RC, RegisterOperand Src1RC, int NumSrcArgs>
1971
1972
class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
1972
1973
RegisterOperand Src2RC, int NumSrcArgs,
1973
1974
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> {
1975
1977
dag src0 = !if(!ge(NumSrcArgs, 1),
1976
1978
!if (HasModifiers,
1977
1979
(ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1989,18 +1991,23 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
1989
1991
(ins));
1990
1992
dag clamp = !if(HasClamp, (ins Clamp0:$clamp), (ins));
1991
1993
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));
1992
1998
1993
- dag ret = !con(src0, src1, src2, clamp, omod);
1999
+ dag ret = !con(src0, src1, src2, clamp, omod, bytesel );
1994
2000
}
1995
2001
1996
2002
class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
1997
2003
RegisterOperand Src2RC, int NumSrcArgs,
1998
2004
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> {
2000
2007
// getInst64 handles clamp and omod. implicit mutex between vop3p and omod
2001
2008
dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
2002
2009
HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2003
- Src0Mod, Src1Mod, Src2Mod>.ret;
2010
+ Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel >.ret;
2004
2011
dag opsel = (ins op_sel0:$op_sel);
2005
2012
dag ret = !con(base, !if(HasOpSel, opsel, (ins)));
2006
2013
}
@@ -2612,7 +2619,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2612
2619
field dag Ins32 = getIns32<Src0RC32, Src1RC32, NumSrcArgs>.ret;
2613
2620
field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
2614
2621
HasClamp, HasModifiers, HasSrc2Mods,
2615
- HasOMod, Src0Mod, Src1Mod, Src2Mod>.ret;
2622
+ HasOMod, Src0Mod, Src1Mod, Src2Mod,
2623
+ HasFP8ByteSel, HasFP8DstByteSel>.ret;
2616
2624
field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
2617
2625
NumSrcArgs, HasClamp, HasOpSel, HasNeg,
2618
2626
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
@@ -2630,7 +2638,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2630
2638
Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret;
2631
2639
defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
2632
2640
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2633
- Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel>.ret;
2641
+ Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2642
+ HasFP8ByteSel, HasFP8DstByteSel>.ret;
2634
2643
defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
2635
2644
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
2636
2645
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
0 commit comments