Lines Matching defs:InstImpl
34 template <typename TraitsType> struct InstImpl { struct
35 using Traits = TraitsType;
36 using Assembler = typename Traits::Assembler;
37 using AssemblerLabel = typename Assembler::Label;
38 using AssemblerImmediate = typename Assembler::Immediate;
39 using TargetLowering = typename Traits::TargetLowering;
40 using Address = typename Traits::Address;
41 using X86Operand = typename Traits::X86Operand;
42 using X86OperandMem = typename Traits::X86OperandMem;
43 using VariableSplit = typename Traits::VariableSplit;
45 using GPRRegister = typename Traits::RegisterSet::GPRRegister;
46 using RegisterSet = typename Traits::RegisterSet;
47 using XmmRegister = typename Traits::RegisterSet::XmmRegister;
49 using Cond = typename Traits::Cond;
50 using BrCond = typename Traits::Cond::BrCond;
51 using CmppsCond = typename Traits::Cond::CmppsCond;
54 using CastEmitterRegOp =
57 using ThreeOpImmEmitter =
59 using GPREmitterAddrOp = typename Traits::Assembler::GPREmitterAddrOp;
60 using GPREmitterRegOp = typename Traits::Assembler::GPREmitterRegOp;
61 using GPREmitterShiftD = typename Traits::Assembler::GPREmitterShiftD;
62 using GPREmitterShiftOp = typename Traits::Assembler::GPREmitterShiftOp;
63 using GPREmitterOneOp = typename Traits::Assembler::GPREmitterOneOp;
64 using XmmEmitterRegOp = typename Traits::Assembler::XmmEmitterRegOp;
65 using XmmEmitterShiftOp = typename Traits::Assembler::XmmEmitterShiftOp;
66 using XmmEmitterMovOps = typename Traits::Assembler::XmmEmitterMovOps;
71 InstX86Base &operator=(const InstX86Base &) = delete;
74 enum InstKindX86 {
203 enum SseSuffix { None, Packed, Unpack, Scalar, Integral, Pack };
214 static TargetLowering *getTarget(const Cfg *Func) { in getTarget()
219 InstX86Base(Cfg *Func, InstKindX86 Kind, SizeT Maxsrcs, Variable *Dest) in InstX86Base()
222 static bool isClassof(const Inst *Instr, InstKindX86 MyKind) { in isClassof()
234 void validateVectorAddrMode() const { in validateVectorAddrMode()
243 static void validateVectorAddrModeOpnd(const Operand *Opnd) { in validateVectorAddrModeOpnd()
259 InstX86FakeRMW &operator=(const InstX86FakeRMW &) = delete;
270 Operand *getAddr() const { return this->getSrc(1); } in getAddr()
271 Operand *getData() const { return this->getSrc(0); } in getData()
272 InstArithmetic::OpKind getOp() const { return Op; } in getOp()
273 Variable *getBeacon() const { in getBeacon()
277 static bool classof(const Inst *Instr) { in classof()
290 InstX86GetIP &operator=(const InstX86GetIP &) = delete;
293 static InstX86GetIP *create(Cfg *Func, Variable *Dest) { in create()
299 static bool classof(const Inst *Instr) { in classof()
346 InstX86Label &operator=(const InstX86Label &) = delete;
349 static InstX86Label *create(Cfg *Func, TargetLowering *Target) { in create()
352 uint32_t getEmitInstCount() const override { return 0; } in getEmitInstCount()
353 GlobalString getLabelName() const { return Name; } in getLabelName()
354 SizeT getLabelNumber() const { return LabelNumber; } in getLabelNumber()
355 bool isLabel() const override { return true; } in isLabel()
359 void setRelocOffset(RelocOffset *Value) { OffsetReloc = Value; } in setRelocOffset()
364 SizeT LabelNumber; // used for unique label generation.
365 RelocOffset *OffsetReloc = nullptr;
366 GlobalString Name;
373 InstX86Br &operator=(const InstX86Br &) = delete;
376 enum Mode { Near, Far };
379 static InstX86Br *create(Cfg *Func, CfgNode *TargetTrue, in create()
388 static InstX86Br *create(Cfg *Func, CfgNode *Target, Mode Kind) { in create()
397 static InstX86Br *create(Cfg *Func, CfgNode *Target, BrCond Condition, in create()
407 static InstX86Br *create(Cfg *Func, InstX86Label *Label, BrCond Condition, in create()
414 const CfgNode *getTargetTrue() const { return TargetTrue; } in getTargetTrue()
415 const CfgNode *getTargetFalse() const { return TargetFalse; } in getTargetFalse()
416 bool isNear() const { return Kind == Near; } in isNear()
418 uint32_t getEmitInstCount() const override { in getEmitInstCount()
428 bool isUnconditionalBranch() const override { in isUnconditionalBranch()
431 const Inst *getIntraBlockBranchTarget() const override { return Label; } in getIntraBlockBranchTarget()
436 static bool classof(const Inst *Instr) { in classof()
444 BrCond Condition;
445 const CfgNode *TargetTrue;
446 const CfgNode *TargetFalse;
447 const InstX86Label *Label; // Intra-block branch target
448 const Mode Kind;
457 InstX86Jmp &operator=(const InstX86Jmp &) = delete;
460 static InstX86Jmp *create(Cfg *Func, Operand *Target) { in create()
463 Operand *getJmpTarget() const { return this->getSrc(0); } in getJmpTarget()
467 static bool classof(const Inst *Instr) { in classof()
479 InstX86Call &operator=(const InstX86Call &) = delete;
482 static InstX86Call *create(Cfg *Func, Variable *Dest, Operand *CallTarget) { in create()
486 Operand *getCallTarget() const { return this->getSrc(0); } in getCallTarget()
490 static bool classof(const Inst *Instr) { in classof()
564 operator=(const InstX86BaseInplaceopGPR &) = delete;
569 void emit(const Cfg *Func) const override { in emit()
577 void emitIAS(const Cfg *Func) const override { in emitIAS()
583 void dump(const Cfg *Func) const override { in dump()
591 static bool classof(const Inst *Instr) { in classof()
596 InstX86BaseInplaceopGPR(Cfg *Func, Operand *SrcDest) in InstX86BaseInplaceopGPR()
603 static const GPREmitterOneOp Emitter;
611 InstX86BaseUnaryopGPR &operator=(const InstX86BaseUnaryopGPR &) = delete;
616 void emit(const Cfg *Func) const override { in emit()
634 void emitIAS(const Cfg *Func) const override { in emitIAS()
649 void dump(const Cfg *Func) const override { in dump()
675 auto *Add = InstImpl<TraitsType>::InstX86Add::create( in deoptLeaToAddOrNull() argument
685 static const char *Opcode;
686 static const GPREmitterRegOp Emitter;
693 InstX86BaseUnaryopXmm &operator=(const InstX86BaseUnaryopXmm &) = delete;
698 void emit(const Cfg *Func) const override { in emit()
708 void emitIAS(const Cfg *Func) const override { in emitIAS()
713 void dump(const Cfg *Func) const override { in dump()
721 static bool classof(const Inst *Instr) { in classof()
726 InstX86BaseUnaryopXmm(Cfg *Func, Variable *Dest, Operand *Src) in InstX86BaseUnaryopXmm()
731 static const char *Opcode;
732 static const XmmEmitterRegOp Emitter;
740 operator=(const InstX86BaseBinopGPRShift &) = delete;
745 void emit(const Cfg *Func) const override { in emit()
750 void emitIAS(const Cfg *Func) const override { in emitIAS()
755 void dump(const Cfg *Func) const override { in dump()
763 static bool classof(const Inst *Instr) { in classof()
768 InstX86BaseBinopGPRShift(Cfg *Func, Variable *Dest, Operand *Source) in InstX86BaseBinopGPRShift()
774 static const char *Opcode;
775 static const GPREmitterShiftOp Emitter;
782 InstX86BaseBinopGPR &operator=(const InstX86BaseBinopGPR &) = delete;
787 void emit(const Cfg *Func) const override { in emit()
792 void emitIAS(const Cfg *Func) const override { in emitIAS()
800 void dump(const Cfg *Func) const override { in dump()
808 static bool classof(const Inst *Instr) { in classof()
813 InstX86BaseBinopGPR(Cfg *Func, Variable *Dest, Operand *Source) in InstX86BaseBinopGPR()
819 static const char *Opcode;
820 static const GPREmitterRegOp Emitter;
827 InstX86BaseBinopRMW &operator=(const InstX86BaseBinopRMW &) = delete;
832 void emit(const Cfg *Func) const override { in emit()
837 void emitIAS(const Cfg *Func) const override { in emitIAS()
842 void dump(const Cfg *Func) const override { in dump()
849 static bool classof(const Inst *Instr) { in classof()
854 InstX86BaseBinopRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86BaseBinopRMW()
860 static const char *Opcode;
861 static const GPREmitterAddrOp Emitter;
869 InstX86BaseBinopXmm &operator=(const InstX86BaseBinopXmm &) = delete;
874 void emit(const Cfg *Func) const override { in emit()
903 void emitIAS(const Cfg *Func) const override { in emitIAS()
911 void dump(const Cfg *Func) const override { in dump()
919 static bool classof(const Inst *Instr) { in classof()
932 const Type ArithmeticTypeOverride;
933 static const char *Opcode;
934 static const XmmEmitterRegOp Emitter;
942 operator=(const InstX86BaseBinopXmmShift &) = delete;
947 void emit(const Cfg *Func) const override { in emit()
956 void emitIAS(const Cfg *Func) const override { in emitIAS()
965 void dump(const Cfg *Func) const override { in dump()
973 static bool classof(const Inst *Instr) { in classof()
978 InstX86BaseBinopXmmShift(Cfg *Func, Variable *Dest, Operand *Source) in InstX86BaseBinopXmmShift()
984 static const char *Opcode;
985 static const XmmEmitterShiftOp Emitter;
992 InstX86BaseTernop &operator=(const InstX86BaseTernop &) = delete;
997 void emit(const Cfg *Func) const override { in emit()
1009 void dump(const Cfg *Func) const override { in dump()
1017 static bool classof(const Inst *Instr) { in classof()
1022 InstX86BaseTernop(Cfg *Func, Variable *Dest, Operand *Source1, in InstX86BaseTernop()
1030 static const char *Opcode;
1039 operator=(const InstX86BaseThreeAddressop &) = delete;
1044 void emit(const Cfg *Func) const override { in emit()
1056 void dump(const Cfg *Func) const override { in dump()
1064 static bool classof(const Inst *Instr) { in classof()
1069 InstX86BaseThreeAddressop(Cfg *Func, Variable *Dest, Operand *Source0, in InstX86BaseThreeAddressop()
1076 static const char *Opcode;
1084 InstX86BaseMovlike &operator=(const InstX86BaseMovlike &) = delete;
1089 bool isRedundantAssign() const override { in isRedundantAssign()
1109 bool isVarAssign() const override { in isVarAssign()
1112 void dump(const Cfg *Func) const override { in dump()
1121 static bool classof(const Inst *Instr) { in classof()
1126 InstX86BaseMovlike(Cfg *Func, Variable *Dest, Operand *Source) in InstX86BaseMovlike()
1136 static const char *Opcode;
1141 static InstX86Bswap *create(Cfg *Func, Operand *SrcDest) { in create()
1146 InstX86Bswap(Cfg *Func, Operand *SrcDest) in InstX86Bswap()
1152 static InstX86Neg *create(Cfg *Func, Operand *SrcDest) { in create()
1157 InstX86Neg(Cfg *Func, Operand *SrcDest) in InstX86Neg()
1163 static InstX86Bsf *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1168 InstX86Bsf(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Bsf()
1174 static InstX86Bsr *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1179 InstX86Bsr(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Bsr()
1185 static InstX86Lea *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1192 InstX86Lea(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Lea()
1199 static InstX86Cbwdq *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1207 InstX86Cbwdq(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Cbwdq()
1213 static InstX86Movsx *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1222 InstX86Movsx(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Movsx()
1228 static InstX86Movzx *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1238 void setMustKeep() { MustKeep = true; } in setMustKeep()
1243 InstX86Movzx(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Movzx()
1251 static InstX86Movd *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1260 InstX86Movd(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Movd()
1267 InstX86Movmsk &operator=(const InstX86Movmsk &) = delete;
1270 static InstX86Movmsk *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1277 static bool classof(const Inst *Instr) { in classof()
1287 static InstX86Sqrt *create(Cfg *Func, Variable *Dest, Operand *Src) { in create()
1294 InstX86Sqrt(Cfg *Func, Variable *Dest, Operand *Src) in InstX86Sqrt()
1301 static InstX86Mov *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1312 InstX86Mov(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Mov()
1320 static InstX86Movp *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1329 InstX86Movp(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Movp()
1336 static InstX86Movq *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1345 InstX86Movq(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Movq()
1351 static InstX86Add *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1356 InstX86Add(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Add()
1362 static InstX86AddRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1369 InstX86AddRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86AddRMW()
1377 static InstX86Addps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1383 InstX86Addps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Addps()
1391 static InstX86Adc *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1396 InstX86Adc(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Adc()
1402 static InstX86AdcRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1409 InstX86AdcRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86AdcRMW()
1417 static InstX86Addss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1423 InstX86Addss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Addss()
1433 static InstX86Padd *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1439 InstX86Padd(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Padd()
1449 static InstX86Padds *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1455 InstX86Padds(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Padds()
1465 static InstX86Paddus *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1471 InstX86Paddus(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Paddus()
1479 static InstX86Sub *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1484 InstX86Sub(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Sub()
1490 static InstX86SubRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1497 InstX86SubRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86SubRMW()
1505 static InstX86Subps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1511 InstX86Subps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Subps()
1521 static InstX86Subss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1527 InstX86Subss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Subss()
1535 static InstX86Sbb *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1540 InstX86Sbb(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Sbb()
1546 static InstX86SbbRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1553 InstX86SbbRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86SbbRMW()
1561 static InstX86Psub *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1567 InstX86Psub(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psub()
1577 static InstX86Psubs *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1583 InstX86Psubs(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psubs()
1593 static InstX86Psubus *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1599 InstX86Psubus(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psubus()
1607 static InstX86And *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1612 InstX86And(Cfg *Func, Variable *Dest, Operand *Source) in InstX86And()
1620 static InstX86Andnps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1626 InstX86Andnps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Andnps()
1636 static InstX86Andps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1642 InstX86Andps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Andps()
1650 static InstX86AndRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1657 InstX86AndRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86AndRMW()
1664 static InstX86Pand *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1670 InstX86Pand(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pand()
1680 static InstX86Pandn *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1686 InstX86Pandn(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pandn()
1696 static InstX86Maxss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1702 InstX86Maxss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Maxss()
1712 static InstX86Minss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1718 InstX86Minss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Minss()
1728 static InstX86Maxps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1734 InstX86Maxps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Maxps()
1744 static InstX86Minps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1750 InstX86Minps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Minps()
1758 static InstX86Or *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1763 InstX86Or(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Or()
1771 static InstX86Orps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1777 InstX86Orps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Orps()
1785 static InstX86OrRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1792 InstX86OrRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86OrRMW()
1799 static InstX86Por *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1804 InstX86Por(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Por()
1812 static InstX86Xor *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1817 InstX86Xor(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Xor()
1825 static InstX86Xorps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1831 InstX86Xorps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Xorps()
1839 static InstX86XorRMW *create(Cfg *Func, X86OperandMem *DestSrc0, in create()
1846 InstX86XorRMW(Cfg *Func, X86OperandMem *DestSrc0, Operand *Src1) in InstX86XorRMW()
1853 static InstX86Pxor *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1859 InstX86Pxor(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pxor()
1867 static InstX86Imul *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1876 InstX86Imul(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Imul()
1883 static InstX86ImulImm *create(Cfg *Func, Variable *Dest, Operand *Source0, in create()
1893 InstX86ImulImm(Cfg *Func, Variable *Dest, Operand *Source0, in InstX86ImulImm()
1903 static InstX86Mulps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1909 InstX86Mulps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Mulps()
1919 static InstX86Mulss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1925 InstX86Mulss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Mulss()
1935 static InstX86Pmull *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1951 InstX86Pmull(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pmull()
1961 static InstX86Pmulhw *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1969 InstX86Pmulhw(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pmulhw()
1979 static InstX86Pmulhuw *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
1987 InstX86Pmulhuw(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pmulhuw()
1997 static InstX86Pmaddwd *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2005 InstX86Pmaddwd(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pmaddwd()
2015 static InstX86Pmuludq *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2023 InstX86Pmuludq(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pmuludq()
2033 static InstX86Divps *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2039 InstX86Divps(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Divps()
2049 static InstX86Divss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2055 InstX86Divss(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Divss()
2063 static InstX86Rol *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2068 InstX86Rol(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Rol()
2074 static InstX86Shl *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2079 InstX86Shl(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Shl()
2085 static InstX86Psll *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2094 InstX86Psll(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psll()
2100 static InstX86Psrl *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2106 InstX86Psrl(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psrl()
2113 static InstX86Shr *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2118 InstX86Shr(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Shr()
2124 static InstX86Sar *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2129 InstX86Sar(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Sar()
2135 static InstX86Psra *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2144 InstX86Psra(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Psra()
2154 const Type Ty = ArithmeticTypeOverride == IceType_void
2166 InstX86Pcmpeq(Cfg *Func, Variable *Dest, Operand *Source, in InstX86Pcmpeq()
2177 static InstX86Pcmpgt *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
2186 InstX86Pcmpgt(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pcmpgt()
2202 static InstX86MovssRegs *create(Cfg *Func, Variable *Dest, in create()
2211 InstX86MovssRegs(Cfg *Func, Variable *Dest, Operand *Source) in InstX86MovssRegs()
2219 static InstX86Idiv *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2229 InstX86Idiv(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) in InstX86Idiv()
2235 static InstX86Div *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2245 InstX86Div(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) in InstX86Div()
2251 static InstX86Insertps *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2260 InstX86Insertps(Cfg *Func, Variable *Dest, Operand *Source1, in InstX86Insertps()
2268 static InstX86Pinsr *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2282 InstX86Pinsr(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) in InstX86Pinsr()
2288 static InstX86Shufps *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2297 InstX86Shufps(Cfg *Func, Variable *Dest, Operand *Source1, Operand *Source2) in InstX86Shufps()
2304 static InstX86Blendvps *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2316 InstX86Blendvps(Cfg *Func, Variable *Dest, Operand *Source1, in InstX86Blendvps()
2324 static InstX86Pblendvb *create(Cfg *Func, Variable *Dest, Operand *Source1, in create()
2336 InstX86Pblendvb(Cfg *Func, Variable *Dest, Operand *Source1, in InstX86Pblendvb()
2344 static InstX86Pextr *create(Cfg *Func, Variable *Dest, Operand *Source0, in create()
2358 InstX86Pextr(Cfg *Func, Variable *Dest, Operand *Source0, Operand *Source1) in InstX86Pextr()
2365 static InstX86Pshufd *create(Cfg *Func, Variable *Dest, Operand *Source0, in create()
2374 InstX86Pshufd(Cfg *Func, Variable *Dest, Operand *Source0, Operand *Source1) in InstX86Pshufd()
2383 InstX86BaseLockable &operator=(const InstX86BaseLockable &) = delete;
2388 InstX86BaseLockable(Cfg *Func, typename InstX86Base::InstKindX86 Kind, in InstX86BaseLockable()
2401 InstX86Mul &operator=(const InstX86Mul &) = delete;
2404 static InstX86Mul *create(Cfg *Func, Variable *Dest, Variable *Source1, in create()
2412 static bool classof(const Inst *Instr) { in classof()
2424 InstX86Shld &operator=(const InstX86Shld &) = delete;
2427 static InstX86Shld *create(Cfg *Func, Variable *Dest, Variable *Source1, in create()
2435 static bool classof(const Inst *Instr) { in classof()
2447 InstX86Shrd &operator=(const InstX86Shrd &) = delete;
2450 static InstX86Shrd *create(Cfg *Func, Variable *Dest, Variable *Source1, in create()
2458 static bool classof(const Inst *Instr) { in classof()
2470 InstX86Cmov &operator=(const InstX86Cmov &) = delete;
2473 static InstX86Cmov *create(Cfg *Func, Variable *Dest, Operand *Source, in create()
2481 static bool classof(const Inst *Instr) { in classof()
2488 BrCond Condition;
2495 InstX86Cmpps &operator=(const InstX86Cmpps &) = delete;
2498 static InstX86Cmpps *create(Cfg *Func, Variable *Dest, Operand *Source, in create()
2506 static bool classof(const Inst *Instr) { in classof()
2513 CmppsCond Condition;
2524 InstX86Cmpxchg &operator=(const InstX86Cmpxchg &) = delete;
2527 static InstX86Cmpxchg *create(Cfg *Func, Operand *DestOrAddr, Variable *Eax, in create()
2535 static bool classof(const Inst *Instr) { in classof()
2552 InstX86Cmpxchg8b &operator=(const InstX86Cmpxchg8b &) = delete;
2555 static InstX86Cmpxchg8b *create(Cfg *Func, X86OperandMem *Dest, in create()
2564 static bool classof(const Inst *Instr) { in classof()
2580 InstX86Cvt &operator=(const InstX86Cvt &) = delete;
2583 enum CvtVariant { Si2ss, Tss2si, Ss2si, Float2float, Dq2ps, Tps2dq, Ps2dq };
2584 static InstX86Cvt *create(Cfg *Func, Variable *Dest, Operand *Source, in create()
2592 static bool classof(const Inst *Instr) { in classof()
2595 bool isTruncating() const { return Variant == Tss2si || Variant == Tps2dq; } in isTruncating()
2606 static InstX86Round *create(Cfg *Func, Variable *Dest, Operand *Source, in create()
2616 InstX86Round(Cfg *Func, Variable *Dest, Operand *Source, Operand *Imm) in InstX86Round()
2625 InstX86Icmp &operator=(const InstX86Icmp &) = delete;
2628 static InstX86Icmp *create(Cfg *Func, Operand *Src1, Operand *Src2) { in create()
2634 static bool classof(const Inst *Instr) { in classof()
2646 InstX86Ucomiss &operator=(const InstX86Ucomiss &) = delete;
2649 static InstX86Ucomiss *create(Cfg *Func, Operand *Src1, Operand *Src2) { in create()
2656 static bool classof(const Inst *Instr) { in classof()
2668 InstX86UD2 &operator=(const InstX86UD2 &) = delete;
2671 static InstX86UD2 *create(Cfg *Func) { in create()
2677 static bool classof(const Inst *Instr) { in classof()
2689 InstX86Int3 &operator=(const InstX86Int3 &) = delete;
2692 static InstX86Int3 *create(Cfg *Func) { in create()
2698 static bool classof(const Inst *Instr) { in classof()
2710 InstX86Test &operator=(const InstX86Test &) = delete;
2713 static InstX86Test *create(Cfg *Func, Operand *Source1, Operand *Source2) { in create()
2720 static bool classof(const Inst *Instr) { in classof()
2732 InstX86Mfence &operator=(const InstX86Mfence &) = delete;
2735 static InstX86Mfence *create(Cfg *Func) { in create()
2741 static bool classof(const Inst *Instr) { in classof()
2755 InstX86Store &operator=(const InstX86Store &) = delete;
2758 static InstX86Store *create(Cfg *Func, Operand *Value, X86Operand *Mem) { in create()
2765 static bool classof(const Inst *Instr) { in classof()
2780 InstX86StoreP &operator=(const InstX86StoreP &) = delete;
2783 static InstX86StoreP *create(Cfg *Func, Variable *Value, in create()
2791 static bool classof(const Inst *Instr) { in classof()
2802 InstX86StoreQ &operator=(const InstX86StoreQ &) = delete;
2805 static InstX86StoreQ *create(Cfg *Func, Operand *Value, in create()
2813 static bool classof(const Inst *Instr) { in classof()
2824 InstX86StoreD &operator=(const InstX86StoreD &) = delete;
2827 static InstX86StoreD *create(Cfg *Func, Operand *Value, in create()
2835 static bool classof(const Inst *Instr) { in classof()
2847 InstX86Nop &operator=(const InstX86Nop &) = delete;
2853 static InstX86Nop *create(Cfg *Func, NopVariant Variant) { in create()
2859 static bool classof(const Inst *Instr) { in classof()
2866 NopVariant Variant;
2873 InstX86Fld &operator=(const InstX86Fld &) = delete;
2876 static InstX86Fld *create(Cfg *Func, Operand *Src) { in create()
2882 static bool classof(const Inst *Instr) { in classof()
2894 InstX86Fstp &operator=(const InstX86Fstp &) = delete;
2897 static InstX86Fstp *create(Cfg *Func, Variable *Dest) { in create()
2903 static bool classof(const Inst *Instr) { in classof()
2914 InstX86Pop &operator=(const InstX86Pop &) = delete;
2917 static InstX86Pop *create(Cfg *Func, Variable *Dest) { in create()
2923 static bool classof(const Inst *Instr) { in classof()
2934 InstX86Push &operator=(const InstX86Push &) = delete;
2937 static InstX86Push *create(Cfg *Func, InstX86Label *Label) { in create()
2940 static InstX86Push *create(Cfg *Func, Operand *Source) { in create()
2946 static bool classof(const Inst *Instr) { in classof()
2964 InstX86Ret &operator=(const InstX86Ret &) = delete;
2973 static bool classof(const Inst *Instr) { in classof()
2985 InstX86Setcc &operator=(const InstX86Setcc &) = delete;
2988 static InstX86Setcc *create(Cfg *Func, Variable *Dest, BrCond Cond) { in create()
2995 static bool classof(const Inst *Instr) { in classof()
3002 const BrCond Condition;
3015 InstX86Xadd &operator=(const InstX86Xadd &) = delete;
3018 static InstX86Xadd *create(Cfg *Func, Operand *Dest, Variable *Source, in create()
3026 static bool classof(const Inst *Instr) { in classof()
3042 InstX86Xchg &operator=(const InstX86Xchg &) = delete;
3045 static InstX86Xchg *create(Cfg *Func, Operand *Dest, Variable *Source) { in create()
3052 static bool classof(const Inst *Instr) { in classof()
3065 InstX86IacaStart &operator=(const InstX86IacaStart &) = delete;
3068 static InstX86IacaStart *create(Cfg *Func) { in create()
3074 static bool classof(const Inst *Instr) { in classof()
3087 InstX86IacaEnd &operator=(const InstX86IacaEnd &) = delete;
3090 static InstX86IacaEnd *create(Cfg *Func) { in create()
3096 static bool classof(const Inst *Instr) { in classof()
3108 static InstX86Pshufb *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
3114 InstX86Pshufb(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Pshufb()
3124 static InstX86Punpckl *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
3130 InstX86Punpckl(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Punpckl()
3140 static InstX86Punpckh *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
3146 InstX86Punpckh(Cfg *Func, Variable *Dest, Operand *Source) in InstX86Punpckh()
3156 static InstX86Packss *create(Cfg *Func, Variable *Dest, Operand *Source) { in create()
3184 }; // struct InstImpl argument