field bit HasSDWAOMod = isFloatType<DstVT>.ret;
field bit HasExt = getHasExt<NumSrcArgs, DstVT, Src0VT, Src1VT>.ret;
- field bit HasSDWA9 = HasExt;
+ field bit HasExtDPP = HasExt;
+ field bit HasExtSDWA = HasExt;
+ field bit HasExtSDWA9 = HasExt;
field int NeedPatGen = PatGenMode.NoPattern;
field Operand Src0PackedMod = !if(HasSrc0FloatMods, PackedF16InputMods, PackedI16InputMods);
class VOP_NO_EXT <VOPProfile p> : VOPProfile <p.ArgVT> {
let HasExt = 0;
- let HasSDWA9 = 0;
+ let HasExtDPP = 0;
+ let HasExtSDWA = 0;
+ let HasExtSDWA9 = 0;
}
class VOP_PAT_GEN <VOPProfile p, int mode=PatGenMode.Pattern> : VOPProfile <p.ArgVT> {
let AsmSDWA9 = getAsmSDWA9<1, 1, 2, vt>.ret;
let HasSrc2 = 0;
let HasSrc2Mods = 0;
+
let HasExt = 1;
- let HasSDWA9 = 0;
+ let HasExtDPP = 1;
+ let HasExtSDWA = 1;
+ let HasExtSDWA9 = 0;
}
def VOP_MAC_F16 : VOP_MAC <f16>;
dpp_ctrl:$dpp_ctrl, row_mask:$row_mask,
bank_mask:$bank_mask, bound_ctrl:$bound_ctrl);
let HasExt = 1;
- let HasSDWA9 = 1;
+ let HasExtDPP = 1;
+ let HasExtSDWA = 1;
+ let HasExtSDWA9 = 1;
}
// Read in from vcc or arbitrary SGPR
dpp_ctrl:$dpp_ctrl, row_mask:$row_mask,
bank_mask:$bank_mask, bound_ctrl:$bound_ctrl);
let HasExt = 1;
- let HasSDWA9 = 1;
+ let HasExtDPP = 1;
+ let HasExtSDWA = 1;
+ let HasExtSDWA9 = 1;
}
def VOP_READLANE : VOPProfile<[i32, i32, i32]> {
let Ins64 = Ins32;
let Asm32 = " $vdst, $src0, $src1";
let Asm64 = Asm32;
+
let HasExt = 0;
- let HasSDWA9 = 0;
+ let HasExtDPP = 0;
+ let HasExtSDWA = 0;
+ let HasExtSDWA9 = 0;
}
def VOP_WRITELANE : VOPProfile<[i32, i32, i32, i32]> {
let Ins64 = Ins32;
let Asm32 = " $vdst, $src0, $src1";
let Asm64 = Asm32;
- let HasExt = 0;
- let HasSDWA9 = 0;
let HasSrc2 = 0;
let HasSrc2Mods = 0;
+
+ let HasExt = 0;
+ let HasExtDPP = 0;
+ let HasExtSDWA = 0;
+ let HasExtSDWA9 = 0;
}
//===----------------------------------------------------------------------===//
let SDWA = 1;
let Uses = [EXEC];
- let SubtargetPredicate = !if(P.HasExt, HasSDWA, DisableInst);
- let AssemblerPredicate = !if(P.HasExt, HasSDWA, DisableInst);
- let AsmVariantName = !if(P.HasExt, AMDGPUAsmVariants.SDWA,
- AMDGPUAsmVariants.Disable);
+ let SubtargetPredicate = !if(P.HasExtSDWA, HasSDWA, DisableInst);
+ let AssemblerPredicate = !if(P.HasExtSDWA, HasSDWA, DisableInst);
+ let AsmVariantName = !if(P.HasExtSDWA, AMDGPUAsmVariants.SDWA,
+ AMDGPUAsmVariants.Disable);
let DecoderNamespace = "SDWA";
VOPProfile Pfl = P;
let Constraints = ps.Constraints;
let DisableEncoding = ps.DisableEncoding;
- let SubtargetPredicate = !if(ps.Pfl.HasSDWA9, HasSDWA9, DisableInst);
- let AssemblerPredicate = !if(ps.Pfl.HasSDWA9, HasSDWA9, DisableInst);
- let AsmVariantName = !if(ps.Pfl.HasSDWA9, AMDGPUAsmVariants.SDWA9,
- AMDGPUAsmVariants.Disable);
+ let SubtargetPredicate = !if(ps.Pfl.HasExtSDWA9, HasSDWA9, DisableInst);
+ let AssemblerPredicate = !if(ps.Pfl.HasExtSDWA9, HasSDWA9, DisableInst);
+ let AsmVariantName = !if(ps.Pfl.HasExtSDWA9, AMDGPUAsmVariants.SDWA9,
+ AMDGPUAsmVariants.Disable);
let DecoderNamespace = "SDWA9";
// Copy relevant pseudo op flags
let AsmMatchConverter = !if(!eq(P.HasModifiers,1), "cvtDPP", "");
let SubtargetPredicate = HasDPP;
- let AssemblerPredicate = !if(P.HasExt, HasDPP, DisableInst);
- let AsmVariantName = !if(P.HasExt, AMDGPUAsmVariants.DPP,
- AMDGPUAsmVariants.Disable);
+ let AssemblerPredicate = !if(P.HasExtDPP, HasDPP, DisableInst);
+ let AsmVariantName = !if(P.HasExtDPP, AMDGPUAsmVariants.DPP,
+ AMDGPUAsmVariants.Disable);
let Constraints = !if(P.NumSrcArgs, "$old = $vdst", "");
let DisableEncoding = !if(P.NumSrcArgs, "$old", "");
let DecoderNamespace = "DPP";