[TableGen][CodeGen] Remove DisableEncoding field of Instruction class (#156098)
I believe it became no-op with the removal of the "positionally encoded operands" functionality (b87dc356 is the last commit in the series). There are no changes in the generated files.
This commit is contained in:
parent
3e6ec475b7
commit
cc5e8967ab
@ -1129,7 +1129,7 @@ for your target. It has the following strengths:
|
||||
|
||||
def STWU : DForm_1<37, (outs ptr_rc:$ea_res), (ins GPRC:$rS, memri:$dst),
|
||||
"stwu $rS, $dst", LdStStoreUpd, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
|
||||
def : Pat<(pre_store GPRC:$rS, ptr_rc:$ptrreg, iaddroff:$ptroff),
|
||||
(STWU GPRC:$rS, iaddroff:$ptroff, ptr_rc:$ptrreg)>;
|
||||
|
||||
@ -735,10 +735,6 @@ class Instruction : InstructionEncoding {
|
||||
/// discussion of inline assembly constraint strings.
|
||||
string Constraints = "";
|
||||
|
||||
/// DisableEncoding - List of operand names (e.g. "$op1,$op2") that should not
|
||||
/// be encoded into the output machineinstr.
|
||||
string DisableEncoding = "";
|
||||
|
||||
string PostEncoderMethod = "";
|
||||
|
||||
/// Target-specific flags. This becomes the TSFlags field in TargetInstrDesc.
|
||||
|
||||
@ -132,7 +132,6 @@ class MTBUF_Real <MTBUF_Pseudo ps, string real_name = ps.Mnemonic> :
|
||||
let OtherPredicates = ps.OtherPredicates;
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let SchedRW = ps.SchedRW;
|
||||
let mayLoad = ps.mayLoad;
|
||||
@ -346,7 +345,6 @@ class MUBUF_Real <MUBUF_Pseudo ps, string real_name = ps.Mnemonic> :
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let OtherPredicates = ps.OtherPredicates;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let SchedRW = ps.SchedRW;
|
||||
@ -769,7 +767,6 @@ class MUBUF_AtomicRet_Pseudo<string opName, int addrKind,
|
||||
let sccb_value = 0;
|
||||
let IsAtomicRet = 1;
|
||||
let Constraints = "$vdata = $vdata_in";
|
||||
let DisableEncoding = "$vdata_in";
|
||||
}
|
||||
|
||||
multiclass MUBUF_Pseudo_Atomics_NO_RTN <string opName,
|
||||
@ -2414,7 +2411,6 @@ class VBUFFER_Real <bits<8> op, BUF_Pseudo ps, string real_name> :
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let OtherPredicates = ps.OtherPredicates;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let SchedRW = ps.SchedRW;
|
||||
|
||||
@ -76,7 +76,6 @@ class DS_Real <DS_Pseudo ps, string opName = ps.Mnemonic> :
|
||||
let isConvergent = ps.isConvergent;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// encoding fields
|
||||
bits<10> vdst;
|
||||
@ -276,7 +275,6 @@ class DS_BVH_STACK<string opName,
|
||||
data1_rc:$data1, Offset:$offset),
|
||||
" $vdst, $addr, $data0, $data1$offset"> {
|
||||
let Constraints = "$addr = $addr_in";
|
||||
let DisableEncoding = "$addr_in";
|
||||
let has_gds = 0;
|
||||
let gdsValue = 0;
|
||||
// TODO: Use MMOs in the LDS address space instead of hasSideEffects = 1.
|
||||
@ -293,7 +291,6 @@ class DS_1A_RET<string opName, RegisterClass rc = VGPR_32, bit HasTiedOutput = 0
|
||||
(ins VGPR_32:$addr, ofs:$offset, gds:$gds)),
|
||||
" $vdst, $addr$offset$gds"> {
|
||||
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
|
||||
let has_data0 = 0;
|
||||
let has_data1 = 0;
|
||||
}
|
||||
|
||||
@ -626,7 +626,6 @@ class R600_LDS_1A <bits<6> lds_op, string name, list<dag> pattern> : R600_LDS <
|
||||
|
||||
let usesCustomInserter = 1;
|
||||
let LDS_1A = 1;
|
||||
let DisableEncoding = "$dst";
|
||||
}
|
||||
|
||||
class R600_LDS_1A1D <bits<6> lds_op, dag outs, string name, list<dag> pattern,
|
||||
@ -646,6 +645,7 @@ class R600_LDS_1A1D <bits<6> lds_op, dag outs, string name, list<dag> pattern,
|
||||
let src2 = 0;
|
||||
let src2_rel = 0;
|
||||
let LDS_1A1D = 1;
|
||||
string DisableEncoding = "";
|
||||
}
|
||||
|
||||
class R600_LDS_1A1D_NORET <bits<6> lds_op, string name, list<dag> pattern> :
|
||||
@ -688,7 +688,6 @@ class R600_LDS_1A2D_RET <bits<6> lds_op, string name, list<dag> pattern> :
|
||||
|
||||
let BaseOp = name;
|
||||
let usesCustomInserter = 1;
|
||||
let DisableEncoding = "$dst";
|
||||
}
|
||||
|
||||
def LDS_ADD : R600_LDS_1A1D_NORET <0x0, "LDS_ADD", [] >;
|
||||
|
||||
@ -239,7 +239,6 @@ class FLAT_Load_Pseudo<
|
||||
let enabled_saddr = EnableSaddr;
|
||||
|
||||
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
|
||||
}
|
||||
|
||||
multiclass FLAT_Flat_Load_Pseudo<string opName, RegisterClass regClass, bit HasTiedInput = 0> {
|
||||
@ -335,7 +334,6 @@ class FLAT_Global_Load_AddTid_Pseudo <string opName, RegisterClass regClass,
|
||||
let enabled_saddr = EnableSaddr;
|
||||
|
||||
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
|
||||
}
|
||||
|
||||
multiclass FLAT_Global_Load_AddTid_Pseudo<string opName, RegisterClass regClass,
|
||||
@ -568,7 +566,6 @@ class FLAT_Scratch_Load_Pseudo <string opName, RegisterClass regClass,
|
||||
let sve = EnableVaddr;
|
||||
|
||||
let Constraints = !if(HasTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(HasTiedOutput, "$vdst_in", "");
|
||||
}
|
||||
|
||||
class FLAT_Scratch_Store_Pseudo <string opName, RegisterClass vdataClass, bit EnableSaddr = 0,
|
||||
|
||||
@ -123,7 +123,6 @@ class R600_1OP <bits<11> inst, string opName, list<dag> pattern,
|
||||
let HasNativeOperands = 1;
|
||||
let Op1 = 1;
|
||||
let ALUInst = 1;
|
||||
let DisableEncoding = "$literal";
|
||||
let UseNamedOperandTable = 1;
|
||||
|
||||
let Inst{31-0} = Word0;
|
||||
@ -161,7 +160,6 @@ class R600_2OP <bits<11> inst, string opName, list<dag> pattern,
|
||||
let HasNativeOperands = 1;
|
||||
let Op2 = 1;
|
||||
let ALUInst = 1;
|
||||
let DisableEncoding = "$literal";
|
||||
let UseNamedOperandTable = 1;
|
||||
|
||||
let Inst{31-0} = Word0;
|
||||
@ -201,7 +199,6 @@ class R600_3OP <bits<5> inst, string opName, list<dag> pattern,
|
||||
R600ALU_Word1_OP3<inst>{
|
||||
|
||||
let HasNativeOperands = 1;
|
||||
let DisableEncoding = "$literal";
|
||||
let Op3 = 1;
|
||||
let UseNamedOperandTable = 1;
|
||||
let ALUInst = 1;
|
||||
@ -1783,7 +1780,7 @@ def : DwordAddrPat <i32, R600_Reg32>;
|
||||
def getLDSNoRetOp : InstrMapping {
|
||||
let FilterClass = "R600_LDS_1A1D";
|
||||
let RowFields = ["BaseOp"];
|
||||
let ColFields = ["DisableEncoding"];
|
||||
let KeyCol = ["$dst"];
|
||||
let ValueCols = [[""""]];
|
||||
let ColFields = ["usesCustomInserter"];
|
||||
let KeyCol = ["1"];
|
||||
let ValueCols = [["0"]];
|
||||
}
|
||||
|
||||
@ -66,7 +66,7 @@ defm V_INTERP_P1_F32_16bank : V_INTERP_P1_F32_m;
|
||||
// Constraints = "@earlyclobber $vdst", isAsmParserOnly=1
|
||||
|
||||
let OtherPredicates = [isNotGFX90APlus] in {
|
||||
let DisableEncoding = "$src0", Constraints = "$src0 = $vdst" in {
|
||||
let Constraints = "$src0 = $vdst" in {
|
||||
|
||||
defm V_INTERP_P2_F32 : VINTRP_m <
|
||||
0x00000001,
|
||||
@ -77,7 +77,7 @@ defm V_INTERP_P2_F32 : VINTRP_m <
|
||||
[(set f32:$vdst, (int_amdgcn_interp_p2 f32:$src0, f32:$vsrc,
|
||||
(i32 timm:$attrchan), (i32 timm:$attr), M0))]>;
|
||||
|
||||
} // End DisableEncoding = "$src0", Constraints = "$src0 = $vdst"
|
||||
} // End Constraints = "$src0 = $vdst"
|
||||
|
||||
defm V_INTERP_MOV_F32 : VINTRP_m <
|
||||
0x00000002,
|
||||
|
||||
@ -295,7 +295,6 @@ class SM_Pseudo_Atomic<string opName,
|
||||
let has_soffset = offsets.HasSOffset;
|
||||
|
||||
let Constraints = !if(isRet, "$sdst = $sdata", "");
|
||||
let DisableEncoding = !if(isRet, "$sdata", "");
|
||||
}
|
||||
|
||||
multiclass SM_Pseudo_Atomics<RegisterClass baseClass,
|
||||
@ -678,7 +677,6 @@ class SMEM_Atomic_Real_vi <bits<8> op, SM_Atomic_Pseudo ps>
|
||||
bits<7> sdata;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
let cpol{CPolBit.GLC} = ps.glc;
|
||||
let Inst{12-6} = !if(ps.glc, sdst{6-0}, sdata{6-0});
|
||||
@ -1295,7 +1293,6 @@ class SMEM_Atomic_Real_gfx10 <bits<8> op, SM_Atomic_Pseudo ps>
|
||||
bits<7> sdata;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
let cpol{CPolBit.GLC} = ps.glc;
|
||||
|
||||
|
||||
@ -583,7 +583,6 @@ class SOP2_Real<SOP_Pseudo ps, string name = ps.Mnemonic> :
|
||||
let mayLoad = ps.mayLoad;
|
||||
let mayStore = ps.mayStore;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let Uses = ps.Uses;
|
||||
let Defs = ps.Defs;
|
||||
let isConvergent = ps.isConvergent;
|
||||
@ -934,7 +933,7 @@ let SubtargetPredicate = HasSALUFloatInsts, mayRaiseFPException = 1,
|
||||
>;
|
||||
} // End isReMaterializable = 1
|
||||
|
||||
let Constraints = "$sdst = $src2", DisableEncoding="$src2",
|
||||
let Constraints = "$sdst = $src2",
|
||||
isCommutable = 1, AddedComplexity = 20 in {
|
||||
def S_FMAC_F32 : SOP2_Pseudo<
|
||||
"s_fmac_f32", (outs SReg_32:$sdst),
|
||||
@ -949,7 +948,7 @@ let SubtargetPredicate = HasSALUFloatInsts, mayRaiseFPException = 1,
|
||||
"$sdst, $src0, $src1",
|
||||
[(set f16:$sdst, (UniformTernaryFrag<any_fma> SSrc_f16:$src0, SSrc_f16:$src1, SReg_32:$src2))]
|
||||
>;
|
||||
} // End Constraints = "$sdst = $src2", DisableEncoding="$src2",
|
||||
} // End Constraints = "$sdst = $src2",
|
||||
// isCommutable = 1, AddedComplexity = 20
|
||||
} // End SubtargetPredicate = HasSALUFloatInsts, mayRaiseFPException = 1,
|
||||
// Uses = [MODE], SchedRW = [WriteSFPU]
|
||||
@ -994,7 +993,6 @@ class SOPK_Real<SOPK_Pseudo ps, string name = ps.Mnemonic> :
|
||||
// copy relevant pseudo op flags
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let Constraints = ps.Constraints;
|
||||
let SchedRW = ps.SchedRW;
|
||||
let mayLoad = ps.mayLoad;
|
||||
@ -1116,8 +1114,7 @@ def S_CMPK_LT_U32 : SOPK_SCC <"s_cmpk_lt_u32", "s_cmp_lt_u32", 0>;
|
||||
def S_CMPK_LE_U32 : SOPK_SCC <"s_cmpk_le_u32", "s_cmp_le_u32", 0>;
|
||||
} // End isCompare = 1
|
||||
|
||||
let isCommutable = 1, DisableEncoding = "$src0",
|
||||
Constraints = "$sdst = $src0" in {
|
||||
let isCommutable = 1, Constraints = "$sdst = $src0" in {
|
||||
let Defs = [SCC] in
|
||||
def S_ADDK_I32 : SOPK_32TIE <"s_addk_i32">;
|
||||
def S_MULK_I32 : SOPK_32TIE <"s_mulk_i32">;
|
||||
|
||||
@ -71,7 +71,6 @@ class VOP1_Real <VOP1_Pseudo ps, int EncodingFamily, string real_name = ps.Mnemo
|
||||
let isCodeGenOnly = 0;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// copy relevant pseudo op flags
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
@ -80,7 +79,6 @@ class VOP1_Real <VOP1_Pseudo ps, int EncodingFamily, string real_name = ps.Mnemo
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let AsmVariantName = ps.AsmVariantName;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let Uses = ps.Uses;
|
||||
@ -584,7 +582,6 @@ def VOP_SWAP_I32 : VOPProfile<[i32, i32, untyped, untyped]> {
|
||||
let SubtargetPredicate = isGFX9Plus in {
|
||||
def V_SWAP_B32 : VOP1_Pseudo<"v_swap_b32", VOP_SWAP_I32, [], 1> {
|
||||
let Constraints = "$vdst = $src1, $vdst1 = $src0";
|
||||
let DisableEncoding = "$vdst1,$src1";
|
||||
let SchedRW = [Write64Bit, Write64Bit];
|
||||
}
|
||||
|
||||
@ -802,7 +799,6 @@ let SubtargetPredicate = isGFX10Plus in {
|
||||
|
||||
def V_SWAPREL_B32 : VOP1_Pseudo<"v_swaprel_b32", VOP_SWAP_I32, [], 1> {
|
||||
let Constraints = "$vdst = $src1, $vdst1 = $src0";
|
||||
let DisableEncoding = "$vdst1,$src1";
|
||||
let SchedRW = [Write64Bit, Write64Bit];
|
||||
}
|
||||
} // End Uses = [M0]
|
||||
@ -831,7 +827,6 @@ def VOP_SWAP_I16 : VOPProfile_True16<VOP_I16_I16> {
|
||||
let SubtargetPredicate = isGFX11Plus in {
|
||||
def V_SWAP_B16 : VOP1_Pseudo<"v_swap_b16", VOP_SWAP_I16, [], /* VOP1Only= */true> {
|
||||
let Constraints = "$vdst = $src1, $vdst1 = $src0";
|
||||
let DisableEncoding = "$vdst1, $src1";
|
||||
let SchedRW = [Write64Bit, Write64Bit];
|
||||
let True16Predicate = UseRealTrue16Insts;
|
||||
}
|
||||
@ -849,7 +844,6 @@ let SubtargetPredicate = HasPrngInst in
|
||||
defm V_PRNG_B32 : VOP1Inst <"v_prng_b32", VOP_I32_I32, int_amdgcn_prng_b32>;
|
||||
|
||||
let Constraints = "$vdst = $vdst_in, $src0_out = $src0",
|
||||
DisableEncoding="$vdst_in,$src0_out",
|
||||
SchedRW = [Write32Bit, Write32Bit],
|
||||
isConvergent = 1 in {
|
||||
let SubtargetPredicate = HasPermlane16Swap in {
|
||||
|
||||
@ -105,7 +105,6 @@ class VOP2_Real <VOP2_Pseudo ps, int EncodingFamily, string real_name = ps.Mnemo
|
||||
let isCodeGenOnly = 0;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// copy relevant pseudo op flags
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
@ -114,7 +113,6 @@ class VOP2_Real <VOP2_Pseudo ps, int EncodingFamily, string real_name = ps.Mnemo
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let AsmVariantName = ps.AsmVariantName;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let Uses = ps.Uses;
|
||||
@ -889,13 +887,13 @@ defm V_XOR_B32 : VOP2Inst <"v_xor_b32", VOP_PAT_GEN<VOP_I32_I32_I32>, xor>;
|
||||
|
||||
let mayRaiseFPException = 0 in {
|
||||
let OtherPredicates = [HasMadMacF32Insts] in {
|
||||
let Constraints = "$vdst = $src2", DisableEncoding="$src2",
|
||||
let Constraints = "$vdst = $src2",
|
||||
isConvertibleToThreeAddress = 1 in {
|
||||
defm V_MAC_F32 : VOP2Inst <"v_mac_f32", VOP_MAC_F32>;
|
||||
|
||||
let SubtargetPredicate = isGFX6GFX7GFX10 in
|
||||
defm V_MAC_LEGACY_F32 : VOP2Inst <"v_mac_legacy_f32", VOP_MAC_LEGACY_F32>;
|
||||
} // End Constraints = "$vdst = $src2", DisableEncoding="$src2",
|
||||
} // End Constraints = "$vdst = $src2",
|
||||
// isConvertibleToThreeAddress = 1
|
||||
|
||||
let isReMaterializable = 1 in
|
||||
@ -941,9 +939,9 @@ defm V_MUL_U64 : VOP2Inst <"v_mul_u64", VOP_I64_I64_I64, DivergentBinFrag<mul>>;
|
||||
// These are special and do not read the exec mask.
|
||||
let isConvergent = 1, Uses = []<Register> in {
|
||||
def V_READLANE_B32 : VOP2_Pseudo<"v_readlane_b32", VOP_READLANE, []>;
|
||||
let IsNeverUniform = 1, Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in {
|
||||
let IsNeverUniform = 1, Constraints = "$vdst = $vdst_in" in {
|
||||
def V_WRITELANE_B32 : VOP2_Pseudo<"v_writelane_b32", VOP_WRITELANE, []>;
|
||||
} // End IsNeverUniform, $vdst = $vdst_in, DisableEncoding $vdst_in
|
||||
} // End IsNeverUniform, $vdst = $vdst_in
|
||||
} // End isConvergent = 1
|
||||
|
||||
foreach vt = Reg32Types.types in {
|
||||
@ -1175,7 +1173,6 @@ let True16Predicate = UseFakeTrue16Insts in {
|
||||
} // End FPDPRounding = 1, isReMaterializable = 1, FixedSize = 1
|
||||
|
||||
let Constraints = "$vdst = $src2",
|
||||
DisableEncoding="$src2",
|
||||
isConvertibleToThreeAddress = 1,
|
||||
isCommutable = 1 in {
|
||||
let SubtargetPredicate = isGFX10Plus in {
|
||||
@ -1209,7 +1206,7 @@ let SubtargetPredicate = isGFX8GFX9 in {
|
||||
} // End isReMaterializable = 1
|
||||
|
||||
// FIXME: Missing FPDPRounding
|
||||
let Constraints = "$vdst = $src2", DisableEncoding="$src2",
|
||||
let Constraints = "$vdst = $src2",
|
||||
isConvertibleToThreeAddress = 1, isCommutable = 1 in {
|
||||
defm V_MAC_F16 : VOP2Inst <"v_mac_f16", VOP_MAC_F16>;
|
||||
}
|
||||
@ -1252,7 +1249,6 @@ def : GCNPat<
|
||||
>;
|
||||
|
||||
let Constraints = "$vdst = $src2",
|
||||
DisableEncoding = "$src2",
|
||||
isConvertibleToThreeAddress = 1,
|
||||
isCommutable = 1 in
|
||||
defm V_FMAC_F32 : VOP2Inst_VOPD <"v_fmac_f32", VOP_MAC_F32, 0x0, "v_fmac_f32">;
|
||||
@ -1261,7 +1257,6 @@ defm V_FMAC_F32 : VOP2Inst_VOPD <"v_fmac_f32", VOP_MAC_F32, 0x0, "v_fmac_f32">;
|
||||
let SubtargetPredicate = HasFmaLegacy32 in {
|
||||
|
||||
let Constraints = "$vdst = $src2",
|
||||
DisableEncoding = "$src2",
|
||||
isConvertibleToThreeAddress = 1,
|
||||
isCommutable = 1 in
|
||||
defm V_FMAC_LEGACY_F32 : VOP2Inst <"v_fmac_legacy_f32", VOP_MAC_LEGACY_F32>;
|
||||
@ -1270,14 +1265,12 @@ defm V_FMAC_LEGACY_F32 : VOP2Inst <"v_fmac_legacy_f32", VOP_MAC_LEGACY_F32>;
|
||||
|
||||
let SubtargetPredicate = HasFmacF64Inst,
|
||||
Constraints = "$vdst = $src2",
|
||||
DisableEncoding="$src2",
|
||||
isConvertibleToThreeAddress = 1,
|
||||
isCommutable = 1,
|
||||
SchedRW = [WriteDoubleAdd] in
|
||||
defm V_FMAC_F64 : VOP2Inst <"v_fmac_f64", VOP_MAC_F64>;
|
||||
|
||||
let Constraints = "$vdst = $src2",
|
||||
DisableEncoding="$src2",
|
||||
isConvertibleToThreeAddress = 1,
|
||||
isCommutable = 1,
|
||||
IsDOT = 1 in {
|
||||
|
||||
@ -782,7 +782,7 @@ defm V_LSHL_ADD_U64 : VOP3Inst <"v_lshl_add_u64", V_LSHL_ADD_U64_PROF>;
|
||||
|
||||
let OtherPredicates = [HasFP8ConversionInsts], mayRaiseFPException = 0,
|
||||
SchedRW = [WriteFloatCvt] in {
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding = "$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
let OtherPredicates = [HasFP8ConversionInsts, NotHasFP8E5M3Insts] in
|
||||
defm V_CVT_PK_FP8_F32 : VOP3Inst_t16_with_profiles<"v_cvt_pk_fp8_f32", VOP3_CVT_PK_F8_F32_Profile<>,
|
||||
VOP3_CVT_PK_F8_F32_Profile_t16<>,
|
||||
@ -807,7 +807,7 @@ let OtherPredicates = [HasFP8ConversionInsts], mayRaiseFPException = 0,
|
||||
// These instructions have non-standard use of op_sel. In particular they are
|
||||
// using op_sel bits 2 and 3 while only having two sources. Therefore dummy
|
||||
// src2 is used to hold the op_sel value.
|
||||
let Constraints = "$vdst = $src2", DisableEncoding = "$src2", SubtargetPredicate = isGFX940Plus in {
|
||||
let Constraints = "$vdst = $src2", SubtargetPredicate = isGFX940Plus in {
|
||||
defm V_CVT_SR_FP8_F32 : VOP3Inst<"v_cvt_sr_fp8_f32", VOP3_CVT_SR_F8_F32_Profile>;
|
||||
defm V_CVT_SR_BF8_F32 : VOP3Inst<"v_cvt_sr_bf8_f32", VOP3_CVT_SR_F8_F32_Profile>;
|
||||
}
|
||||
@ -1309,7 +1309,7 @@ class VOP3_CVT_SCALEF32_PK_F864_Profile<VOPProfile P> : VOP3_Profile<P> {
|
||||
}
|
||||
|
||||
let SubtargetPredicate = HasFP8ConversionScaleInsts, mayRaiseFPException = 0 in {
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_CVT_SCALEF32_SR_FP8_BF16 : VOP3Inst<"v_cvt_scalef32_sr_fp8_bf16", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_BF16_I32_F32>>;
|
||||
defm V_CVT_SCALEF32_SR_FP8_F16 : VOP3Inst<"v_cvt_scalef32_sr_fp8_f16", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_F16_I32_F32>>;
|
||||
defm V_CVT_SCALEF32_SR_FP8_F32 : VOP3Inst<"v_cvt_scalef32_sr_fp8_f32", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_F32_I32_F32>>;
|
||||
@ -1325,7 +1325,7 @@ let SubtargetPredicate = HasFP8ConversionScaleInsts, mayRaiseFPException = 0 in
|
||||
}
|
||||
|
||||
let SubtargetPredicate = HasBF8ConversionScaleInsts, mayRaiseFPException = 0 in {
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_CVT_SCALEF32_SR_BF8_BF16 : VOP3Inst<"v_cvt_scalef32_sr_bf8_bf16", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_BF16_I32_F32>>;
|
||||
defm V_CVT_SCALEF32_SR_BF8_F16 : VOP3Inst<"v_cvt_scalef32_sr_bf8_f16", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_F16_I32_F32>>;
|
||||
defm V_CVT_SCALEF32_SR_BF8_F32 : VOP3Inst<"v_cvt_scalef32_sr_bf8_f32", VOP3_CVT_SCALE_SR_F8BF8_F16BF16F32_TiedInput_Profile<VOP_I32_F32_I32_F32>>;
|
||||
@ -1342,7 +1342,7 @@ let SubtargetPredicate = HasBF8ConversionScaleInsts, mayRaiseFPException = 0 in
|
||||
|
||||
let SubtargetPredicate = HasFP4ConversionScaleInsts, mayRaiseFPException = 0 in {
|
||||
defm V_CVT_SCALEF32_PK_F32_FP4 : VOP3Inst<"v_cvt_scalef32_pk_f32_fp4", VOP3_CVT_SCALE_PK_F16BF16F32_FP4FP8BF8_Profile<v2f32>>;
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_CVT_SCALEF32_PK_FP4_F32 : VOP3Inst<"v_cvt_scalef32_pk_fp4_f32", VOP3_CVT_SCALE_FP4_F32_TiedInput_Profile<VOP_I32_F32_F32_F32>>;
|
||||
let Constraints = "@earlyclobber $vdst" in {
|
||||
defm V_CVT_SCALEF32_SR_PK_FP4_F16: VOP3Inst<"v_cvt_scalef32_sr_pk_fp4_f16", VOP3_CVT_SCALE_SR_PK_F4_F16BF16_TiedInput_Profile<v2f16>>;
|
||||
@ -1358,7 +1358,7 @@ let SubtargetPredicate = HasFP4ConversionScaleInsts, mayRaiseFPException = 0 in
|
||||
|
||||
// These instructions have non-standard use of op_sel. In particular they are
|
||||
// using op_sel bits 2 and 3 while only having two sources.
|
||||
let Constraints = "$vdst = $src2", DisableEncoding = "$src2" in {
|
||||
let Constraints = "$vdst = $src2" in {
|
||||
defm V_CVT_SCALEF32_PK_FP4_F16 : VOP3Inst<"v_cvt_scalef32_pk_fp4_f16", VOP3_CVT_SCALE_FP4_F16BF16_TiedInput_Profile<VOP_I32_V2F16_F32_F32>>;
|
||||
defm V_CVT_SCALEF32_PK_FP4_BF16 : VOP3Inst<"v_cvt_scalef32_pk_fp4_bf16", VOP3_CVT_SCALE_FP4_F16BF16_TiedInput_Profile<VOP_I32_V2BF16_F32_F32>>;
|
||||
}
|
||||
@ -1486,10 +1486,10 @@ let SubtargetPredicate = isGFX10Plus in {
|
||||
} // End isCommutable = 1, isReMaterializable = 1
|
||||
def : ThreeOp_i32_Pats<xor, xor, V_XOR3_B32_e64>;
|
||||
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in", isConvergent = 1 in {
|
||||
let Constraints = "$vdst = $vdst_in", isConvergent = 1 in {
|
||||
defm V_PERMLANE16_B32 : VOP3Inst<"v_permlane16_b32", VOP3_PERMLANE_Profile>;
|
||||
defm V_PERMLANEX16_B32 : VOP3Inst<"v_permlanex16_b32", VOP3_PERMLANE_Profile>;
|
||||
} // End $vdst = $vdst_in, DisableEncoding $vdst_in, isConvergent = 1
|
||||
} // End $vdst = $vdst_in, isConvergent = 1
|
||||
|
||||
foreach vt = Reg32Types.types in {
|
||||
def : PermlanePat<int_amdgcn_permlane16, V_PERMLANE16_B32_e64, vt>;
|
||||
@ -1532,10 +1532,10 @@ let True16Predicate = UseFakeTrue16Insts in {
|
||||
} // End True16Predicate = UseFakeTrue16Insts
|
||||
|
||||
let SubtargetPredicate = isGFX12Plus in {
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding="$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_PERMLANE16_VAR_B32 : VOP3Inst<"v_permlane16_var_b32", VOP3_PERMLANE_VAR_Profile>;
|
||||
defm V_PERMLANEX16_VAR_B32 : VOP3Inst<"v_permlanex16_var_b32", VOP3_PERMLANE_VAR_Profile>;
|
||||
} // End $vdst = $vdst_in, DisableEncoding $vdst_in
|
||||
} // End $vdst = $vdst_in
|
||||
|
||||
def : PermlaneVarPat<int_amdgcn_permlane16_var, V_PERMLANE16_VAR_B32_e64>;
|
||||
def : PermlaneVarPat<int_amdgcn_permlanex16_var, V_PERMLANEX16_VAR_B32_e64>;
|
||||
@ -1763,7 +1763,7 @@ let SubtargetPredicate = isGFX1250Plus in {
|
||||
|
||||
// These instructions have non-standard use of op_sel. They are using bits 2 and 3 of opsel
|
||||
// to select a byte in the vdst. Bits 0 and 1 are unused.
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding = "$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_CVT_SR_FP8_F16 : VOP3Inst_t16_with_profiles<"v_cvt_sr_fp8_f16", VOP3_CVT_SR_F8_F16_Profile,
|
||||
VOP3_CVT_SR_F8_F16_True16_Profile, VOP3_CVT_SR_F8_F16_Fake16_Profile>;
|
||||
defm V_CVT_SR_BF8_F16 : VOP3Inst_t16_with_profiles<"v_cvt_sr_bf8_f16", VOP3_CVT_SR_F8_F16_Profile,
|
||||
@ -1850,7 +1850,7 @@ class Cvt_Scale_Sr_F32ToBF16F16_Pat<SDPatternOperator node, VOP3_Pseudo inst, Va
|
||||
>;
|
||||
|
||||
let SubtargetPredicate = HasF32ToF16BF16ConversionSRInsts in {
|
||||
let Constraints = "$vdst = $vdst_in", DisableEncoding = "$vdst_in" in {
|
||||
let Constraints = "$vdst = $vdst_in" in {
|
||||
defm V_CVT_SR_F16_F32 : VOP3Inst<"v_cvt_sr_f16_f32", VOP3_CVT_SR_FP16_TiedInput_Profile<VOP_F16_F32_I32>>;
|
||||
defm V_CVT_SR_BF16_F32 : VOP3Inst<"v_cvt_sr_bf16_f32", VOP3_CVT_SR_FP16_TiedInput_Profile<VOP_BF16_F32_I32>>;
|
||||
}
|
||||
|
||||
@ -84,7 +84,6 @@ multiclass VOP3PInst<string OpName, VOPProfile P,
|
||||
multiclass VOP3_VOP3PInst<string OpName, VOP3P_Mix_Profile P> {
|
||||
def NAME : VOP3P_Pseudo<OpName, P> {
|
||||
let Constraints = !if(P.UseTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(P.UseTiedOutput, "$vdst_in", "");
|
||||
}
|
||||
let SubtargetPredicate = isGFX11Plus in {
|
||||
if P.HasExtVOP3DPP then
|
||||
@ -92,7 +91,6 @@ multiclass VOP3_VOP3PInst<string OpName, VOP3P_Mix_Profile P> {
|
||||
let VOP3P = 1;
|
||||
let PseudoInstr = OpName#"_dpp";
|
||||
let Constraints = !if(P.UseTiedOutput, "$vdst = $vdst_in", "");
|
||||
let DisableEncoding = !if(P.UseTiedOutput, "$vdst_in", "");
|
||||
}
|
||||
} // end SubtargetPredicate = isGFX11Plus
|
||||
}
|
||||
@ -1166,7 +1164,7 @@ let SubtargetPredicate = HasFP8Insts, is_gfx940_xdl = 1 in {
|
||||
} // End SubtargetPredicate = HasFP8Insts, is_gfx940_xdl = 1
|
||||
|
||||
multiclass SMFMACInst<string OpName, string P, SDPatternOperator node> {
|
||||
let Constraints = "$vdst = $src2", DisableEncoding = "$src2",
|
||||
let Constraints = "$vdst = $src2",
|
||||
isConvergent = 1, mayRaiseFPException = 0, ReadsModeReg = 1, is_gfx940_xdl = 1 in {
|
||||
def _e64 : MAIInst<OpName, !cast<VOPProfileSMFMAC>("VOPProfileSMFMAC_" # P), node>;
|
||||
}
|
||||
|
||||
@ -251,7 +251,6 @@ class VOPC_Real <VOPC_Pseudo ps, int EncodingFamily, string asm_name = ps.Pseudo
|
||||
let isCodeGenOnly = 0;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// copy relevant pseudo op flags
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
@ -259,7 +258,6 @@ class VOPC_Real <VOPC_Pseudo ps, int EncodingFamily, string asm_name = ps.Pseudo
|
||||
let OtherPredicates = ps.OtherPredicates;
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let Uses = ps.Uses;
|
||||
|
||||
@ -138,10 +138,6 @@ class VOPD_Base<dag outs, dag ins, string asm, VOP_Pseudo VDX, VOP_Pseudo VDY,
|
||||
string ConstraintsY = !if(hasSrc2AccY, "$src2Y = $vdstY", "");
|
||||
let Constraints =
|
||||
ConstraintsX # !if(!and(hasSrc2AccX, hasSrc2AccY), ", ", "") # ConstraintsY;
|
||||
string DisableEncodingX = !if(hasSrc2AccX, "$src2X", "");
|
||||
string DisableEncodingY = !if(hasSrc2AccY, "$src2Y", "");
|
||||
let DisableEncoding =
|
||||
DisableEncodingX # !if(!and(hasSrc2AccX, hasSrc2AccY), ", ", "") # DisableEncodingY;
|
||||
|
||||
let Uses = RegListUnion<VDX.Uses, VDY.Uses>.ret;
|
||||
let Defs = RegListUnion<VDX.Defs, VDY.Defs>.ret;
|
||||
|
||||
@ -187,7 +187,6 @@ class VOP3_Real <VOP_Pseudo ps, int EncodingFamily, string asm_name = ps.Mnemoni
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let AsmVariantName = ps.AsmVariantName;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let Uses = ps.Uses;
|
||||
@ -807,7 +806,6 @@ class VOP_SDWA8_Real <VOP_SDWA_Pseudo ps> :
|
||||
let hasSideEffects = ps.hasSideEffects;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// Copy relevant pseudo op flags
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
@ -817,7 +815,6 @@ class VOP_SDWA8_Real <VOP_SDWA_Pseudo ps> :
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let DecoderNamespace = ps.DecoderNamespace;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let Uses = ps.Uses;
|
||||
let Defs = ps.Defs;
|
||||
@ -841,7 +838,6 @@ class Base_VOP_SDWA9_Real <VOP_SDWA_Pseudo ps> :
|
||||
let hasSideEffects = ps.hasSideEffects;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
let SubtargetPredicate = ps.SubtargetPredicate;
|
||||
let AssemblerPredicate = HasSDWA9;
|
||||
@ -854,7 +850,6 @@ class Base_VOP_SDWA9_Real <VOP_SDWA_Pseudo ps> :
|
||||
let AsmMatchConverter = ps.AsmMatchConverter;
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let Uses = ps.Uses;
|
||||
let Defs = ps.Defs;
|
||||
@ -1037,7 +1032,6 @@ class VOP_DPP_Pseudo <string OpName, VOPProfile P, list<dag> pattern=[],
|
||||
let AsmVariantName = !if(P.HasExtDPP, AMDGPUAsmVariants.DPP,
|
||||
AMDGPUAsmVariants.Disable);
|
||||
let Constraints = !if(P.NumSrcArgs, P.TieRegDPP # " = $vdst", "");
|
||||
let DisableEncoding = !if(P.NumSrcArgs, P.TieRegDPP, "");
|
||||
let DecoderNamespace = "GFX8";
|
||||
}
|
||||
|
||||
@ -1066,7 +1060,6 @@ class VOP_DPP_Real <VOP_DPP_Pseudo ps, int EncodingFamily> :
|
||||
let hasSideEffects = ps.hasSideEffects;
|
||||
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
|
||||
// Copy relevant pseudo op flags
|
||||
let isConvergent = ps.isConvergent;
|
||||
@ -1079,7 +1072,6 @@ class VOP_DPP_Real <VOP_DPP_Pseudo ps, int EncodingFamily> :
|
||||
let UseNamedOperandTable = ps.UseNamedOperandTable;
|
||||
let DecoderNamespace = ps.DecoderNamespace;
|
||||
let Constraints = ps.Constraints;
|
||||
let DisableEncoding = ps.DisableEncoding;
|
||||
let TSFlags = ps.TSFlags;
|
||||
let Uses = ps.Uses;
|
||||
let Defs = ps.Defs;
|
||||
@ -1109,7 +1101,6 @@ class VOP_DPP_Base <string OpName, VOPProfile P,
|
||||
let AsmVariantName = !if(P.HasExtDPP, AMDGPUAsmVariants.DPP,
|
||||
AMDGPUAsmVariants.Disable);
|
||||
let Constraints = !if(P.NumSrcArgs, P.TieRegDPP # " = $vdst", "");
|
||||
let DisableEncoding = !if(P.NumSrcArgs, P.TieRegDPP, "");
|
||||
let DecoderNamespace = "GFX8";
|
||||
}
|
||||
|
||||
@ -1228,7 +1219,6 @@ class VOP_DPP8_Base<string OpName, VOPProfile P, dag InsDPP8 = P.InsDPP8, string
|
||||
let AssemblerPredicate = HasDPP8;
|
||||
let AsmVariantName = AMDGPUAsmVariants.DPP;
|
||||
let Constraints = !if(P.NumSrcArgs, P.TieRegDPP # " = $vdst", "");
|
||||
let DisableEncoding = !if(P.NumSrcArgs, P.TieRegDPP, "");
|
||||
}
|
||||
|
||||
class VOP_DPP8<string OpName, VOPProfile P> :
|
||||
|
||||
@ -1095,8 +1095,7 @@ let hasSideEffects = 0 in {
|
||||
defm RLDIMI : MDForm_1r<30, 3, (outs g8rc:$RA),
|
||||
(ins g8rc:$RAi, g8rc:$RS, u6imm:$SH, u6imm:$MBE),
|
||||
"rldimi", "$RA, $RS, $SH, $MBE", IIC_IntRotateDI,
|
||||
[]>, isPPC64, RegConstraint<"$RAi = $RA">,
|
||||
NoEncode<"$RAi">;
|
||||
[]>, isPPC64, RegConstraint<"$RAi = $RA">;
|
||||
|
||||
// Rotate instructions.
|
||||
defm RLDCL : MDSForm_1r<30, 8,
|
||||
@ -1156,7 +1155,7 @@ defm RLWIMI8 : MForm_2r<20, (outs g8rc:$RA),
|
||||
(ins g8rc:$RAi, g8rc:$RS, u5imm:$SH, u5imm:$MB,
|
||||
u5imm:$ME), "rlwimi", "$RA, $RS, $SH, $MB, $ME",
|
||||
IIC_IntRotate, []>, PPC970_DGroup_Cracked,
|
||||
RegConstraint<"$RAi = $RA">, NoEncode<"$RAi">;
|
||||
RegConstraint<"$RAi = $RA">;
|
||||
|
||||
let isSelect = 1 in
|
||||
def ISEL8 : AForm_4<31, 15,
|
||||
@ -1313,21 +1312,18 @@ let Interpretation64Bit = 1, isCodeGenOnly = 1 in
|
||||
def LHAU8 : DForm_1<43, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memri $D, $RA):$addr),
|
||||
"lhau $RST, $addr", IIC_LdStLHAU,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
// NO LWAU!
|
||||
|
||||
let Interpretation64Bit = 1, isCodeGenOnly = 1 in
|
||||
def LHAUX8 : XForm_1_memOp<31, 375, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lhaux $RST, $addr", IIC_LdStLHAUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
def LWAUX : XForm_1_memOp<31, 373, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lwaux $RST, $addr", IIC_LdStLHAUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">, isPPC64;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">, isPPC64;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1366,34 +1362,28 @@ let mayLoad = 1, hasSideEffects = 0 in {
|
||||
def LBZU8 : DForm_1<35, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memri $D, $RA):$addr),
|
||||
"lbzu $RST, $addr", IIC_LdStLoadUpd,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
def LHZU8 : DForm_1<41, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memri $D, $RA):$addr),
|
||||
"lhzu $RST, $addr", IIC_LdStLoadUpd,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
def LWZU8 : DForm_1<33, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memri $D, $RA):$addr),
|
||||
"lwzu $RST, $addr", IIC_LdStLoadUpd,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
|
||||
def LBZUX8 : XForm_1_memOp<31, 119, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lbzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
def LHZUX8 : XForm_1_memOp<31, 311, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lhzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
def LWZUX8 : XForm_1_memOp<31, 55, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lwzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
}
|
||||
}
|
||||
} // Interpretation64Bit
|
||||
@ -1445,14 +1435,12 @@ let mayLoad = 1, hasSideEffects = 0 in {
|
||||
def LDU : DSForm_1<58, 1, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrix $D, $RA):$addr),
|
||||
"ldu $RST, $addr", IIC_LdStLDU,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">, isPPC64,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">, isPPC64;
|
||||
|
||||
def LDUX : XForm_1_memOp<31, 53, (outs g8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"ldux $RST, $addr", IIC_LdStLDUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">, isPPC64;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">, isPPC64;
|
||||
}
|
||||
|
||||
let mayLoad = 1, hasNoSchedulingInfo = 1 in {
|
||||
@ -1718,45 +1706,41 @@ let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {
|
||||
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
|
||||
def STBU8 : DForm_1<39, (outs ptr_rc_nor0:$ea_res), (ins g8rc:$RST, (memri $D, $RA):$addr),
|
||||
"stbu $RST, $addr", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$addr.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$addr.reg = $ea_res">;
|
||||
def STHU8 : DForm_1<45, (outs ptr_rc_nor0:$ea_res), (ins g8rc:$RST, (memri $D, $RA):$addr),
|
||||
"sthu $RST, $addr", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$addr.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$addr.reg = $ea_res">;
|
||||
def STWU8 : DForm_1<37, (outs ptr_rc_nor0:$ea_res), (ins g8rc:$RST, (memri $D, $RA):$addr),
|
||||
"stwu $RST, $addr", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$addr.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$addr.reg = $ea_res">;
|
||||
|
||||
def STBUX8: XForm_8_memOp<31, 247, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins g8rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stbux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
def STHUX8: XForm_8_memOp<31, 439, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins g8rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"sthux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
def STWUX8: XForm_8_memOp<31, 183, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins g8rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stwux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
} // Interpretation64Bit
|
||||
|
||||
def STDU : DSForm_1<62, 1, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins g8rc:$RST, (memrix $D, $RA):$addr),
|
||||
"stdu $RST, $addr", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$addr.reg = $ea_res">, NoEncode<"$ea_res">,
|
||||
RegConstraint<"$addr.reg = $ea_res">,
|
||||
isPPC64;
|
||||
|
||||
def STDUX : XForm_8_memOp<31, 181, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins g8rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stdux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked, isPPC64;
|
||||
}
|
||||
|
||||
|
||||
@ -1471,13 +1471,13 @@ def VINSERTB : VXForm_1<781, (outs vrrc:$VD),
|
||||
"vinsertb $VD, $VB, $VA", IIC_VecGeneral,
|
||||
[(set v16i8:$VD, (PPCvecinsert v16i8:$VDi, v16i8:$VB,
|
||||
imm32SExt16:$VA))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VINSERTH : VXForm_1<845, (outs vrrc:$VD),
|
||||
(ins vrrc:$VDi, u4imm:$VA, vrrc:$VB),
|
||||
"vinserth $VD, $VB, $VA", IIC_VecGeneral,
|
||||
[(set v8i16:$VD, (PPCvecinsert v8i16:$VDi, v8i16:$VB,
|
||||
imm32SExt16:$VA))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VINSERTW : VX1_VT5_UIM5_VB5<909, "vinsertw", []>;
|
||||
def VINSERTD : VX1_VT5_UIM5_VB5<973, "vinsertd", []>;
|
||||
|
||||
@ -1569,7 +1569,7 @@ def VRLWMI : VXForm_1<133, (outs vrrc:$VD), (ins vrrc:$VA, vrrc:$VB, vrrc:$VDi),
|
||||
[(set v4i32:$VD,
|
||||
(int_ppc_altivec_vrlwmi v4i32:$VA, v4i32:$VB,
|
||||
v4i32:$VDi))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VRLDNM : VX1_VT5_VA5_VB5<453, "vrldnm",
|
||||
[(set v2i64:$VD,
|
||||
(int_ppc_altivec_vrldnm v2i64:$VA,
|
||||
@ -1579,7 +1579,7 @@ def VRLDMI : VXForm_1<197, (outs vrrc:$VD), (ins vrrc:$VA, vrrc:$VB, vrrc:$VDi),
|
||||
[(set v2i64:$VD,
|
||||
(int_ppc_altivec_vrldmi v2i64:$VA, v2i64:$VB,
|
||||
v2i64:$VDi))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
|
||||
// Vector Shift Left/Right
|
||||
def VSLV : VX1_VT5_VA5_VB5<1860, "vslv",
|
||||
|
||||
@ -167,7 +167,7 @@ multiclass DMR_UM_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
def PP :
|
||||
XX3Form_AT3_XAp5B6<opcode, xo, (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -189,7 +189,7 @@ multiclass DMR_UM_M448_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -203,7 +203,7 @@ multiclass DMR_BF16_UM_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
def PP :
|
||||
XX3Form_AT3_XAp5B6<opcode, xo, (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ multiclass DMR_BF16_UM_M284_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asm
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -245,7 +245,7 @@ multiclass DMR_F16_UM_M284_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmb
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -256,15 +256,15 @@ multiclass DMR_NEG_UM_M284_XOXORf939a0<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
def PN : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0xF9), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NP : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0x39), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NN : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0xA0), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
|
||||
def PM#NAME#PN :
|
||||
@ -273,21 +273,21 @@ multiclass DMR_NEG_UM_M284_XOXORf939a0<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NP :
|
||||
MMIRR_XX3Form_X8Y4P2_XAp5B6<
|
||||
opcode, !xor(xo, 0x39), (outs dmr:$AT),
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NN :
|
||||
MMIRR_XX3Form_X8Y4P2_XAp5B6<
|
||||
opcode, !xor(xo, 0xA0), (outs dmr:$AT),
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -298,15 +298,15 @@ multiclass DMR_NEG_UM_M284_XOXORd11188<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
def PN : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0xD1), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NP : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0x11), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NN : XX3Form_AT3_XAp5B6<
|
||||
opcode, !xor(xo, 0x88), (outs dmr:$AT), !con((ins dmr:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
|
||||
def PM#NAME#PN :
|
||||
@ -315,21 +315,21 @@ multiclass DMR_NEG_UM_M284_XOXORd11188<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NP :
|
||||
MMIRR_XX3Form_X8Y4P2_XAp5B6<
|
||||
opcode, !xor(xo, 0x11), (outs dmr:$AT),
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NN :
|
||||
MMIRR_XX3Form_X8Y4P2_XAp5B6<
|
||||
opcode, !xor(xo, 0x88), (outs dmr:$AT),
|
||||
!con((ins dmr:$ATi), !con(IOL, (ins u8imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ let Predicates = [IsISAFuture] in {
|
||||
def DMXOR : XForm_ATB3<31, 7, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB),
|
||||
"dmxor $AT, $AB",
|
||||
[(set v1024i1:$AT, (int_ppc_mma_dmxor v1024i1:$ATi, v1024i1:$AB))]>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
|
||||
def DMSETDMRZ : XForm_AT3<31, 2, 177, (outs dmr:$AT), (ins),
|
||||
"dmsetdmrz $AT", NoItinerary,
|
||||
@ -449,7 +449,7 @@ let Predicates = [MMA, IsISAFuture] in {
|
||||
def DMXVI8GERX4SPP :
|
||||
XX3Form_AT3_XAp5B6<59, 98, (outs dmr:$AT), (ins dmr:$ATi, vsrprc:$XAp, vsrc:$XB),
|
||||
"dmxvi8gerx4spp $AT, $XAp, $XB", IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
|
||||
@ -459,7 +459,7 @@ let Predicates = [MMA, PrefixInstrs, IsISAFuture] in {
|
||||
u4imm:$YMSK, u4imm:$PMSK),
|
||||
"pmdmxvi8gerx4spp $AT, $XAp, $XB, $XMSK, $YMSK, $PMSK",
|
||||
IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
|
||||
// DMXVBF16GERX2, DMXVBF16GERX2PP, DMXVBF16GERX2PN, dMXVBF16GERX2NP, DMXVBF16GERX2NN
|
||||
@ -478,19 +478,19 @@ let Predicates = [IsISAFuture] in {
|
||||
XForm_AT3_T1_AB3<31, 14, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB, u1imm:$T),
|
||||
"dmsha2hash $AT, $AB, $T",
|
||||
[(set v1024i1:$AT, (int_ppc_mma_dmsha2hash v1024i1:$ATi, v1024i1:$AB, timm:$T))]>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
|
||||
def DMSHA3HASH :
|
||||
XForm_ATp2_SR5<31, 15, 177, (outs dmrp:$ATp), (ins dmrp:$ATpi , u5imm:$SR),
|
||||
"dmsha3hash $ATp, $SR",
|
||||
[(set v2048i1:$ATp, (int_ppc_mma_dmsha3hash v2048i1:$ATpi, timm:$SR))]>,
|
||||
RegConstraint<"$ATpi = $ATp">, NoEncode<"$ATpi">;
|
||||
RegConstraint<"$ATpi = $ATp">;
|
||||
|
||||
def DMXXSHAPAD :
|
||||
XX2Form_AT3_XB6_ID2_E1_BL2<60, 421, (outs dmr:$AT),
|
||||
(ins dmr:$ATi, vsrc:$XB, u2imm:$ID, u1imm:$E, u2imm:$BL),
|
||||
"dmxxshapad $AT, $XB, $ID, $E, $BL", []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
|
||||
// MMA+ Intrinsics
|
||||
|
||||
@ -665,9 +665,6 @@ class isRecordForm { bit RC = 1; }
|
||||
class RegConstraint<string C> {
|
||||
string Constraints = C;
|
||||
}
|
||||
class NoEncode<string E> {
|
||||
string DisableEncoding = E;
|
||||
}
|
||||
|
||||
|
||||
// Define PowerPC specific addressing mode.
|
||||
@ -1989,29 +1986,24 @@ def LBZU : DForm_1<35, (outs gprc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D,
|
||||
|
||||
def LHAU : DForm_1<43, (outs gprc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D, $RA):$addr),
|
||||
"lhau $RST, $addr", IIC_LdStLHAU,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
|
||||
def LHZU : DForm_1<41, (outs gprc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D, $RA):$addr),
|
||||
"lhzu $RST, $addr", IIC_LdStLoadUpd,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
|
||||
def LWZU : DForm_1<33, (outs gprc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D, $RA):$addr),
|
||||
"lwzu $RST, $addr", IIC_LdStLoadUpd,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
|
||||
let Predicates = [HasFPU] in {
|
||||
def LFSU : DForm_1<49, (outs f4rc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D, $RA):$addr),
|
||||
"lfsu $RST, $addr", IIC_LdStLFDU,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
|
||||
def LFDU : DForm_1<51, (outs f8rc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D, $RA):$addr),
|
||||
"lfdu $RST, $addr", IIC_LdStLFDU,
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.reg = $ea_result">;
|
||||
}
|
||||
|
||||
|
||||
@ -2019,39 +2011,33 @@ def LFDU : DForm_1<51, (outs f8rc:$RST, ptr_rc_nor0:$ea_result), (ins (memri $D,
|
||||
def LBZUX : XForm_1_memOp<31, 119, (outs gprc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lbzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
|
||||
def LHAUX : XForm_1_memOp<31, 375, (outs gprc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lhaux $RST, $addr", IIC_LdStLHAUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
|
||||
def LHZUX : XForm_1_memOp<31, 311, (outs gprc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lhzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
|
||||
def LWZUX : XForm_1_memOp<31, 55, (outs gprc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lwzux $RST, $addr", IIC_LdStLoadUpdX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
|
||||
let Predicates = [HasFPU] in {
|
||||
def LFSUX : XForm_1_memOp<31, 567, (outs f4rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lfsux $RST, $addr", IIC_LdStLFDUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
|
||||
def LFDUX : XForm_1_memOp<31, 631, (outs f8rc:$RST, ptr_rc_nor0:$ea_result),
|
||||
(ins (memrr $RA, $RB):$addr),
|
||||
"lfdux $RST, $addr", IIC_LdStLFDUX,
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">,
|
||||
NoEncode<"$ea_result">;
|
||||
[]>, RegConstraint<"$addr.ptrreg = $ea_result">;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2132,20 +2118,20 @@ def STFD : DForm_1<54, (outs), (ins f8rc:$RST, (memri $D, $RA):$dst),
|
||||
let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {
|
||||
def STBU : DForm_1<39, (outs ptr_rc_nor0:$ea_res), (ins gprc:$RST, (memri $D, $RA):$dst),
|
||||
"stbu $RST, $dst", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
def STHU : DForm_1<45, (outs ptr_rc_nor0:$ea_res), (ins gprc:$RST, (memri $D, $RA):$dst),
|
||||
"sthu $RST, $dst", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
def STWU : DForm_1<37, (outs ptr_rc_nor0:$ea_res), (ins gprc:$RST, (memri $D, $RA):$dst),
|
||||
"stwu $RST, $dst", IIC_LdStSTU, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
let Predicates = [HasFPU] in {
|
||||
def STFSU : DForm_1<53, (outs ptr_rc_nor0:$ea_res), (ins f4rc:$RST, (memri $D, $RA):$dst),
|
||||
"stfsu $RST, $dst", IIC_LdStSTFDU, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
def STFDU : DForm_1<55, (outs ptr_rc_nor0:$ea_res), (ins f8rc:$RST, (memri $D, $RA):$dst),
|
||||
"stfdu $RST, $dst", IIC_LdStSTFDU, []>,
|
||||
RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;
|
||||
RegConstraint<"$dst.reg = $ea_res">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2207,32 +2193,27 @@ def STBUX : XForm_8_memOp<31, 247, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins gprc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stbux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
def STHUX : XForm_8_memOp<31, 439, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins gprc:$RST, (memrr $RA, $RB):$addr),
|
||||
"sthux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
def STWUX : XForm_8_memOp<31, 183, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins gprc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stwux $RST, $addr", IIC_LdStSTUX, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
let Predicates = [HasFPU] in {
|
||||
def STFSUX: XForm_8_memOp<31, 695, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins f4rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stfsux $RST, $addr", IIC_LdStSTFDU, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
def STFDUX: XForm_8_memOp<31, 759, (outs ptr_rc_nor0:$ea_res),
|
||||
(ins f8rc:$RST, (memrr $RA, $RB):$addr),
|
||||
"stfdux $RST, $addr", IIC_LdStSTFDU, []>,
|
||||
RegConstraint<"$addr.ptrreg = $ea_res">,
|
||||
NoEncode<"$ea_res">,
|
||||
PPC970_DGroup_Cracked;
|
||||
}
|
||||
}
|
||||
@ -3099,7 +3080,7 @@ defm RLWIMI : MForm_2r<20, (outs gprc:$RA),
|
||||
(ins gprc:$RAi, gprc:$RS, u5imm:$SH, u5imm:$MB,
|
||||
u5imm:$ME), "rlwimi", "$RA, $RS, $SH, $MB, $ME",
|
||||
IIC_IntRotate, []>, PPC970_DGroup_Cracked,
|
||||
RegConstraint<"$RAi = $RA">, NoEncode<"$RAi">;
|
||||
RegConstraint<"$RAi = $RA">;
|
||||
}
|
||||
let BaseName = "rlwinm" in {
|
||||
def RLWINM : MForm_2<21,
|
||||
@ -3238,7 +3219,7 @@ def PPC32GOT: PPCEmitTimePseudo<(outs gprc:$rD), (ins), "#PPC32GOT",
|
||||
// temporary register, used internally in code generation. A "bl" also clobbers LR.
|
||||
let Defs = [LR] in
|
||||
def PPC32PICGOT: PPCEmitTimePseudo<(outs gprc:$rD, gprc:$rT), (ins), "#PPC32PICGOT",
|
||||
[]>, NoEncode<"$rT">;
|
||||
[]>;
|
||||
|
||||
def LDgotTprelL32: PPCEmitTimePseudo<(outs gprc_nor0:$rD), (ins s16imm:$disp, gprc_nor0:$reg),
|
||||
"#LDgotTprelL32",
|
||||
|
||||
@ -14,7 +14,7 @@ multiclass ACC_UM_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
def PP :
|
||||
XX3Form_AT3_XAB6<opcode, xo, (outs acc:$AT), !con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def NAME#W :
|
||||
@ -24,7 +24,7 @@ multiclass ACC_UM_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
def WPP :
|
||||
XX3Form_AT3_XAB6<opcode, xo, (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ multiclass ACC_UM_M844_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -65,7 +65,7 @@ multiclass ACC_UM_M844_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u8imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ multiclass ACC_UM_M444_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -106,7 +106,7 @@ multiclass ACC_UM_M444_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u4imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -129,7 +129,7 @@ multiclass ACC_UM_M244_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -145,7 +145,7 @@ multiclass ACC_UM_M244_XOEO<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ multiclass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x20), (outs acc:$AT), !con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
|
||||
def PM#NAME :
|
||||
@ -179,7 +179,7 @@ multiclass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def NAME#W :
|
||||
@ -190,7 +190,7 @@ multiclass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x20), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pp ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -207,7 +207,7 @@ multiclass ACC_UM_M244_XO46<bits<6> opcode, bits<8> xo, dag IOL, string asmbase,
|
||||
!con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,29 +220,29 @@ multiclass ACC_NEG_UM_M244_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
def PN : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs acc:$AT), !con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NP : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs acc:$AT), !con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NN : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs acc:$AT), !con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def WPN : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def WNP : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def WNN : XX3Form_AT3_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs wacc:$AT), !con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
|
||||
def PM#NAME#PN :
|
||||
@ -251,21 +251,21 @@ multiclass ACC_NEG_UM_M244_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NP :
|
||||
MMIRR_XX3Form_XY4P2_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NN :
|
||||
MMIRR_XX3Form_XY4P2_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#WPN :
|
||||
@ -274,21 +274,21 @@ multiclass ACC_NEG_UM_M244_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNP :
|
||||
MMIRR_XX3Form_XY4P2_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNN :
|
||||
MMIRR_XX3Form_XY4P2_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK, u2imm:$PMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK, $PMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,29 +301,29 @@ multiclass ACC_NEG_UM_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
def PN : XX3Form_AT3_XAB6<opcode, !or(xo, 0x80), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NP : XX3Form_AT3_XAB6<opcode, !or(xo, 0x40), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def NN : XX3Form_AT3_XAB6<opcode, !or(xo, 0xC0), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def WPN : XX3Form_AT3_XAB6<opcode, !or(xo, 0x80), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"pn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def WNP : XX3Form_AT3_XAB6<opcode, !or(xo, 0x40), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"np ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def WNN : XX3Form_AT3_XAB6<opcode, !or(xo, 0xC0), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), IOL),
|
||||
!strconcat(asmbase#"nn ", asmstr), IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -346,28 +346,28 @@ multiclass ACC_NEG_UM_M44_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#PN :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NP :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NN :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -383,28 +383,28 @@ multiclass ACC_NEG_UM_M44_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WPN :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNP :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNN :
|
||||
MMIRR_XX3Form_XY4_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u4imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -427,28 +427,28 @@ multiclass ACC_NEG_UM_M42_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#PN :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NP :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#NN :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs acc:$AT),
|
||||
!con((ins acc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def PM#NAME#W :
|
||||
@ -464,28 +464,28 @@ multiclass ACC_NEG_UM_M42_XOM84C<bits<6> opcode, bits<8> xo, dag IOL,
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pp ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WPN :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0x80), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"pn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNP :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0x40), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"np ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def PM#NAME#WNN :
|
||||
MMIRR_XX3Form_X4Y2_XAB6<
|
||||
opcode, !or(xo, 0xC0), (outs wacc:$AT),
|
||||
!con((ins wacc:$ATi), !con(IOL, (ins u4imm:$XMSK, u2imm:$YMSK))),
|
||||
!strconcat("pm"#asmbase#"nn ", asmstr#", $XMSK, $YMSK"),
|
||||
IIC_VecFP, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,12 +497,12 @@ let Predicates = [MMA, IsNotISAFuture] in {
|
||||
XForm_AT3<31, 0, 177, (outs acc:$ATo), (ins acc:$AT), "xxmfacc $AT",
|
||||
IIC_VecGeneral,
|
||||
[(set v512i1:$ATo, (int_ppc_mma_xxmfacc v512i1:$AT))]>,
|
||||
RegConstraint<"$ATo = $AT">, NoEncode<"$ATo">;
|
||||
RegConstraint<"$ATo = $AT">;
|
||||
def XXMTACC :
|
||||
XForm_AT3<31, 1, 177, (outs acc:$AT), (ins acc:$ATi), "xxmtacc $AT",
|
||||
IIC_VecGeneral,
|
||||
[(set v512i1:$AT, (int_ppc_mma_xxmtacc v512i1:$ATi))]>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
def KILL_PAIR : PPCPostRAExpPseudo<(outs vsrprc:$XTp), (ins vsrprc:$XSp),
|
||||
"#KILL_PAIR", []>,
|
||||
RegConstraint<"$XTp = $XSp">;
|
||||
@ -519,7 +519,7 @@ let Predicates = [MMA, IsNotISAFuture] in {
|
||||
def XVI8GER4SPP :
|
||||
XX3Form_AT3_XAB6<59, 99, (outs acc:$AT), (ins acc:$ATi, vsrc:$XA, vsrc:$XB),
|
||||
"xvi8ger4spp $AT, $XA, $XB", IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
let mayStore = 1 in {
|
||||
def SPILL_ACC: PPCEmitTimePseudo<(outs), (ins acc:$AT, memrix16:$dst),
|
||||
"#SPILL_ACC", []>;
|
||||
@ -544,11 +544,11 @@ let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
def XXMFACCW :
|
||||
XForm_AT3<31, 0, 177, (outs wacc:$ATo), (ins wacc:$AT), "xxmfacc $AT",
|
||||
IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATo = $AT">, NoEncode<"$ATo">;
|
||||
RegConstraint<"$ATo = $AT">;
|
||||
def XXMTACCW :
|
||||
XForm_AT3<31, 1, 177, (outs wacc:$AT), (ins wacc:$ATi), "xxmtacc $AT",
|
||||
IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
|
||||
let isAsCheapAsAMove = 1, isReMaterializable = 1 in {
|
||||
def DMXXSETACCZ :
|
||||
@ -560,7 +560,7 @@ let Predicates = [MMA, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
XX3Form_AT3_XAB6<59, 99, (outs wacc:$AT),
|
||||
(ins wacc:$ATi, vsrc:$XA, vsrc:$XB),
|
||||
"xvi8ger4spp $AT, $XA, $XB", IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
|
||||
let mayStore = 1 in {
|
||||
def SPILL_WACC: PPCEmitTimePseudo<(outs), (ins wacc:$AT, memrix16:$dst),
|
||||
@ -593,7 +593,7 @@ let Predicates = [MMA, PrefixInstrs, IsNotISAFuture] in {
|
||||
u4imm:$YMSK, u4imm:$PMSK),
|
||||
"pmxvi8ger4spp $AT, $XA, $XB, $XMSK, $YMSK, $PMSK",
|
||||
IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
|
||||
let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
@ -603,7 +603,7 @@ let Predicates = [MMA, PrefixInstrs, IsISAFuture], isCodeGenOnly = 1 in {
|
||||
u4imm:$YMSK, u4imm:$PMSK),
|
||||
"pmxvi8ger4spp $AT, $XA, $XB, $XMSK, $YMSK, $PMSK",
|
||||
IIC_VecGeneral, []>,
|
||||
RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
|
||||
RegConstraint<"$ATi = $AT">;
|
||||
}
|
||||
|
||||
// MMA accumulating/non-accumulating instructions.
|
||||
|
||||
@ -382,14 +382,14 @@ class VXForm_RD5_N3_VB5<bits<11> xo, dag OOL, dag IOL, string asmstr,
|
||||
class VXForm_VTB5_RA5_ins<bits<11> xo, string opc, list<dag> pattern>
|
||||
: VXForm_1<xo, (outs vrrc:$VD), (ins vrrc:$VDi, gprc:$VA, vrrc:$VB),
|
||||
!strconcat(opc, " $VD, $VA, $VB"), IIC_VecGeneral, pattern>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
|
||||
// VX-Form: [PO VRT RA RB XO].
|
||||
// Destructive (insert) forms are suffixed with _ins.
|
||||
class VXForm_VRT5_RAB5_ins<bits<11> xo, string opc, list<dag> pattern>
|
||||
: VXForm_1<xo, (outs vrrc:$VD), (ins vrrc:$VDi, gprc:$VA, gprc:$VB),
|
||||
!strconcat(opc, " $VD, $VA, $VB"), IIC_VecGeneral, pattern>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
|
||||
// VX-Form: [ PO BF // VRA VRB XO ]
|
||||
class VXForm_BF3_VAB5<bits<11> xo, dag OOL, dag IOL, string asmstr,
|
||||
@ -1395,7 +1395,7 @@ let isReMaterializable = 1, isAsCheapAsAMove = 1, isMoveImm = 1, Predicates = [P
|
||||
[(set v2i64:$XT,
|
||||
(PPCxxsplti32dx v2i64:$XTi, i32:$IX,
|
||||
i32:$IMM32))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
||||
RegConstraint<"$XTi = $XT">;
|
||||
}
|
||||
|
||||
let Predicates = [IsISA3_1] in {
|
||||
@ -1466,13 +1466,13 @@ let Predicates = [IsISA3_1] in {
|
||||
"vinsw $VD, $VB, $VA", IIC_VecGeneral,
|
||||
[(set v4i32:$VD,
|
||||
(int_ppc_altivec_vinsw v4i32:$VDi, i32:$VB, timm:$VA))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VINSD :
|
||||
VXForm_1<463, (outs vrrc:$VD), (ins vrrc:$VDi, u4imm:$VA, g8rc:$VB),
|
||||
"vinsd $VD, $VB, $VA", IIC_VecGeneral,
|
||||
[(set v2i64:$VD,
|
||||
(int_ppc_altivec_vinsd v2i64:$VDi, i64:$VB, timm:$VA))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VINSBVLX :
|
||||
VXForm_VTB5_RA5_ins<15, "vinsbvlx",
|
||||
[(set v16i8:$VD,
|
||||
@ -1538,13 +1538,13 @@ let Predicates = [IsISA3_1] in {
|
||||
"vinsdlx $VD, $VA, $VB", IIC_VecGeneral,
|
||||
[(set v2i64:$VD,
|
||||
(int_ppc_altivec_vinsdlx v2i64:$VDi, i64:$VA, i64:$VB))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VINSDRX :
|
||||
VXForm_1<975, (outs vrrc:$VD), (ins vrrc:$VDi, g8rc:$VA, g8rc:$VB),
|
||||
"vinsdrx $VD, $VA, $VB", IIC_VecGeneral,
|
||||
[(set v2i64:$VD,
|
||||
(int_ppc_altivec_vinsdrx v2i64:$VDi, i64:$VA, i64:$VB))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VEXTRACTBM : VXForm_RD5_XO5_RS5<1602, 8, (outs gprc:$VD), (ins vrrc:$VB),
|
||||
"vextractbm $VD, $VB", IIC_VecGeneral,
|
||||
[(set i32:$VD,
|
||||
@ -1915,7 +1915,7 @@ let Predicates = [IsISA3_1] in {
|
||||
[(set v1i128:$VD,
|
||||
(int_ppc_altivec_vrlqmi v1i128:$VA, v1i128:$VB,
|
||||
v1i128:$VDi))]>,
|
||||
RegConstraint<"$VDi = $VD">, NoEncode<"$VDi">;
|
||||
RegConstraint<"$VDi = $VD">;
|
||||
def VSLQ : VX1_VT5_VA5_VB5<261, "vslq", []>;
|
||||
def VSRAQ : VX1_VT5_VA5_VB5<773, "vsraq", []>;
|
||||
def VSRQ : VX1_VT5_VA5_VB5<517, "vsrq", []>;
|
||||
|
||||
@ -236,7 +236,7 @@ class X_VT5_VA5_VB5_FMA<bits<6> opcode, bits<10> xo, string opc,
|
||||
list<dag> pattern>
|
||||
: XForm_1<opcode, xo, (outs vrrc:$RST), (ins vrrc:$RSTi, vrrc:$RA, vrrc:$RB),
|
||||
!strconcat(opc, " $RST, $RA, $RB"), IIC_VecFP, pattern>,
|
||||
RegConstraint<"$RSTi = $RST">, NoEncode<"$RSTi">;
|
||||
RegConstraint<"$RSTi = $RST">;
|
||||
|
||||
// [PO VRT VRA VRB XO RO], Round to Odd version of [PO VRT VRA VRB XO /]
|
||||
class X_VT5_VA5_VB5_FMA_Ro<bits<6> opcode, bits<10> xo, string opc,
|
||||
@ -402,13 +402,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f64:$XT, (any_fma f64:$XA, f64:$XB, f64:$XTi))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XSMADDMDP : XX3Form<60, 41,
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -418,13 +418,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f64:$XT, (any_fma f64:$XA, f64:$XB, (fneg f64:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XSMSUBMDP : XX3Form<60, 57,
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -434,13 +434,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f64:$XT, (fneg (any_fma f64:$XA, f64:$XB, f64:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XSNMADDMDP : XX3Form<60, 169,
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -450,13 +450,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f64:$XT, (fneg (any_fma f64:$XA, f64:$XB, (fneg f64:$XTi))))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XSNMSUBMDP : XX3Form<60, 185,
|
||||
(outs vsfrc:$XT), (ins vsfrc:$XTi, vsfrc:$XA, vsfrc:$XB),
|
||||
"xsnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -466,13 +466,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v2f64:$XT, (any_fma v2f64:$XA, v2f64:$XB, v2f64:$XTi))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVMADDMDP : XX3Form<60, 105,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -482,13 +482,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v4f32:$XT, (any_fma v4f32:$XA, v4f32:$XB, v4f32:$XTi))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVMADDMSP : XX3Form<60, 73,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -498,13 +498,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v2f64:$XT, (any_fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVMSUBMDP : XX3Form<60, 121,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -514,13 +514,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v4f32:$XT, (any_fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVMSUBMSP : XX3Form<60, 89,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -530,13 +530,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmaddadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v2f64:$XT, (fneg (any_fma v2f64:$XA, v2f64:$XB, v2f64:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVNMADDMDP : XX3Form<60, 233,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmaddmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -546,13 +546,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v4f32:$XT, (fneg (fma v4f32:$XA, v4f32:$XB, v4f32:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVNMADDMSP : XX3Form<60, 201,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -562,13 +562,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmsubadp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v2f64:$XT, (fneg (any_fma v2f64:$XA, v2f64:$XB, (fneg v2f64:$XTi))))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVNMSUBMDP : XX3Form<60, 249,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmsubmdp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -578,13 +578,13 @@ let hasSideEffects = 0 in {
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set v4f32:$XT, (fneg (any_fma v4f32:$XA, v4f32:$XB, (fneg v4f32:$XTi))))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
let IsVSXFMAAlt = 1 in
|
||||
def XVNMSUBMSP : XX3Form<60, 217,
|
||||
(outs vsrc:$XT), (ins vsrc:$XTi, vsrc:$XA, vsrc:$XB),
|
||||
"xvnmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -1199,7 +1199,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
(ins vssrc:$XTi, vssrc:$XA, vssrc:$XB),
|
||||
"xsmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f32:$XT, (any_fma f32:$XA, f32:$XB, f32:$XTi))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
// FIXME: Setting the hasSideEffects flag here to match current behaviour.
|
||||
let IsVSXFMAAlt = 1, hasSideEffects = 1 in
|
||||
@ -1207,7 +1207,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
(outs vssrc:$XT),
|
||||
(ins vssrc:$XTi, vssrc:$XA, vssrc:$XB),
|
||||
"xsmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -1219,7 +1219,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
"xsmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f32:$XT, (any_fma f32:$XA, f32:$XB,
|
||||
(fneg f32:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
// FIXME: Setting the hasSideEffects flag here to match current behaviour.
|
||||
let IsVSXFMAAlt = 1, hasSideEffects = 1 in
|
||||
@ -1227,7 +1227,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
(outs vssrc:$XT),
|
||||
(ins vssrc:$XTi, vssrc:$XA, vssrc:$XB),
|
||||
"xsmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -1239,7 +1239,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
"xsnmaddasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f32:$XT, (fneg (any_fma f32:$XA, f32:$XB,
|
||||
f32:$XTi)))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
// FIXME: Setting the hasSideEffects flag here to match current behaviour.
|
||||
let IsVSXFMAAlt = 1, hasSideEffects = 1 in
|
||||
@ -1247,7 +1247,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
(outs vssrc:$XT),
|
||||
(ins vssrc:$XTi, vssrc:$XA, vssrc:$XB),
|
||||
"xsnmaddmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -1259,7 +1259,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
"xsnmsubasp $XT, $XA, $XB", IIC_VecFP,
|
||||
[(set f32:$XT, (fneg (any_fma f32:$XA, f32:$XB,
|
||||
(fneg f32:$XTi))))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
// FIXME: Setting the hasSideEffects flag here to match current behaviour.
|
||||
let IsVSXFMAAlt = 1, hasSideEffects = 1 in
|
||||
@ -1267,7 +1267,7 @@ let Predicates = [HasVSX, HasP8Vector] in {
|
||||
(outs vssrc:$XT),
|
||||
(ins vssrc:$XTi, vssrc:$XA, vssrc:$XB),
|
||||
"xsnmsubmsp $XT, $XA, $XB", IIC_VecFP, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
AltVSXFMARel;
|
||||
}
|
||||
|
||||
@ -1563,7 +1563,7 @@ let Predicates = [HasVSX, HasP9Vector] in {
|
||||
"xxinsertw $XT, $XB, $UIM5", IIC_VecFP,
|
||||
[(set v4i32:$XT, (PPCvecinsert v4i32:$XTi, v4i32:$XB,
|
||||
imm32SExt16:$UIM5))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
||||
RegConstraint<"$XTi = $XT">;
|
||||
|
||||
// Vector Extract Unsigned Word
|
||||
// FIXME: Setting the hasSideEffects flag here to match current behaviour.
|
||||
@ -1652,11 +1652,11 @@ let Predicates = [HasVSX, HasP9Vector] in {
|
||||
def XXPERM : XX3Form<60, 26, (outs vsrc:$XT),
|
||||
(ins vsrc:$XA, vsrc:$XTi, vsrc:$XB),
|
||||
"xxperm $XT, $XA, $XB", IIC_VecPerm, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
||||
RegConstraint<"$XTi = $XT">;
|
||||
def XXPERMR : XX3Form<60, 58, (outs vsrc:$XT),
|
||||
(ins vsrc:$XA, vsrc:$XTi, vsrc:$XB),
|
||||
"xxpermr $XT, $XA, $XB", IIC_VecPerm, []>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">;
|
||||
RegConstraint<"$XTi = $XT">;
|
||||
|
||||
// Vector Splat Immediate Byte
|
||||
def XXSPLTIB : X_RD6_IMM8<60, 360, (outs vsrc:$XT), (ins u8imm:$IMM8),
|
||||
|
||||
@ -224,22 +224,22 @@ VSX:
|
||||
. isCommutable = 1
|
||||
// xsmaddqp
|
||||
[(set f128:$vT, (fma f128:$vA, f128:$vB, f128:$vTi))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsmsubqp
|
||||
[(set f128:$vT, (fma f128:$vA, f128:$vB, (fneg f128:$vTi)))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsnmaddqp
|
||||
[(set f128:$vT, (fneg (fma f128:$vA, f128:$vB, f128:$vTi)))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsnmsubqp
|
||||
[(set f128:$vT, (fneg (fma f128:$vA, f128:$vB, (fneg f128:$vTi))))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
- Round to Odd of QP (Negative) Multiply-{Add/Subtract}:
|
||||
@ -276,22 +276,22 @@ VSX:
|
||||
. isCommutable = 1
|
||||
// xsmaddqpo
|
||||
[(set f128:$vT, (PPCfmarto f128:$vA, f128:$vB, f128:$vTi))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsmsubqpo
|
||||
[(set f128:$vT, (PPCfmarto f128:$vA, f128:$vB, (fneg f128:$vTi)))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsnmaddqpo
|
||||
[(set f128:$vT, (fneg (PPCfmarto f128:$vA, f128:$vB, f128:$vTi)))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
// xsnmsubqpo
|
||||
[(set f128:$vT, (fneg (PPCfmarto f128:$vA, f128:$vB, (fneg f128:$vTi))))]>,
|
||||
RegConstraint<"$vTi = $vT">, NoEncode<"$vTi">,
|
||||
RegConstraint<"$vTi = $vT">,
|
||||
AltVSXFMARel;
|
||||
|
||||
- QP Compare Ordered/Unordered: xscmpoqp xscmpuqp
|
||||
@ -405,7 +405,7 @@ Fixed Point Facility:
|
||||
|
||||
But how to map to it??
|
||||
[(set v1f128:$XT, (insertelement v1f128:$XTi, f128:$XB, i4:$UIMM))]>,
|
||||
RegConstraint<"$XTi = $XT">, NoEncode<"$XTi">,
|
||||
RegConstraint<"$XTi = $XT">,
|
||||
|
||||
. Or use intrinsic?
|
||||
(set v1f128:$XT, (int_ppc_vsx_xxinsertw v1f128:$XTi, f128:$XB, i4:$UIMM))
|
||||
|
||||
@ -2646,28 +2646,24 @@ class BranchUnaryRI<string mnemonic, bits<12> opcode, RegisterOperand cls>
|
||||
: InstRIb<opcode, (outs cls:$R1), (ins cls:$R1src, brtarget16:$RI2),
|
||||
mnemonic#"\t$R1, $RI2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchUnaryRIL<string mnemonic, bits<12> opcode, RegisterOperand cls>
|
||||
: InstRILb<opcode, (outs cls:$R1), (ins cls:$R1src, brtarget32:$RI2),
|
||||
mnemonic#"\t$R1, $RI2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchUnaryRR<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
: InstRR<opcode, (outs cls:$R1), (ins cls:$R1src, GR64:$R2),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchUnaryRRE<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
: InstRRE<opcode, (outs cls:$R1), (ins cls:$R1src, GR64:$R2),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchUnaryRX<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
@ -2675,7 +2671,6 @@ class BranchUnaryRX<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
(ins cls:$R1src, (bdxaddr12only $B2, $D2, $X2):$XBD2),
|
||||
mnemonic#"\t$R1, $XBD2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchUnaryRXY<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
@ -2683,14 +2678,12 @@ class BranchUnaryRXY<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
(ins cls:$R1src, (bdxaddr20only $B2, $D2, $X2):$XBD2),
|
||||
mnemonic#"\t$R1, $XBD2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchBinaryRSI<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
: InstRSI<opcode, (outs cls:$R1), (ins cls:$R1src, cls:$R3, brtarget16:$RI2),
|
||||
mnemonic#"\t$R1, $R3, $RI2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchBinaryRIEe<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
@ -2698,7 +2691,6 @@ class BranchBinaryRIEe<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
(ins cls:$R1src, cls:$R3, brtarget16:$RI2),
|
||||
mnemonic#"\t$R1, $R3, $RI2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchBinaryRS<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
@ -2706,7 +2698,6 @@ class BranchBinaryRS<string mnemonic, bits<8> opcode, RegisterOperand cls>
|
||||
(ins cls:$R1src, cls:$R3, (bdaddr12only $B2, $D2):$BD2),
|
||||
mnemonic#"\t$R1, $R3, $BD2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BranchBinaryRSY<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
@ -2715,7 +2706,6 @@ class BranchBinaryRSY<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
(ins cls:$R1src, cls:$R3, (bdaddr20only $B2, $D2):$BD2),
|
||||
mnemonic#"\t$R1, $R3, $BD2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class LoadMultipleRS<string mnemonic, bits<8> opcode, RegisterOperand cls,
|
||||
@ -3116,7 +3106,6 @@ class UnaryTiedRRE<string mnemonic, bits<16> opcode, RegisterOperand cls>
|
||||
: InstRRE<opcode, (outs cls:$R1), (ins cls:$R1src),
|
||||
mnemonic#"\t$R1", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let R2 = 0;
|
||||
}
|
||||
|
||||
@ -3125,7 +3114,6 @@ class UnaryMemRRFc<string mnemonic, bits<16> opcode,
|
||||
: InstRRFc<opcode, (outs cls2:$R2, cls1:$R1), (ins cls1:$R1src),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let M3 = 0;
|
||||
}
|
||||
|
||||
@ -3163,7 +3151,6 @@ class CondUnaryRSY<string mnemonic, bits<16> opcode,
|
||||
(z_select_ccmask (operator bdaddr20only:$BD2), cls:$R1src,
|
||||
cond4:$valid, cond4:$M3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
let CCMaskLast = 1;
|
||||
@ -3184,7 +3171,6 @@ class AsmCondUnaryRSY<string mnemonic, bits<16> opcode,
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
// Like CondUnaryRSY, but with a fixed CC mask.
|
||||
@ -3194,7 +3180,6 @@ class FixedCondUnaryRSY<CondVariant V, string mnemonic, bits<16> opcode,
|
||||
: InstRSYb<opcode, (outs cls:$R1), (ins cls:$R1src, (mode $B2, $D2):$BD2),
|
||||
mnemonic#V.suffix#"\t$R1, $BD2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
let isAsmParserOnly = V.alternate;
|
||||
@ -3439,7 +3424,6 @@ class SideEffectBinaryMemMemRR<string mnemonic, bits<8> opcode,
|
||||
: InstRR<opcode, (outs cls1:$R1, cls2:$R2), (ins cls1:$R1src, cls2:$R2src),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src";
|
||||
let DisableEncoding = "$R1src, $R2src";
|
||||
}
|
||||
|
||||
class SideEffectBinaryMemRRE<string mnemonic, bits<16> opcode,
|
||||
@ -3447,7 +3431,6 @@ class SideEffectBinaryMemRRE<string mnemonic, bits<16> opcode,
|
||||
: InstRRE<opcode, (outs cls2:$R2), (ins cls1:$R1, cls2:$R2src),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R2 = $R2src";
|
||||
let DisableEncoding = "$R2src";
|
||||
}
|
||||
|
||||
class SideEffectBinaryMemMemRRE<string mnemonic, bits<16> opcode,
|
||||
@ -3455,7 +3438,6 @@ class SideEffectBinaryMemMemRRE<string mnemonic, bits<16> opcode,
|
||||
: InstRRE<opcode, (outs cls1:$R1, cls2:$R2), (ins cls1:$R1src, cls2:$R2src),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src";
|
||||
let DisableEncoding = "$R1src, $R2src";
|
||||
}
|
||||
|
||||
class SideEffectBinaryMemMemRRFc<string mnemonic, bits<16> opcode,
|
||||
@ -3463,7 +3445,6 @@ class SideEffectBinaryMemMemRRFc<string mnemonic, bits<16> opcode,
|
||||
: InstRRFc<opcode, (outs cls1:$R1, cls2:$R2), (ins cls1:$R1src, cls2:$R2src),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src";
|
||||
let DisableEncoding = "$R1src, $R2src";
|
||||
let M3 = 0;
|
||||
}
|
||||
|
||||
@ -3475,7 +3456,6 @@ class BinaryRR<string mnemonic, bits<8> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#cls1;
|
||||
let OpType = "reg";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BinaryRRE<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -3486,7 +3466,6 @@ class BinaryRRE<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#cls1;
|
||||
let OpType = "reg";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BinaryRRD<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -3565,7 +3544,6 @@ class BinaryMemRRFc<string mnemonic, bits<16> opcode,
|
||||
: InstRRFc<opcode, (outs cls2:$R2, cls1:$R1), (ins cls1:$R1src, imm:$M3),
|
||||
mnemonic#"\t$R1, $R2, $M3", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
multiclass BinaryMemRRFcOpt<string mnemonic, bits<16> opcode,
|
||||
@ -3594,7 +3572,6 @@ class CondBinaryRRF<string mnemonic, bits<16> opcode, RegisterOperand cls1,
|
||||
[(set cls1:$R1, (z_select_ccmask cls2:$R2, cls1:$R1src,
|
||||
cond4:$valid, cond4:$M3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let CCMaskLast = 1;
|
||||
let NumOpsKey = !subst("loc", "sel", mnemonic);
|
||||
let NumOpsValue = "2";
|
||||
@ -3610,7 +3587,6 @@ class AsmCondBinaryRRF<string mnemonic, bits<16> opcode, RegisterOperand cls1,
|
||||
(ins cls1:$R1src, cls2:$R2, imm32zx4:$M3),
|
||||
mnemonic#"\t$R1, $R2, $M3", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
// Like CondBinaryRRF, but with a fixed CC mask.
|
||||
@ -3619,7 +3595,6 @@ class FixedCondBinaryRRF<CondVariant V, string mnemonic, bits<16> opcode,
|
||||
: InstRRFc<opcode, (outs cls1:$R1), (ins cls1:$R1src, cls2:$R2),
|
||||
mnemonic#V.suffix#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let isAsmParserOnly = V.alternate;
|
||||
let AsmVariantName = V.asmvariant;
|
||||
let M3 = V.ccmask;
|
||||
@ -3678,7 +3653,6 @@ class BinaryRI<string mnemonic, bits<12> opcode, SDPatternOperator operator,
|
||||
mnemonic#"\t$R1, $I2",
|
||||
[(set cls:$R1, (operator cls:$R1src, imm:$I2))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BinaryRIE<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -3707,7 +3681,6 @@ class CondBinaryRIE<string mnemonic, bits<16> opcode, RegisterOperand cls,
|
||||
[(set cls:$R1, (z_select_ccmask imm:$I2, cls:$R1src,
|
||||
cond4:$valid, cond4:$M3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let CCMaskLast = 1;
|
||||
}
|
||||
|
||||
@ -3719,7 +3692,6 @@ class AsmCondBinaryRIE<string mnemonic, bits<16> opcode, RegisterOperand cls,
|
||||
(ins cls:$R1src, imm:$I2, imm32zx4:$M3),
|
||||
mnemonic#"\t$R1, $I2, $M3", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
// Like CondBinaryRIE, but with a fixed CC mask.
|
||||
@ -3728,7 +3700,6 @@ class FixedCondBinaryRIE<CondVariant V, string mnemonic, bits<16> opcode,
|
||||
: InstRIEg<opcode, (outs cls:$R1), (ins cls:$R1src, imm:$I2),
|
||||
mnemonic#V.suffix#"\t$R1, $I2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let isAsmParserOnly = V.alternate;
|
||||
let AsmVariantName = V.asmvariant;
|
||||
let M3 = V.ccmask;
|
||||
@ -3747,7 +3718,6 @@ class BinaryRIL<string mnemonic, bits<12> opcode, SDPatternOperator operator,
|
||||
mnemonic#"\t$R1, $I2",
|
||||
[(set cls:$R1, (operator cls:$R1src, imm:$I2))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BinaryRS<string mnemonic, bits<8> opcode, SDPatternOperator operator,
|
||||
@ -3758,7 +3728,6 @@ class BinaryRS<string mnemonic, bits<8> opcode, SDPatternOperator operator,
|
||||
[(set cls:$R1, (operator cls:$R1src, shift12only:$BD2))]> {
|
||||
let R3 = 0;
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class BinaryRSY<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -3794,7 +3763,6 @@ class BinaryRX<string mnemonic, bits<8> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#"r"#cls;
|
||||
let OpType = "mem";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -3809,7 +3777,6 @@ class BinaryRXE<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#"r"#cls;
|
||||
let OpType = "mem";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
let M3 = 0;
|
||||
@ -3838,7 +3805,6 @@ class BinaryRXY<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#"r"#cls;
|
||||
let OpType = "mem";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4500,7 +4466,6 @@ class SideEffectTernaryMemMemRRFa<string mnemonic, bits<16> opcode,
|
||||
(ins cls1:$R1src, cls2:$R2src, cls3:$R3),
|
||||
mnemonic#"\t$R1, $R2, $R3", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src";
|
||||
let DisableEncoding = "$R1src, $R2src";
|
||||
let M4 = 0;
|
||||
}
|
||||
|
||||
@ -4520,7 +4485,6 @@ class SideEffectTernaryMemMemMemRRFb<string mnemonic, bits<16> opcode,
|
||||
(ins cls1:$R1src, cls2:$R2src, cls3:$R3src),
|
||||
mnemonic#"\t$R1, $R3, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src, $R3 = $R3src";
|
||||
let DisableEncoding = "$R1src, $R2src, $R3src";
|
||||
let M4 = 0;
|
||||
}
|
||||
|
||||
@ -4544,7 +4508,6 @@ class SideEffectTernaryMemMemRRFc<string mnemonic, bits<16> opcode,
|
||||
(ins cls1:$R1src, cls2:$R2src, imm:$M3),
|
||||
mnemonic#"\t$R1, $R2, $M3", []> {
|
||||
let Constraints = "$R1 = $R1src, $R2 = $R2src";
|
||||
let DisableEncoding = "$R1src, $R2src";
|
||||
}
|
||||
|
||||
multiclass SideEffectTernaryMemMemRRFcOpt<string mnemonic, bits<16> opcode,
|
||||
@ -4574,7 +4537,6 @@ class TernaryRRFb<string mnemonic, bits<16> opcode,
|
||||
(ins cls1:$R1src, cls2:$R2, imm32zx4:$M4),
|
||||
mnemonic#"\t$R1, $R3, $R2, $M4", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class TernaryRRFe<string mnemonic, bits<16> opcode, RegisterOperand cls1,
|
||||
@ -4591,7 +4553,6 @@ class TernaryRRD<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#cls;
|
||||
let OpType = "reg";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
class TernaryRS<string mnemonic, bits<8> opcode, RegisterOperand cls,
|
||||
@ -4601,7 +4562,6 @@ class TernaryRS<string mnemonic, bits<8> opcode, RegisterOperand cls,
|
||||
mnemonic#"\t$R1, $M3, $BD2", []> {
|
||||
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4613,7 +4573,6 @@ class TernaryRSY<string mnemonic, bits<16> opcode, RegisterOperand cls,
|
||||
mnemonic#"\t$R1, $M3, $BD2", []> {
|
||||
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4646,7 +4605,6 @@ class SideEffectTernaryMemMemRS<string mnemonic, bits<8> opcode,
|
||||
(ins cls1:$R1src, cls2:$R3src, (shift12only $B2, $D2):$BD2),
|
||||
mnemonic#"\t$R1, $R3, $BD2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R3 = $R3src";
|
||||
let DisableEncoding = "$R1src, $R3src";
|
||||
}
|
||||
|
||||
class SideEffectTernaryMemMemRSY<string mnemonic, bits<16> opcode,
|
||||
@ -4655,7 +4613,6 @@ class SideEffectTernaryMemMemRSY<string mnemonic, bits<16> opcode,
|
||||
(ins cls1:$R1src, cls2:$R3src, (shift20only $B2, $D2):$BD2),
|
||||
mnemonic#"\t$R1, $R3, $BD2", []> {
|
||||
let Constraints = "$R1 = $R1src, $R3 = $R3src";
|
||||
let DisableEncoding = "$R1src, $R3src";
|
||||
}
|
||||
|
||||
class TernaryRXF<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -4669,7 +4626,6 @@ class TernaryRXF<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
let OpKey = mnemonic#"r"#cls;
|
||||
let OpType = "mem";
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4681,7 +4637,6 @@ class TernaryVRIa<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
[(set (tr1.vt tr1.op:$V1), (operator (tr2.vt tr2.op:$V1src),
|
||||
imm:$I2, index:$M3))]> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
}
|
||||
|
||||
class TernaryVRId<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
@ -4893,7 +4848,6 @@ class TernaryVRSb<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
cls:$R3,
|
||||
shift12only:$BD2))]> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
let M4 = type;
|
||||
}
|
||||
|
||||
@ -4913,7 +4867,6 @@ class TernaryVRSbGeneric<string mnemonic, bits<16> opcode>
|
||||
imm32zx4:$M4),
|
||||
mnemonic#"\t$V1, $R3, $BD2, $M4", []> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
}
|
||||
|
||||
class TernaryVRV<string mnemonic, bits<16> opcode, bits<5> bytes,
|
||||
@ -4922,7 +4875,6 @@ class TernaryVRV<string mnemonic, bits<16> opcode, bits<5> bytes,
|
||||
(ins VR128:$V1src, (bdvaddr12only $B2, $D2, $V2):$VBD2, index:$M3),
|
||||
mnemonic#"\t$V1, $VBD2, $M3", []> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4936,7 +4888,6 @@ class TernaryVRX<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
bdxaddr12only:$XBD2,
|
||||
index:$M3))]> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
}
|
||||
@ -4951,7 +4902,6 @@ class QuaternaryVRId<string mnemonic, bits<16> opcode, SDPatternOperator operato
|
||||
(tr2.vt tr2.op:$V3),
|
||||
imm32zx8_timm:$I4))]> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
let M5 = type;
|
||||
}
|
||||
|
||||
@ -4961,7 +4911,6 @@ class QuaternaryVRIdGeneric<string mnemonic, bits<16> opcode>
|
||||
imm32zx8:$I4, imm32zx4:$M5),
|
||||
mnemonic#"\t$V1, $V2, $V3, $I4, $M5", []> {
|
||||
let Constraints = "$V1 = $V1src";
|
||||
let DisableEncoding = "$V1src";
|
||||
}
|
||||
|
||||
class QuaternaryVRIf<string mnemonic, bits<16> opcode>
|
||||
@ -5087,7 +5036,6 @@ class CmpSwapRRE<string mnemonic, bits<16> opcode,
|
||||
: InstRRE<opcode, (outs cls1:$R1), (ins cls1:$R1src, cls2:$R2),
|
||||
mnemonic#"\t$R1, $R2", []> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let mayStore = 1;
|
||||
}
|
||||
@ -5099,7 +5047,6 @@ class CmpSwapRS<string mnemonic, bits<8> opcode, SDPatternOperator operator,
|
||||
mnemonic#"\t$R1, $R3, $BD2",
|
||||
[(set cls:$R1, (operator mode:$BD2, cls:$R1src, cls:$R3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let mayStore = 1;
|
||||
}
|
||||
@ -5111,7 +5058,6 @@ class CmpSwapRSY<string mnemonic, bits<16> opcode, SDPatternOperator operator,
|
||||
mnemonic#"\t$R1, $R3, $BD2",
|
||||
[(set cls:$R1, (operator mode:$BD2, cls:$R1src, cls:$R3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let mayStore = 1;
|
||||
}
|
||||
@ -5128,7 +5074,7 @@ multiclass CmpSwapRSPair<string mnemonic, bits<8> rsOpcode, bits<16> rsyOpcode,
|
||||
|
||||
multiclass RotateSelectRIEf<string mnemonic, bits<16> opcode, RegisterOperand cls1,
|
||||
RegisterOperand cls2, bits<8> I3Or = 0, bits<8> I4Or = 0> {
|
||||
let Constraints = "$R1 = $R1src", DisableEncoding = "$R1src" in {
|
||||
let Constraints = "$R1 = $R1src" in {
|
||||
def "" : InstRIEf<opcode, (outs cls1:$R1),
|
||||
(ins cls1:$R1src, cls2:$R2, imm32zx8:$I3, imm32zx8:$I4,
|
||||
imm32zx8:$I5),
|
||||
@ -5328,7 +5274,6 @@ class CondBinaryRRFPseudo<string mnemonic, RegisterOperand cls1,
|
||||
[(set cls1:$R1, (z_select_ccmask cls2:$R2, cls1:$R1src,
|
||||
cond4:$valid, cond4:$M3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let CCMaskLast = 1;
|
||||
let NumOpsKey = !subst("loc", "sel", mnemonic);
|
||||
let NumOpsValue = "2";
|
||||
@ -5359,7 +5304,6 @@ class CondBinaryRIEPseudo<RegisterOperand cls, ImmOpWithPattern imm>
|
||||
[(set cls:$R1, (z_select_ccmask imm:$I2, cls:$R1src,
|
||||
cond4:$valid, cond4:$M3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let CCMaskLast = 1;
|
||||
}
|
||||
|
||||
@ -5374,7 +5318,6 @@ class CondUnaryRSYPseudo<string mnemonic, SDPatternOperator operator,
|
||||
(z_select_ccmask (operator mode:$BD2), cls:$R1src,
|
||||
cond4:$valid, cond4:$R3))]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
let mayLoad = 1;
|
||||
let AccessBytes = bytes;
|
||||
let CCMaskLast = 1;
|
||||
@ -5414,7 +5357,6 @@ class RotateSelectRIEfPseudo<RegisterOperand cls1, RegisterOperand cls2>
|
||||
imm32zx8:$I5),
|
||||
[]> {
|
||||
let Constraints = "$R1 = $R1src";
|
||||
let DisableEncoding = "$R1src";
|
||||
}
|
||||
|
||||
// Implements "$dst = $cc & (8 >> CC) ? $src1 : $src2", where CC is
|
||||
|
||||
@ -642,7 +642,7 @@ multiclass RRIm<string opcStr, bits<8>opc,
|
||||
|
||||
// Special RR multiclass for 128 bits shift left instruction.
|
||||
// e.g. SLD
|
||||
let Constraints = "$hi = $sx", DisableEncoding = "$hi", hasSideEffects = 0 in
|
||||
let Constraints = "$hi = $sx", hasSideEffects = 0 in
|
||||
multiclass RRILDm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
def rrr : RR<opc, (outs RC:$sx), (ins RC:$hi, RC:$sz, I32:$sy),
|
||||
!strconcat(opcStr, " $sx, $sz, $sy")>;
|
||||
@ -659,7 +659,7 @@ multiclass RRILDm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
|
||||
// Special RR multiclass for 128 bits shift right instruction.
|
||||
// e.g. SRD
|
||||
let Constraints = "$low = $sx", DisableEncoding = "$low", hasSideEffects = 0 in
|
||||
let Constraints = "$low = $sx", hasSideEffects = 0 in
|
||||
multiclass RRIRDm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
def rrr : RR<opc, (outs RC:$sx), (ins RC:$sz, RC:$low, I32:$sy),
|
||||
!strconcat(opcStr, " $sx, $sz, $sy")>;
|
||||
@ -689,7 +689,7 @@ multiclass RRI1m<string opcStr, bits<8>opc, RegisterClass RC, ValueType Ty,
|
||||
|
||||
// Special RR multiclass for MRG instruction.
|
||||
// e.g. MRG
|
||||
let Constraints = "$sx = $sd", DisableEncoding = "$sd", hasSideEffects = 0 in
|
||||
let Constraints = "$sx = $sd", hasSideEffects = 0 in
|
||||
multiclass RRMRGm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
def rr : RR<opc, (outs RC:$sx), (ins RC:$sy, RC:$sz, RC:$sd),
|
||||
!strconcat(opcStr, " $sx, $sy, $sz")>;
|
||||
@ -722,7 +722,7 @@ multiclass RRSWPm<string opcStr, bits<8>opc,
|
||||
|
||||
// Multiclass for CMOV instructions.
|
||||
// e.g. CMOVL, CMOVW, CMOVD, and etc.
|
||||
let Constraints = "$sx = $sd", DisableEncoding = "$sd", hasSideEffects = 0,
|
||||
let Constraints = "$sx = $sd", hasSideEffects = 0,
|
||||
cfw = ? in
|
||||
multiclass RRCMOVm<string opcStr, bits<8>opc, RegisterClass RC, ValueType Ty,
|
||||
SDPatternOperator OpNode = null_frag,
|
||||
@ -805,7 +805,7 @@ multiclass PFCHm<string opcStr, bits<8>opc> {
|
||||
|
||||
// Multiclass for CAS instructions.
|
||||
// e.g. TS1AML, TS1AMW, TS2AM, and etc.
|
||||
let Constraints = "$sx = $sd", DisableEncoding = "$sd",
|
||||
let Constraints = "$sx = $sd",
|
||||
mayStore=1, mayLoad = 1, hasSideEffects = 0 in
|
||||
multiclass RRCAStgm<string opcStr, bits<8>opc, RegisterClass RC, ValueType Ty,
|
||||
Operand immOp, Operand MEM, ComplexPattern ADDR,
|
||||
@ -920,7 +920,7 @@ multiclass STORECRm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
!strconcat(opcStr, " $sx, $sy, $sz")>;
|
||||
}
|
||||
|
||||
let hasSideEffects = 1, Constraints = "$sx = $sx_in", DisableEncoding = "$sx_in" in
|
||||
let hasSideEffects = 1, Constraints = "$sx = $sx_in" in
|
||||
multiclass TSCRm<string opcStr, bits<8>opc, RegisterClass RC> {
|
||||
def rrr : RR<opc, (outs RC:$sx), (ins RC:$sy, RC:$sz, RC:$sx_in),
|
||||
!strconcat(opcStr, " $sx, $sy, $sz")>;
|
||||
|
||||
@ -35,7 +35,7 @@ def STVM512rii : Pseudo<
|
||||
|
||||
// LVM/SVM instructions using VM512
|
||||
let hasSideEffects = 0, isCodeGenOnly = 1 in {
|
||||
let Constraints = "$vx = $vd", DisableEncoding = "$vd" in {
|
||||
let Constraints = "$vx = $vd" in {
|
||||
def LVMyir_y : Pseudo<(outs VM512:$vx), (ins uimm3:$sy, I64:$sz, VM512:$vd),
|
||||
"# pseudo LVM $vx, $sy, $sz, $vd">;
|
||||
def LVMyim_y : Pseudo<(outs VM512:$vx),
|
||||
@ -51,7 +51,7 @@ let hasSideEffects = 0, isCodeGenOnly = 1 in {
|
||||
}
|
||||
|
||||
// VFMK/VFMKW/VFMKS instructions using VM512
|
||||
let hasSideEffects = 0, isCodeGenOnly = 1, DisableEncoding = "$vl" in {
|
||||
let hasSideEffects = 0, isCodeGenOnly = 1 in {
|
||||
def VFMKyal : Pseudo<(outs VM512:$vmx), (ins I32:$vl),
|
||||
"# pseudo-vfmk.at $vmx">;
|
||||
def VFMKynal : Pseudo<(outs VM512:$vmx), (ins I32:$vl),
|
||||
@ -126,21 +126,18 @@ let hasSideEffects = 0, isCodeGenOnly = 1 in {
|
||||
|
||||
// Multiclass for VLD instructions
|
||||
let mayLoad = 1, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VLDbm<string opcStr, bits<8>opc, RegisterClass RC, dag dag_in,
|
||||
string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
multiclass VLDbm<string opcStr, bits<8>opc, RegisterClass RC, dag dag_in> {
|
||||
def "" : RVM<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx, $sy, $sz")>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base",
|
||||
isCodeGenOnly = 1 in
|
||||
let Constraints = "$vx = $base", isCodeGenOnly = 1 in
|
||||
def _v : RVM<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx, $sy, $sz")>;
|
||||
}
|
||||
multiclass VLDlm<string opcStr, bits<8>opc, RegisterClass RC, dag dag_in> {
|
||||
defm "" : VLDbm<opcStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : VLDbm<opcStr, opc, RC, !con(dag_in, (ins I32:$vl)), "$vl,">;
|
||||
defm L : VLDbm<opcStr, opc, RC, !con(dag_in, (ins VLS:$vl)), "$vl,">;
|
||||
defm l : VLDbm<opcStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : VLDbm<opcStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
let VE_VLIndex = 3 in
|
||||
@ -182,7 +179,7 @@ let cx = 1 in defm VLDL2DZX : VLDm<"vldl2d.zx", 0xc3, V64>;
|
||||
let mayStore = 1, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VSTbm<string opcStr, string argStr, bits<8>opc, dag dag_in> {
|
||||
def "" : RVM<opc, (outs), dag_in, !strconcat(opcStr, argStr)>;
|
||||
let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
def l : RVM<opc, (outs), !con(dag_in, (ins I32:$vl)),
|
||||
!strconcat(opcStr, argStr)>;
|
||||
def L : RVM<opc, (outs), !con(dag_in, (ins VLS:$vl)),
|
||||
@ -232,12 +229,10 @@ defm VSTL2D : VSTm<"vstl2d", 0xd3, V64>;
|
||||
// Multiclass for VGT instructions
|
||||
let mayLoad = 1, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VGTbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in, string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
dag dag_in> {
|
||||
def "" : RVM<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base",
|
||||
isCodeGenOnly = 1 in
|
||||
let Constraints = "$vx = $base", isCodeGenOnly = 1 in
|
||||
def _v : RVM<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
}
|
||||
@ -245,10 +240,8 @@ multiclass VGTlm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
defm "" : VGTbm<opcStr, argStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : VGTbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl)),
|
||||
"$vl,">;
|
||||
defm L : VGTbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl)),
|
||||
"$vl,">;
|
||||
defm l : VGTbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : VGTbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
multiclass VGTmm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
@ -297,7 +290,7 @@ def : MnemonicAlias<"vgtl.nc", "vgtl.zx.nc">;
|
||||
let mayStore = 1, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VSCbm<string opcStr, string argStr, bits<8>opc, dag dag_in> {
|
||||
def "" : RVM<opc, (outs), dag_in, !strconcat(opcStr, argStr)>;
|
||||
let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
def l : RVM<opc, (outs), !con(dag_in, (ins I32:$vl)),
|
||||
!strconcat(opcStr, argStr)>;
|
||||
def L : RVM<opc, (outs), !con(dag_in, (ins VLS:$vl)),
|
||||
@ -348,7 +341,7 @@ defm VSCL : VSCm<"vscl", 0xb3, V64>;
|
||||
let Uses = [VL] in
|
||||
multiclass PFCHVbm<string opcStr, string argStr, bits<8>opc, dag dag_in> {
|
||||
def "" : RVM<opc, (outs), dag_in, !strconcat(opcStr, argStr)>;
|
||||
let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
def l : RVM<opc, (outs), !con(dag_in, (ins I32:$vl)),
|
||||
!strconcat(opcStr, argStr)>;
|
||||
def L : RVM<opc, (outs), !con(dag_in, (ins VLS:$vl)),
|
||||
@ -373,8 +366,7 @@ let sx = 0, vx = ?, hasSideEffects = 0 in
|
||||
multiclass LSVbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
def "" : RR<opc, (outs RC:$vx), dag_in, !strconcat(opcStr, " ${vx}", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = "$base",
|
||||
isCodeGenOnly = 1 in
|
||||
let Constraints = "$vx = $base", isCodeGenOnly = 1 in
|
||||
def _v : RR<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " ${vx}", argStr)>;
|
||||
}
|
||||
@ -406,8 +398,7 @@ multiclass LVMbm<string opcStr, string argStr, bits<8>opc, RegisterClass RCM,
|
||||
dag dag_in> {
|
||||
def "" : RR<opc, (outs RCM:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = "$base",
|
||||
isCodeGenOnly = 1 in {
|
||||
let Constraints = "$vx = $base", isCodeGenOnly = 1 in {
|
||||
def _m : RR<opc, (outs RCM:$vx), !con(dag_in, (ins RCM:$base)),
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
}
|
||||
@ -440,11 +431,10 @@ defm SVM : SVMm<"svm", 0xa7, VM>;
|
||||
// Section 8.9.24 - VBRD (Vector Broadcast)
|
||||
let vx = ?, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VBRDbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in, string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
dag dag_in> {
|
||||
def "" : RV<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base",
|
||||
let Constraints = "$vx = $base",
|
||||
isCodeGenOnly = 1 in
|
||||
def _v : RV<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
@ -453,10 +443,8 @@ multiclass VBRDlm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
defm "" : VBRDbm<opcStr, argStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : VBRDbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl)),
|
||||
"$vl,">;
|
||||
defm L : VBRDbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl)),
|
||||
"$vl,">;
|
||||
defm l : VBRDbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : VBRDbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
multiclass VBRDmm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
@ -484,11 +472,10 @@ defm PVBRD : VBRDm<"pvbrd", 0x8c, V64, I64, VM512>;
|
||||
// Section 8.9.25 - VMV (Vector Move)
|
||||
let vx = ?, vz = ?, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass VMVbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in, string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
dag dag_in> {
|
||||
def "" : RV<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base",
|
||||
let Constraints = "$vx = $base",
|
||||
isCodeGenOnly = 1 in
|
||||
def _v : RV<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx, ", argStr)>;
|
||||
@ -497,10 +484,8 @@ multiclass VMVlm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
defm "" : VMVbm<opcStr, argStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : VMVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl)),
|
||||
"$vl,">;
|
||||
defm L : VMVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl)),
|
||||
"$vl,">;
|
||||
defm l : VMVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : VMVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
multiclass VMVmm<string opcStr, bits<8>opc, RegisterClass RC,
|
||||
@ -525,12 +510,10 @@ defm VMV : VMVm<"vmv", 0x9c, V64, VM>;
|
||||
// Multiclass for generic vector calculation
|
||||
let vx = ?, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass RVbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in, string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
dag dag_in> {
|
||||
def "" : RV<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx", argStr)>;
|
||||
let Constraints = "$vx = $base", DisableEncoding = disEnc#"$base",
|
||||
isCodeGenOnly = 1 in
|
||||
let Constraints = "$vx = $base", isCodeGenOnly = 1 in
|
||||
def _v : RV<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx", argStr)>;
|
||||
}
|
||||
@ -538,10 +521,8 @@ multiclass RVlm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
defm "" : RVbm<opcStr, argStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : RVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl)),
|
||||
"$vl,">;
|
||||
defm L : RVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl)),
|
||||
"$vl,">;
|
||||
defm l : RVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : RVbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
multiclass RVmm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
@ -688,11 +669,10 @@ multiclass RVFIXm<string opcStr, bits<8> opc, RegisterClass RC,
|
||||
// Multiclass for generic iterative vector calculation
|
||||
let vx = ?, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass RVIbm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in, string disEnc = ""> {
|
||||
let DisableEncoding = disEnc in
|
||||
dag dag_in> {
|
||||
def "" : RV<opc, (outs RC:$vx), dag_in,
|
||||
!strconcat(opcStr, " $vx", argStr)>;
|
||||
let isCodeGenOnly = 1, Constraints = "$vx = $base", DisableEncoding = disEnc#"$base" in
|
||||
let isCodeGenOnly = 1, Constraints = "$vx = $base" in
|
||||
def _v : RV<opc, (outs RC:$vx), !con(dag_in, (ins RC:$base)),
|
||||
!strconcat(opcStr, " $vx", argStr)>;
|
||||
}
|
||||
@ -700,10 +680,8 @@ multiclass RVIlm<string opcStr, string argStr, bits<8>opc, RegisterClass RC,
|
||||
dag dag_in> {
|
||||
defm "" : RVIbm<opcStr, argStr, opc, RC, dag_in>;
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
defm l : RVIbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl)),
|
||||
"$vl,">;
|
||||
defm L : RVIbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl)),
|
||||
"$vl,">;
|
||||
defm l : RVIbm<opcStr, argStr, opc, RC, !con(dag_in, (ins I32:$vl))>;
|
||||
defm L : RVIbm<opcStr, argStr, opc, RC, !con(dag_in, (ins VLS:$vl))>;
|
||||
}
|
||||
}
|
||||
// Generic RV multiclass for iterative operation with 2 argument.
|
||||
@ -743,7 +721,7 @@ let vx = ?, hasSideEffects = 0, Uses = [VL] in
|
||||
multiclass RVMKbm<string opcStr, string argStr, bits<8>opc, dag dag_out,
|
||||
dag dag_in> {
|
||||
def "" : RV<opc, dag_out, dag_in, !strconcat(opcStr, argStr)>;
|
||||
let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
def l : RV<opc, dag_out, !con(dag_in, (ins I32:$vl)),
|
||||
!strconcat(opcStr, argStr)>;
|
||||
def L : RV<opc, dag_out, !con(dag_in, (ins VLS:$vl)),
|
||||
@ -796,7 +774,7 @@ multiclass RVMSbm<string opcStr, string argStr, bits<8>opc, dag dag_in> {
|
||||
bits<7> sx;
|
||||
let Inst{54-48} = sx;
|
||||
}
|
||||
let DisableEncoding = "$vl", isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
let isCodeGenOnly = 1, VE_VLInUse = 1 in {
|
||||
def l : RV<opc, (outs I64:$sx), !con(dag_in, (ins I32:$vl)),
|
||||
!strconcat(opcStr, " $sx,", argStr)> {
|
||||
bits<7> sx;
|
||||
|
||||
@ -134,12 +134,6 @@ bool CodeEmitterGen::addCodeToMergeInOperand(const Record *R,
|
||||
return false;
|
||||
}
|
||||
|
||||
if (CGI.Operands.isFlatOperandNotEmitted(OpIdx)) {
|
||||
PrintError(R,
|
||||
"Operand " + VarName + " used but also marked as not emitted!");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::pair<unsigned, unsigned> SO = CGI.Operands.getSubOperandNumber(OpIdx);
|
||||
StringRef EncoderMethodName =
|
||||
CGI.Operands[SO.first].EncoderMethodNames[SO.second];
|
||||
|
||||
@ -183,8 +183,6 @@ CGIOperandList::CGIOperandList(const Record *R) : TheDef(R) {
|
||||
// If we have no explicit sub-op dag, but have an top-level encoder
|
||||
// method, the single encoder will multiple sub-ops, itself.
|
||||
OpInfo.EncoderMethodNames[0] = EncoderMethod;
|
||||
OpInfo.DoNotEncode.set();
|
||||
OpInfo.DoNotEncode[0] = false;
|
||||
}
|
||||
|
||||
MIOperandNo += NumOps;
|
||||
@ -406,21 +404,6 @@ static void ParseConstraints(StringRef CStr, CGIOperandList &Ops,
|
||||
}
|
||||
}
|
||||
|
||||
void CGIOperandList::ProcessDisableEncoding(StringRef DisableEncoding) {
|
||||
while (true) {
|
||||
StringRef OpName;
|
||||
std::tie(OpName, DisableEncoding) = getToken(DisableEncoding, " ,\t");
|
||||
if (OpName.empty())
|
||||
break;
|
||||
|
||||
// Figure out which operand this is.
|
||||
std::pair<unsigned, unsigned> Op = parseOperandName(OpName, false);
|
||||
|
||||
// Mark the operand as not-to-be encoded.
|
||||
OperandList[Op.first].DoNotEncode[Op.second] = true;
|
||||
}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// CodeGenInstruction Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
@ -490,9 +473,6 @@ CodeGenInstruction::CodeGenInstruction(const Record *R)
|
||||
// Parse Constraints.
|
||||
ParseConstraints(R->getValueAsString("Constraints"), Operands, R);
|
||||
|
||||
// Parse the DisableEncoding field.
|
||||
Operands.ProcessDisableEncoding(R->getValueAsString("DisableEncoding"));
|
||||
|
||||
// First check for a ComplexDeprecationPredicate.
|
||||
if (R->getValue("ComplexDeprecationPredicate")) {
|
||||
HasComplexDeprecationPredicate = true;
|
||||
|
||||
@ -103,11 +103,6 @@ public:
|
||||
unsigned MIOperandNo;
|
||||
unsigned MINumOperands; // The number of operands.
|
||||
|
||||
/// DoNotEncode - Bools are set to true in this vector for each operand in
|
||||
/// the DisableEncoding list. These should not be emitted by the code
|
||||
/// emitter.
|
||||
BitVector DoNotEncode;
|
||||
|
||||
/// MIOperandInfo - Default MI operand type. Note an operand may be made
|
||||
/// up of multiple MI operands.
|
||||
const DagInit *MIOperandInfo;
|
||||
@ -122,7 +117,7 @@ public:
|
||||
: Rec(R), Name(Name), SubOpNames(MINO),
|
||||
PrinterMethodName(PrinterMethodName), EncoderMethodNames(MINO),
|
||||
OperandType(OT), MIOperandNo(MION), MINumOperands(MINO),
|
||||
DoNotEncode(MINO), MIOperandInfo(MIOI), Constraints(MINO) {}
|
||||
MIOperandInfo(MIOI), Constraints(MINO) {}
|
||||
|
||||
/// getTiedOperand - If this operand is tied to another one, return the
|
||||
/// other operand number. Otherwise, return -1.
|
||||
@ -205,17 +200,6 @@ public:
|
||||
return {i, Op - OperandList[i].MIOperandNo};
|
||||
}
|
||||
}
|
||||
|
||||
/// isFlatOperandNotEmitted - Return true if the specified flat operand #
|
||||
/// should not be emitted with the code emitter.
|
||||
bool isFlatOperandNotEmitted(unsigned FlatOpNo) const {
|
||||
std::pair<unsigned, unsigned> Op = getSubOperandNumber(FlatOpNo);
|
||||
if (OperandList[Op.first].DoNotEncode.size() > Op.second)
|
||||
return OperandList[Op.first].DoNotEncode[Op.second];
|
||||
return false;
|
||||
}
|
||||
|
||||
void ProcessDisableEncoding(StringRef Value);
|
||||
};
|
||||
|
||||
class CodeGenInstruction {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user