@@ -1973,7 +1973,8 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19731973 RegisterOperand Src2RC, int NumSrcArgs,
19741974 bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
19751975 Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
1976- bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
1976+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0,
1977+ bit HasBitOp3 = 0> {
19771978 dag src0 = !if(!ge(NumSrcArgs, 1),
19781979 !if (HasModifiers,
19791980 (ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1999,21 +2000,23 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
19992000 !con(!if(HasFP8DstByteSel, (ins VGPR_32:$vdst_in), (ins)),
20002001 (ins ByteSel0:$byte_sel)),
20012002 (ins));
2003+ dag bitop3 = !if(HasBitOp3, (ins bitop3_0:$bitop3), (ins));
20022004
2003- dag ret = !con(src0, src1, src2, clamp, omod, bytesel);
2005+ dag ret = !con(src0, src1, src2, clamp, omod, bytesel, bitop3 );
20042006}
20052007
20062008class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
20072009 RegisterOperand Src2RC, int NumSrcArgs,
20082010 bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
20092011 Operand Src0Mod, Operand Src1Mod, Operand Src2Mod, bit HasOpSel,
2010- bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
2012+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0, bit HasBitOp3 = 0 > {
20112013 // getInst64 handles clamp and omod. implicit mutex between vop3p and omod
20122014 dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
20132015 HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
20142016 Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel>.ret;
20152017 dag opsel = (ins op_sel0:$op_sel);
2016- dag ret = !con(base, !if(HasOpSel, opsel, (ins)));
2018+ dag bitop3 = (ins bitop3_0:$bitop3);
2019+ dag ret = !con(base, !if(HasBitOp3, bitop3, (ins)), !if(HasOpSel, opsel, (ins)));
20172020}
20182021
20192022class getInsVOP3P <RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2035,12 +2038,12 @@ class getInsVOP3OpSel <RegisterOperand Src0RC, RegisterOperand Src1RC,
20352038 RegisterOperand Src2RC, int NumSrcArgs,
20362039 bit HasClamp, bit HasOMod,
20372040 Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
2038- bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
2041+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0, bit HasBitOp3 = 0 > {
20392042 dag ret = getInsVOP3Base<Src0RC, Src1RC,
20402043 Src2RC, NumSrcArgs,
20412044 HasClamp, 1/*HasModifiers*/, 1/*HasSrc2Mods*/, HasOMod,
20422045 Src0Mod, Src1Mod, Src2Mod, /*HasOpSel=*/1,
2043- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2046+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
20442047}
20452048
20462049class getInsDPPBase <RegisterOperand OldRC, RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2247,7 +2250,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22472250 bit Src0HasMods,
22482251 bit Src1HasMods,
22492252 bit Src2HasMods,
2250- bit HasByteSel = 0> {
2253+ bit HasByteSel = 0,
2254+ bit HasBitOp3 = 0> {
22512255 string dst = "$vdst";
22522256
22532257 string isrc0 = !if(!eq(NumSrcArgs, 1), "$src0", "$src0,");
@@ -2269,7 +2273,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
22692273 string bytesel = !if(HasByteSel, "$byte_sel", "");
22702274 string clamp = !if(HasClamp, "$clamp", "");
22712275 string omod = !if(HasOMod, "$omod", "");
2272- string ret = dst#", "#src0#src1#src2#"$op_sel"#bytesel#clamp#omod;
2276+ string bitop3 = !if(HasBitOp3, "$bitop3", "");
2277+ string ret = dst#", "#src0#src1#src2#bitop3#"$op_sel"#bytesel#clamp#omod;
22732278}
22742279
22752280class getAsmDPP <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT = i32> {
@@ -2301,7 +2306,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23012306 bit HasOpSel, bit HasOMod, bit IsVOP3P,
23022307 bit HasNeg, bit Src0HasMods,
23032308 bit Src1HasMods, bit Src2HasMods, ValueType DstVT = i32,
2304- bit HasByteSel = 0> {
2309+ bit HasByteSel = 0, bit HasBitOp3 = 0 > {
23052310 string dst = !if(HasDst,
23062311 !if(!eq(DstVT.Size, 1),
23072312 "$sdst",
@@ -2324,6 +2329,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23242329 string src2 = !if(Src2HasMods, src2mods, src2nomods);
23252330 string opsel = !if(HasOpSel, "$op_sel", "");
23262331 string bytesel = !if(HasByteSel, "$byte_sel", "");
2332+ string bitop3 = !if(HasBitOp3, "$bitop3", "");
23272333 string 3PMods = !if(IsVOP3P,
23282334 !if(HasOpSel, "$op_sel_hi", "")
23292335 #!if(HasNeg, "$neg_lo$neg_hi", ""),
@@ -2333,7 +2339,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
23332339
23342340 string ret = dst#!if(!eq(NumSrcArgs,0),
23352341 "",
2336- !if(HasDst,", ", "")#src0#src1#src2#opsel#bytesel#3PMods#clamp#omod);
2342+ !if(HasDst,", ", "")#src0#src1#src2#bitop3# opsel#bytesel#3PMods#clamp#omod);
23372343}
23382344
23392345class getAsmVOP3DPP<string base> {
@@ -2558,6 +2564,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
25582564 field bit HasFP8DstByteSel = 0;
25592565 field bit HasFP4DstByteSel = 0;
25602566 field bit HasFP8ByteSel = !or(HasFP8SrcByteSel, HasFP8DstByteSel);
2567+ field bit HasBitOp3 = 0;
25612568
25622569 field bit HasDst = !ne(DstVT.Value, untyped.Value);
25632570 field bit HasDst32 = HasDst;
@@ -2628,14 +2635,14 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26282635 field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
26292636 HasClamp, HasModifiers, HasSrc2Mods,
26302637 HasOMod, Src0Mod, Src1Mod, Src2Mod,
2631- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2638+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
26322639 field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
26332640 NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26342641 Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
26352642 field dag InsVOP3OpSel = getInsVOP3OpSel<Src0RC64, Src1RC64, Src2RC64,
26362643 NumSrcArgs, HasClamp, HasOMod,
26372644 Src0Mod, Src1Mod, Src2Mod,
2638- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2645+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
26392646 field dag InsDPP = !if(HasExtDPP,
26402647 getInsDPP<DstRCDPP, Src0DPP, Src1DPP, Src2DPP, NumSrcArgs,
26412648 HasModifiers, Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret,
@@ -2648,7 +2655,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26482655 defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
26492656 Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
26502657 Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2651- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2658+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
26522659 defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
26532660 Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
26542661 Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
@@ -2677,7 +2684,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26772684 field string AsmDPP8 = getAsmDPP8<HasDst, NumSrcArgs, 0 /*HasModifiers*/, DstVT>.ret;
26782685 field string AsmVOP3Base = getAsmVOP3Base<NumSrcArgs, HasDst, HasClamp,
26792686 HasOpSel, HasOMod, IsVOP3P, HasNeg, HasSrc0Mods, HasSrc1Mods,
2680- HasSrc2Mods, DstVT, HasFP8ByteSel>.ret;
2687+ HasSrc2Mods, DstVT, HasFP8ByteSel, HasBitOp3 >.ret;
26812688 field string Asm64 = AsmVOP3Base;
26822689 field string AsmVOP3P = getAsmVOP3P<HasDst, NumSrcArgs, HasNeg, HasClamp, HasOpSel>.ret;
26832690 field string AsmVOP3OpSel = getAsmVOP3OpSel<NumSrcArgs,
@@ -2686,7 +2693,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
26862693 HasSrc0FloatMods,
26872694 HasSrc1FloatMods,
26882695 HasSrc2FloatMods,
2689- HasFP8ByteSel>.ret;
2696+ HasFP8ByteSel,
2697+ HasBitOp3>.ret;
26902698 field string AsmVOP3DPP = getAsmVOP3DPP<AsmVOP3Base>.ret;
26912699 field string AsmVOP3DPP16 = getAsmVOP3DPP16<AsmVOP3Base>.ret;
26922700 field string AsmVOP3DPP8 = getAsmVOP3DPP8<AsmVOP3Base>.ret;
0 commit comments