@@ -1973,7 +1973,8 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
1973
1973
RegisterOperand Src2RC, int NumSrcArgs,
1974
1974
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
1975
1975
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
1976
- bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
1976
+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0,
1977
+ bit HasBitOp3 = 0> {
1977
1978
dag src0 = !if(!ge(NumSrcArgs, 1),
1978
1979
!if (HasModifiers,
1979
1980
(ins Src0Mod:$src0_modifiers, Src0RC:$src0),
@@ -1999,21 +2000,23 @@ class getIns64 <RegisterOperand Src0RC, RegisterOperand Src1RC,
1999
2000
!con(!if(HasFP8DstByteSel, (ins VGPR_32:$vdst_in), (ins)),
2000
2001
(ins ByteSel0:$byte_sel)),
2001
2002
(ins));
2003
+ dag bitop3 = !if(HasBitOp3, (ins bitop3_0:$bitop3), (ins));
2002
2004
2003
- dag ret = !con(src0, src1, src2, clamp, omod, bytesel);
2005
+ dag ret = !con(src0, src1, src2, clamp, omod, bytesel, bitop3 );
2004
2006
}
2005
2007
2006
2008
class getInsVOP3Base<RegisterOperand Src0RC, RegisterOperand Src1RC,
2007
2009
RegisterOperand Src2RC, int NumSrcArgs,
2008
2010
bit HasClamp, bit HasModifiers, bit HasSrc2Mods, bit HasOMod,
2009
2011
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 > {
2011
2013
// getInst64 handles clamp and omod. implicit mutex between vop3p and omod
2012
2014
dag base = getIns64 <Src0RC, Src1RC, Src2RC, NumSrcArgs,
2013
2015
HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2014
2016
Src0Mod, Src1Mod, Src2Mod, HasFP8ByteSel, HasFP8DstByteSel>.ret;
2015
2017
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)));
2017
2020
}
2018
2021
2019
2022
class getInsVOP3P <RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2035,12 +2038,12 @@ class getInsVOP3OpSel <RegisterOperand Src0RC, RegisterOperand Src1RC,
2035
2038
RegisterOperand Src2RC, int NumSrcArgs,
2036
2039
bit HasClamp, bit HasOMod,
2037
2040
Operand Src0Mod, Operand Src1Mod, Operand Src2Mod,
2038
- bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0> {
2041
+ bit HasFP8ByteSel = 0, bit HasFP8DstByteSel = 0, bit HasBitOp3 = 0 > {
2039
2042
dag ret = getInsVOP3Base<Src0RC, Src1RC,
2040
2043
Src2RC, NumSrcArgs,
2041
2044
HasClamp, 1/*HasModifiers*/, 1/*HasSrc2Mods*/, HasOMod,
2042
2045
Src0Mod, Src1Mod, Src2Mod, /*HasOpSel=*/1,
2043
- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2046
+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
2044
2047
}
2045
2048
2046
2049
class getInsDPPBase <RegisterOperand OldRC, RegisterOperand Src0RC, RegisterOperand Src1RC,
@@ -2247,7 +2250,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
2247
2250
bit Src0HasMods,
2248
2251
bit Src1HasMods,
2249
2252
bit Src2HasMods,
2250
- bit HasByteSel = 0> {
2253
+ bit HasByteSel = 0,
2254
+ bit HasBitOp3 = 0> {
2251
2255
string dst = "$vdst";
2252
2256
2253
2257
string isrc0 = !if(!eq(NumSrcArgs, 1), "$src0", "$src0,");
@@ -2269,7 +2273,8 @@ class getAsmVOP3OpSel <int NumSrcArgs,
2269
2273
string bytesel = !if(HasByteSel, "$byte_sel", "");
2270
2274
string clamp = !if(HasClamp, "$clamp", "");
2271
2275
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;
2273
2278
}
2274
2279
2275
2280
class getAsmDPP <bit HasDst, int NumSrcArgs, bit HasModifiers, ValueType DstVT = i32> {
@@ -2301,7 +2306,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
2301
2306
bit HasOpSel, bit HasOMod, bit IsVOP3P,
2302
2307
bit HasNeg, bit Src0HasMods,
2303
2308
bit Src1HasMods, bit Src2HasMods, ValueType DstVT = i32,
2304
- bit HasByteSel = 0> {
2309
+ bit HasByteSel = 0, bit HasBitOp3 = 0 > {
2305
2310
string dst = !if(HasDst,
2306
2311
!if(!eq(DstVT.Size, 1),
2307
2312
"$sdst",
@@ -2324,6 +2329,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
2324
2329
string src2 = !if(Src2HasMods, src2mods, src2nomods);
2325
2330
string opsel = !if(HasOpSel, "$op_sel", "");
2326
2331
string bytesel = !if(HasByteSel, "$byte_sel", "");
2332
+ string bitop3 = !if(HasBitOp3, "$bitop3", "");
2327
2333
string 3PMods = !if(IsVOP3P,
2328
2334
!if(HasOpSel, "$op_sel_hi", "")
2329
2335
#!if(HasNeg, "$neg_lo$neg_hi", ""),
@@ -2333,7 +2339,7 @@ class getAsmVOP3Base <int NumSrcArgs, bit HasDst, bit HasClamp,
2333
2339
2334
2340
string ret = dst#!if(!eq(NumSrcArgs,0),
2335
2341
"",
2336
- !if(HasDst,", ", "")#src0#src1#src2#opsel#bytesel#3PMods#clamp#omod);
2342
+ !if(HasDst,", ", "")#src0#src1#src2#bitop3# opsel#bytesel#3PMods#clamp#omod);
2337
2343
}
2338
2344
2339
2345
class getAsmVOP3DPP<string base> {
@@ -2558,6 +2564,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2558
2564
field bit HasFP8DstByteSel = 0;
2559
2565
field bit HasFP4DstByteSel = 0;
2560
2566
field bit HasFP8ByteSel = !or(HasFP8SrcByteSel, HasFP8DstByteSel);
2567
+ field bit HasBitOp3 = 0;
2561
2568
2562
2569
field bit HasDst = !ne(DstVT.Value, untyped.Value);
2563
2570
field bit HasDst32 = HasDst;
@@ -2628,14 +2635,14 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2628
2635
field dag Ins64 = getIns64<Src0RC64, Src1RC64, Src2RC64, NumSrcArgs,
2629
2636
HasClamp, HasModifiers, HasSrc2Mods,
2630
2637
HasOMod, Src0Mod, Src1Mod, Src2Mod,
2631
- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2638
+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
2632
2639
field dag InsVOP3P = getInsVOP3P<Src0RC64, Src1RC64, Src2RC64,
2633
2640
NumSrcArgs, HasClamp, HasOpSel, HasNeg,
2634
2641
Src0PackedMod, Src1PackedMod, Src2PackedMod>.ret;
2635
2642
field dag InsVOP3OpSel = getInsVOP3OpSel<Src0RC64, Src1RC64, Src2RC64,
2636
2643
NumSrcArgs, HasClamp, HasOMod,
2637
2644
Src0Mod, Src1Mod, Src2Mod,
2638
- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2645
+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
2639
2646
field dag InsDPP = !if(HasExtDPP,
2640
2647
getInsDPP<DstRCDPP, Src0DPP, Src1DPP, Src2DPP, NumSrcArgs,
2641
2648
HasModifiers, Src0ModDPP, Src1ModDPP, Src2ModDPP>.ret,
@@ -2648,7 +2655,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2648
2655
defvar InsVOP3DPPBase = getInsVOP3Base<Src0VOP3DPP, Src1VOP3DPP,
2649
2656
Src2VOP3DPP, NumSrcArgs, HasClamp, HasModifiers, HasSrc2Mods, HasOMod,
2650
2657
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP, HasOpSel,
2651
- HasFP8ByteSel, HasFP8DstByteSel>.ret;
2658
+ HasFP8ByteSel, HasFP8DstByteSel, HasBitOp3 >.ret;
2652
2659
defvar InsVOP3PDPPBase = getInsVOP3P<Src0VOP3DPP, Src1VOP3DPP,
2653
2660
Src2VOP3DPP, NumSrcArgs, HasClamp, HasOpSel, HasNeg,
2654
2661
Src0ModVOP3DPP, Src1ModVOP3DPP, Src2ModVOP3DPP>.ret;
@@ -2677,7 +2684,7 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2677
2684
field string AsmDPP8 = getAsmDPP8<HasDst, NumSrcArgs, 0 /*HasModifiers*/, DstVT>.ret;
2678
2685
field string AsmVOP3Base = getAsmVOP3Base<NumSrcArgs, HasDst, HasClamp,
2679
2686
HasOpSel, HasOMod, IsVOP3P, HasNeg, HasSrc0Mods, HasSrc1Mods,
2680
- HasSrc2Mods, DstVT, HasFP8ByteSel>.ret;
2687
+ HasSrc2Mods, DstVT, HasFP8ByteSel, HasBitOp3 >.ret;
2681
2688
field string Asm64 = AsmVOP3Base;
2682
2689
field string AsmVOP3P = getAsmVOP3P<HasDst, NumSrcArgs, HasNeg, HasClamp, HasOpSel>.ret;
2683
2690
field string AsmVOP3OpSel = getAsmVOP3OpSel<NumSrcArgs,
@@ -2686,7 +2693,8 @@ class VOPProfile <list<ValueType> _ArgVT, bit _EnableClamp = 0> {
2686
2693
HasSrc0FloatMods,
2687
2694
HasSrc1FloatMods,
2688
2695
HasSrc2FloatMods,
2689
- HasFP8ByteSel>.ret;
2696
+ HasFP8ByteSel,
2697
+ HasBitOp3>.ret;
2690
2698
field string AsmVOP3DPP = getAsmVOP3DPP<AsmVOP3Base>.ret;
2691
2699
field string AsmVOP3DPP16 = getAsmVOP3DPP16<AsmVOP3Base>.ret;
2692
2700
field string AsmVOP3DPP8 = getAsmVOP3DPP8<AsmVOP3Base>.ret;
0 commit comments