mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
x64Emitter: Pass some OpArg parameters by const reference
Considering OpArg is a struct, passing by value creates unnecessary copies.
This commit is contained in:
@ -140,7 +140,7 @@ struct OpArg
|
||||
//if scale == 0 never mind offsetting
|
||||
offset = _offset;
|
||||
}
|
||||
bool operator==(OpArg b)
|
||||
bool operator==(const OpArg& b) const
|
||||
{
|
||||
return operandReg == b.operandReg && scale == b.scale && offsetOrBaseReg == b.offsetOrBaseReg &&
|
||||
indexReg == b.indexReg && offset == b.offset;
|
||||
@ -307,22 +307,22 @@ private:
|
||||
void WriteSimple2Byte(int bits, u8 byte1, u8 byte2, X64Reg reg);
|
||||
void WriteMulDivType(int bits, OpArg src, int ext);
|
||||
void WriteBitSearchType(int bits, X64Reg dest, OpArg src, u8 byte2, bool rep = false);
|
||||
void WriteShift(int bits, OpArg dest, OpArg& shift, int ext);
|
||||
void WriteBitTest(int bits, OpArg& dest, OpArg& index, int ext);
|
||||
void WriteShift(int bits, OpArg dest, const OpArg& shift, int ext);
|
||||
void WriteBitTest(int bits, const OpArg& dest, const OpArg& index, int ext);
|
||||
void WriteMXCSR(OpArg arg, int ext);
|
||||
void WriteSSEOp(u8 opPrefix, u16 op, X64Reg regOp, OpArg arg, int extrabytes = 0);
|
||||
void WriteSSSE3Op(u8 opPrefix, u16 op, X64Reg regOp, OpArg arg, int extrabytes = 0);
|
||||
void WriteSSE41Op(u8 opPrefix, u16 op, X64Reg regOp, OpArg arg, int extrabytes = 0);
|
||||
void WriteVEXOp(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int W = 0, int extrabytes = 0);
|
||||
void WriteVEXOp4(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, X64Reg regOp3, int W = 0);
|
||||
void WriteAVXOp(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int W = 0, int extrabytes = 0);
|
||||
void WriteAVXOp4(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, X64Reg regOp3, int W = 0);
|
||||
void WriteFMA3Op(u8 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int W = 0);
|
||||
void WriteBMIOp(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int extrabytes = 0);
|
||||
void WriteBMI1Op(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int extrabytes = 0);
|
||||
void WriteBMI2Op(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, OpArg arg, int extrabytes = 0);
|
||||
void WriteMOVBE(int bits, u8 op, X64Reg regOp, OpArg arg);
|
||||
void WriteFloatLoadStore(int bits, FloatOp op, FloatOp op_80b, OpArg arg);
|
||||
void WriteSSSE3Op(u8 opPrefix, u16 op, X64Reg regOp, const OpArg& arg, int extrabytes = 0);
|
||||
void WriteSSE41Op(u8 opPrefix, u16 op, X64Reg regOp, const OpArg& arg, int extrabytes = 0);
|
||||
void WriteVEXOp(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int W = 0, int extrabytes = 0);
|
||||
void WriteVEXOp4(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, X64Reg regOp3, int W = 0);
|
||||
void WriteAVXOp(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int W = 0, int extrabytes = 0);
|
||||
void WriteAVXOp4(u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, X64Reg regOp3, int W = 0);
|
||||
void WriteFMA3Op(u8 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int W = 0);
|
||||
void WriteBMIOp(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int extrabytes = 0);
|
||||
void WriteBMI1Op(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int extrabytes = 0);
|
||||
void WriteBMI2Op(int size, u8 opPrefix, u16 op, X64Reg regOp1, X64Reg regOp2, const OpArg& arg, int extrabytes = 0);
|
||||
void WriteMOVBE(int bits, u8 op, X64Reg regOp, const OpArg& arg);
|
||||
void WriteFloatLoadStore(int bits, FloatOp op, FloatOp op_80b, const OpArg& arg);
|
||||
void WriteNormalOp(int bits, NormalOp op, const OpArg& a1, const OpArg& a2);
|
||||
|
||||
void ABI_CalculateFrameSize(BitSet32 mask, size_t rsp_alignment, size_t needed_frame_size, size_t* shadowp, size_t* subtractionp, size_t* xmm_offsetp);
|
||||
@ -416,8 +416,8 @@ public:
|
||||
void SFENCE();
|
||||
|
||||
// Bit scan
|
||||
void BSF(int bits, X64Reg dest, OpArg src); //bottom bit to top bit
|
||||
void BSR(int bits, X64Reg dest, OpArg src); //top bit to bottom bit
|
||||
void BSF(int bits, X64Reg dest, const OpArg& src); // Bottom bit to top bit
|
||||
void BSR(int bits, X64Reg dest, const OpArg& src); // Top bit to bottom bit
|
||||
|
||||
// Cache control
|
||||
enum PrefetchLevel
|
||||
@ -428,37 +428,37 @@ public:
|
||||
PF_T2, //Levels 3+ (aliased to T0 on AMD)
|
||||
};
|
||||
void PREFETCH(PrefetchLevel level, OpArg arg);
|
||||
void MOVNTI(int bits, OpArg dest, X64Reg src);
|
||||
void MOVNTDQ(OpArg arg, X64Reg regOp);
|
||||
void MOVNTPS(OpArg arg, X64Reg regOp);
|
||||
void MOVNTPD(OpArg arg, X64Reg regOp);
|
||||
void MOVNTI(int bits, const OpArg& dest, X64Reg src);
|
||||
void MOVNTDQ(const OpArg& arg, X64Reg regOp);
|
||||
void MOVNTPS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVNTPD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
// Multiplication / division
|
||||
void MUL(int bits, OpArg src); //UNSIGNED
|
||||
void IMUL(int bits, OpArg src); //SIGNED
|
||||
void IMUL(int bits, X64Reg regOp, OpArg src);
|
||||
void IMUL(int bits, X64Reg regOp, OpArg src, OpArg imm);
|
||||
void DIV(int bits, OpArg src);
|
||||
void IDIV(int bits, OpArg src);
|
||||
void MUL(int bits, const OpArg& src); // UNSIGNED
|
||||
void IMUL(int bits, const OpArg& src); // SIGNED
|
||||
void IMUL(int bits, X64Reg regOp, const OpArg& src);
|
||||
void IMUL(int bits, X64Reg regOp, const OpArg& src, const OpArg& imm);
|
||||
void DIV(int bits, const OpArg& src);
|
||||
void IDIV(int bits, const OpArg& src);
|
||||
|
||||
// Shift
|
||||
void ROL(int bits, OpArg dest, OpArg shift);
|
||||
void ROR(int bits, OpArg dest, OpArg shift);
|
||||
void RCL(int bits, OpArg dest, OpArg shift);
|
||||
void RCR(int bits, OpArg dest, OpArg shift);
|
||||
void SHL(int bits, OpArg dest, OpArg shift);
|
||||
void SHR(int bits, OpArg dest, OpArg shift);
|
||||
void SAR(int bits, OpArg dest, OpArg shift);
|
||||
void ROL(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void ROR(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void RCL(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void RCR(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void SHL(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void SHR(int bits, const OpArg& dest, const OpArg& shift);
|
||||
void SAR(int bits, const OpArg& dest, const OpArg& shift);
|
||||
|
||||
// Bit Test
|
||||
void BT(int bits, OpArg dest, OpArg index);
|
||||
void BTS(int bits, OpArg dest, OpArg index);
|
||||
void BTR(int bits, OpArg dest, OpArg index);
|
||||
void BTC(int bits, OpArg dest, OpArg index);
|
||||
void BT(int bits, const OpArg& dest, const OpArg& index);
|
||||
void BTS(int bits, const OpArg& dest, const OpArg& index);
|
||||
void BTR(int bits, const OpArg& dest, const OpArg& index);
|
||||
void BTC(int bits, const OpArg& dest, const OpArg& index);
|
||||
|
||||
// Double-Precision Shift
|
||||
void SHRD(int bits, OpArg dest, OpArg src, OpArg shift);
|
||||
void SHLD(int bits, OpArg dest, OpArg src, OpArg shift);
|
||||
void SHRD(int bits, const OpArg& dest, const OpArg& src, const OpArg& shift);
|
||||
void SHLD(int bits, const OpArg& dest, const OpArg& src, const OpArg& shift);
|
||||
|
||||
// Extend EAX into EDX in various ways
|
||||
void CWD(int bits = 16);
|
||||
@ -472,7 +472,7 @@ public:
|
||||
void LEA(int bits, X64Reg dest, OpArg src);
|
||||
|
||||
// Integer arithmetic
|
||||
void NEG (int bits, OpArg src);
|
||||
void NEG (int bits, const OpArg& src);
|
||||
void ADD (int bits, const OpArg& a1, const OpArg& a2);
|
||||
void ADC (int bits, const OpArg& a1, const OpArg& a2);
|
||||
void SUB (int bits, const OpArg& a1, const OpArg& a2);
|
||||
@ -481,7 +481,7 @@ public:
|
||||
void CMP (int bits, const OpArg& a1, const OpArg& a2);
|
||||
|
||||
// Bit operations
|
||||
void NOT (int bits, OpArg src);
|
||||
void NOT (int bits, const OpArg& src);
|
||||
void OR (int bits, const OpArg& a1, const OpArg& a2);
|
||||
void XOR (int bits, const OpArg& a1, const OpArg& a2);
|
||||
void MOV (int bits, const OpArg& a1, const OpArg& a2);
|
||||
@ -507,13 +507,13 @@ public:
|
||||
void SwapAndStore(int size, const OpArg& dst, X64Reg src);
|
||||
|
||||
// Available only on AMD >= Phenom or Intel >= Haswell
|
||||
void LZCNT(int bits, X64Reg dest, OpArg src);
|
||||
void LZCNT(int bits, X64Reg dest, const OpArg& src);
|
||||
// Note: this one is actually part of BMI1
|
||||
void TZCNT(int bits, X64Reg dest, OpArg src);
|
||||
void TZCNT(int bits, X64Reg dest, const OpArg& src);
|
||||
|
||||
// WARNING - These two take 11-13 cycles and are VectorPath! (AMD64)
|
||||
void STMXCSR(OpArg memloc);
|
||||
void LDMXCSR(OpArg memloc);
|
||||
void STMXCSR(const OpArg& memloc);
|
||||
void LDMXCSR(const OpArg& memloc);
|
||||
|
||||
// Prefixes
|
||||
void LOCK();
|
||||
@ -540,118 +540,118 @@ public:
|
||||
x87_FPUBusy = 0x8000,
|
||||
};
|
||||
|
||||
void FLD(int bits, OpArg src);
|
||||
void FST(int bits, OpArg dest);
|
||||
void FSTP(int bits, OpArg dest);
|
||||
void FLD(int bits, const OpArg& src);
|
||||
void FST(int bits, const OpArg& dest);
|
||||
void FSTP(int bits, const OpArg& dest);
|
||||
void FNSTSW_AX();
|
||||
void FWAIT();
|
||||
|
||||
// SSE/SSE2: Floating point arithmetic
|
||||
void ADDSS(X64Reg regOp, OpArg arg);
|
||||
void ADDSD(X64Reg regOp, OpArg arg);
|
||||
void SUBSS(X64Reg regOp, OpArg arg);
|
||||
void SUBSD(X64Reg regOp, OpArg arg);
|
||||
void MULSS(X64Reg regOp, OpArg arg);
|
||||
void MULSD(X64Reg regOp, OpArg arg);
|
||||
void DIVSS(X64Reg regOp, OpArg arg);
|
||||
void DIVSD(X64Reg regOp, OpArg arg);
|
||||
void MINSS(X64Reg regOp, OpArg arg);
|
||||
void MINSD(X64Reg regOp, OpArg arg);
|
||||
void MAXSS(X64Reg regOp, OpArg arg);
|
||||
void MAXSD(X64Reg regOp, OpArg arg);
|
||||
void SQRTSS(X64Reg regOp, OpArg arg);
|
||||
void SQRTSD(X64Reg regOp, OpArg arg);
|
||||
void RSQRTSS(X64Reg regOp, OpArg arg);
|
||||
void ADDSS(X64Reg regOp, const OpArg& arg);
|
||||
void ADDSD(X64Reg regOp, const OpArg& arg);
|
||||
void SUBSS(X64Reg regOp, const OpArg& arg);
|
||||
void SUBSD(X64Reg regOp, const OpArg& arg);
|
||||
void MULSS(X64Reg regOp, const OpArg& arg);
|
||||
void MULSD(X64Reg regOp, const OpArg& arg);
|
||||
void DIVSS(X64Reg regOp, const OpArg& arg);
|
||||
void DIVSD(X64Reg regOp, const OpArg& arg);
|
||||
void MINSS(X64Reg regOp, const OpArg& arg);
|
||||
void MINSD(X64Reg regOp, const OpArg& arg);
|
||||
void MAXSS(X64Reg regOp, const OpArg& arg);
|
||||
void MAXSD(X64Reg regOp, const OpArg& arg);
|
||||
void SQRTSS(X64Reg regOp, const OpArg& arg);
|
||||
void SQRTSD(X64Reg regOp, const OpArg& arg);
|
||||
void RSQRTSS(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
// SSE/SSE2: Floating point bitwise (yes)
|
||||
void CMPSS(X64Reg regOp, OpArg arg, u8 compare);
|
||||
void CMPSD(X64Reg regOp, OpArg arg, u8 compare);
|
||||
void CMPSS(X64Reg regOp, const OpArg& arg, u8 compare);
|
||||
void CMPSD(X64Reg regOp, const OpArg& arg, u8 compare);
|
||||
|
||||
inline void CMPEQSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_EQ); }
|
||||
inline void CMPLTSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_LT); }
|
||||
inline void CMPLESS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_LE); }
|
||||
inline void CMPUNORDSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_UNORD); }
|
||||
inline void CMPNEQSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_NEQ); }
|
||||
inline void CMPNLTSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_NLT); }
|
||||
inline void CMPORDSS(X64Reg regOp, OpArg arg) { CMPSS(regOp, arg, CMP_ORD); }
|
||||
inline void CMPEQSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_EQ); }
|
||||
inline void CMPLTSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_LT); }
|
||||
inline void CMPLESS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_LE); }
|
||||
inline void CMPUNORDSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_UNORD); }
|
||||
inline void CMPNEQSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_NEQ); }
|
||||
inline void CMPNLTSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_NLT); }
|
||||
inline void CMPORDSS(X64Reg regOp, const OpArg& arg) { CMPSS(regOp, arg, CMP_ORD); }
|
||||
|
||||
// SSE/SSE2: Floating point packed arithmetic (x4 for float, x2 for double)
|
||||
void ADDPS(X64Reg regOp, OpArg arg);
|
||||
void ADDPD(X64Reg regOp, OpArg arg);
|
||||
void SUBPS(X64Reg regOp, OpArg arg);
|
||||
void SUBPD(X64Reg regOp, OpArg arg);
|
||||
void CMPPS(X64Reg regOp, OpArg arg, u8 compare);
|
||||
void CMPPD(X64Reg regOp, OpArg arg, u8 compare);
|
||||
void MULPS(X64Reg regOp, OpArg arg);
|
||||
void MULPD(X64Reg regOp, OpArg arg);
|
||||
void DIVPS(X64Reg regOp, OpArg arg);
|
||||
void DIVPD(X64Reg regOp, OpArg arg);
|
||||
void MINPS(X64Reg regOp, OpArg arg);
|
||||
void MINPD(X64Reg regOp, OpArg arg);
|
||||
void MAXPS(X64Reg regOp, OpArg arg);
|
||||
void MAXPD(X64Reg regOp, OpArg arg);
|
||||
void SQRTPS(X64Reg regOp, OpArg arg);
|
||||
void SQRTPD(X64Reg regOp, OpArg arg);
|
||||
void RSQRTPS(X64Reg regOp, OpArg arg);
|
||||
void ADDPS(X64Reg regOp, const OpArg& arg);
|
||||
void ADDPD(X64Reg regOp, const OpArg& arg);
|
||||
void SUBPS(X64Reg regOp, const OpArg& arg);
|
||||
void SUBPD(X64Reg regOp, const OpArg& arg);
|
||||
void CMPPS(X64Reg regOp, const OpArg& arg, u8 compare);
|
||||
void CMPPD(X64Reg regOp, const OpArg& arg, u8 compare);
|
||||
void MULPS(X64Reg regOp, const OpArg& arg);
|
||||
void MULPD(X64Reg regOp, const OpArg& arg);
|
||||
void DIVPS(X64Reg regOp, const OpArg& arg);
|
||||
void DIVPD(X64Reg regOp, const OpArg& arg);
|
||||
void MINPS(X64Reg regOp, const OpArg& arg);
|
||||
void MINPD(X64Reg regOp, const OpArg& arg);
|
||||
void MAXPS(X64Reg regOp, const OpArg& arg);
|
||||
void MAXPD(X64Reg regOp, const OpArg& arg);
|
||||
void SQRTPS(X64Reg regOp, const OpArg& arg);
|
||||
void SQRTPD(X64Reg regOp, const OpArg& arg);
|
||||
void RSQRTPS(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
// SSE/SSE2: Floating point packed bitwise (x4 for float, x2 for double)
|
||||
void ANDPS(X64Reg regOp, OpArg arg);
|
||||
void ANDPD(X64Reg regOp, OpArg arg);
|
||||
void ANDNPS(X64Reg regOp, OpArg arg);
|
||||
void ANDNPD(X64Reg regOp, OpArg arg);
|
||||
void ORPS(X64Reg regOp, OpArg arg);
|
||||
void ORPD(X64Reg regOp, OpArg arg);
|
||||
void XORPS(X64Reg regOp, OpArg arg);
|
||||
void XORPD(X64Reg regOp, OpArg arg);
|
||||
void ANDPS(X64Reg regOp, const OpArg& arg);
|
||||
void ANDPD(X64Reg regOp, const OpArg& arg);
|
||||
void ANDNPS(X64Reg regOp, const OpArg& arg);
|
||||
void ANDNPD(X64Reg regOp, const OpArg& arg);
|
||||
void ORPS(X64Reg regOp, const OpArg& arg);
|
||||
void ORPD(X64Reg regOp, const OpArg& arg);
|
||||
void XORPS(X64Reg regOp, const OpArg& arg);
|
||||
void XORPD(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
// SSE/SSE2: Shuffle components. These are tricky - see Intel documentation.
|
||||
void SHUFPS(X64Reg regOp, OpArg arg, u8 shuffle);
|
||||
void SHUFPD(X64Reg regOp, OpArg arg, u8 shuffle);
|
||||
void SHUFPS(X64Reg regOp, const OpArg& arg, u8 shuffle);
|
||||
void SHUFPD(X64Reg regOp, const OpArg& arg, u8 shuffle);
|
||||
|
||||
// SSE/SSE2: Useful alternative to shuffle in some cases.
|
||||
void MOVDDUP(X64Reg regOp, OpArg arg);
|
||||
void MOVDDUP(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
void UNPCKLPS(X64Reg dest, OpArg src);
|
||||
void UNPCKHPS(X64Reg dest, OpArg src);
|
||||
void UNPCKLPD(X64Reg dest, OpArg src);
|
||||
void UNPCKHPD(X64Reg dest, OpArg src);
|
||||
void UNPCKLPS(X64Reg dest, const OpArg& src);
|
||||
void UNPCKHPS(X64Reg dest, const OpArg& src);
|
||||
void UNPCKLPD(X64Reg dest, const OpArg& src);
|
||||
void UNPCKHPD(X64Reg dest, const OpArg& src);
|
||||
|
||||
// SSE/SSE2: Compares.
|
||||
void COMISS(X64Reg regOp, OpArg arg);
|
||||
void COMISD(X64Reg regOp, OpArg arg);
|
||||
void UCOMISS(X64Reg regOp, OpArg arg);
|
||||
void UCOMISD(X64Reg regOp, OpArg arg);
|
||||
void COMISS(X64Reg regOp, const OpArg& arg);
|
||||
void COMISD(X64Reg regOp, const OpArg& arg);
|
||||
void UCOMISS(X64Reg regOp, const OpArg& arg);
|
||||
void UCOMISD(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
// SSE/SSE2: Moves. Use the right data type for your data, in most cases.
|
||||
void MOVAPS(X64Reg regOp, OpArg arg);
|
||||
void MOVAPD(X64Reg regOp, OpArg arg);
|
||||
void MOVAPS(OpArg arg, X64Reg regOp);
|
||||
void MOVAPD(OpArg arg, X64Reg regOp);
|
||||
void MOVAPS(X64Reg regOp, const OpArg& arg);
|
||||
void MOVAPD(X64Reg regOp, const OpArg& arg);
|
||||
void MOVAPS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVAPD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVUPS(X64Reg regOp, OpArg arg);
|
||||
void MOVUPD(X64Reg regOp, OpArg arg);
|
||||
void MOVUPS(OpArg arg, X64Reg regOp);
|
||||
void MOVUPD(OpArg arg, X64Reg regOp);
|
||||
void MOVUPS(X64Reg regOp, const OpArg& arg);
|
||||
void MOVUPD(X64Reg regOp, const OpArg& arg);
|
||||
void MOVUPS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVUPD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVDQA(X64Reg regOp, OpArg arg);
|
||||
void MOVDQA(OpArg arg, X64Reg regOp);
|
||||
void MOVDQU(X64Reg regOp, OpArg arg);
|
||||
void MOVDQU(OpArg arg, X64Reg regOp);
|
||||
void MOVDQA(X64Reg regOp, const OpArg& arg);
|
||||
void MOVDQA(const OpArg& arg, X64Reg regOp);
|
||||
void MOVDQU(X64Reg regOp, const OpArg& arg);
|
||||
void MOVDQU(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVSS(X64Reg regOp, OpArg arg);
|
||||
void MOVSD(X64Reg regOp, OpArg arg);
|
||||
void MOVSS(OpArg arg, X64Reg regOp);
|
||||
void MOVSD(OpArg arg, X64Reg regOp);
|
||||
void MOVSS(X64Reg regOp, const OpArg& arg);
|
||||
void MOVSD(X64Reg regOp, const OpArg& arg);
|
||||
void MOVSS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVSD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVLPS(X64Reg regOp, OpArg arg);
|
||||
void MOVLPD(X64Reg regOp, OpArg arg);
|
||||
void MOVLPS(OpArg arg, X64Reg regOp);
|
||||
void MOVLPD(OpArg arg, X64Reg regOp);
|
||||
void MOVLPS(X64Reg regOp, const OpArg& arg);
|
||||
void MOVLPD(X64Reg regOp, const OpArg& arg);
|
||||
void MOVLPS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVLPD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVHPS(X64Reg regOp, OpArg arg);
|
||||
void MOVHPD(X64Reg regOp, OpArg arg);
|
||||
void MOVHPS(OpArg arg, X64Reg regOp);
|
||||
void MOVHPD(OpArg arg, X64Reg regOp);
|
||||
void MOVHPS(X64Reg regOp, const OpArg& arg);
|
||||
void MOVHPD(X64Reg regOp, const OpArg& arg);
|
||||
void MOVHPS(const OpArg& arg, X64Reg regOp);
|
||||
void MOVHPD(const OpArg& arg, X64Reg regOp);
|
||||
|
||||
void MOVHLPS(X64Reg regOp1, X64Reg regOp2);
|
||||
void MOVLHPS(X64Reg regOp1, X64Reg regOp2);
|
||||
@ -667,104 +667,104 @@ public:
|
||||
void MOVQ_xmm(OpArg arg, X64Reg src);
|
||||
|
||||
// SSE/SSE2: Generates a mask from the high bits of the components of the packed register in question.
|
||||
void MOVMSKPS(X64Reg dest, OpArg arg);
|
||||
void MOVMSKPD(X64Reg dest, OpArg arg);
|
||||
void MOVMSKPS(X64Reg dest, const OpArg& arg);
|
||||
void MOVMSKPD(X64Reg dest, const OpArg& arg);
|
||||
|
||||
// SSE2: Selective byte store, mask in src register. EDI/RDI specifies store address. This is a weird one.
|
||||
void MASKMOVDQU(X64Reg dest, X64Reg src);
|
||||
void LDDQU(X64Reg dest, OpArg src);
|
||||
void LDDQU(X64Reg dest, const OpArg& src);
|
||||
|
||||
// SSE/SSE2: Data type conversions.
|
||||
void CVTPS2PD(X64Reg dest, OpArg src);
|
||||
void CVTPD2PS(X64Reg dest, OpArg src);
|
||||
void CVTSS2SD(X64Reg dest, OpArg src);
|
||||
void CVTSI2SS(X64Reg dest, OpArg src);
|
||||
void CVTSD2SS(X64Reg dest, OpArg src);
|
||||
void CVTSI2SD(X64Reg dest, OpArg src);
|
||||
void CVTDQ2PD(X64Reg regOp, OpArg arg);
|
||||
void CVTPD2DQ(X64Reg regOp, OpArg arg);
|
||||
void CVTDQ2PS(X64Reg regOp, OpArg arg);
|
||||
void CVTPS2DQ(X64Reg regOp, OpArg arg);
|
||||
void CVTPS2PD(X64Reg dest, const OpArg& src);
|
||||
void CVTPD2PS(X64Reg dest, const OpArg& src);
|
||||
void CVTSS2SD(X64Reg dest, const OpArg& src);
|
||||
void CVTSI2SS(X64Reg dest, const OpArg& src);
|
||||
void CVTSD2SS(X64Reg dest, const OpArg& src);
|
||||
void CVTSI2SD(X64Reg dest, const OpArg& src);
|
||||
void CVTDQ2PD(X64Reg regOp, const OpArg& arg);
|
||||
void CVTPD2DQ(X64Reg regOp, const OpArg& arg);
|
||||
void CVTDQ2PS(X64Reg regOp, const OpArg& arg);
|
||||
void CVTPS2DQ(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
void CVTTPS2DQ(X64Reg regOp, OpArg arg);
|
||||
void CVTTPD2DQ(X64Reg regOp, OpArg arg);
|
||||
void CVTTPS2DQ(X64Reg regOp, const OpArg& arg);
|
||||
void CVTTPD2DQ(X64Reg regOp, const OpArg& arg);
|
||||
|
||||
// Destinations are X64 regs (rax, rbx, ...) for these instructions.
|
||||
void CVTSS2SI(X64Reg xregdest, OpArg src);
|
||||
void CVTSD2SI(X64Reg xregdest, OpArg src);
|
||||
void CVTTSS2SI(X64Reg xregdest, OpArg arg);
|
||||
void CVTTSD2SI(X64Reg xregdest, OpArg arg);
|
||||
void CVTSS2SI(X64Reg xregdest, const OpArg& src);
|
||||
void CVTSD2SI(X64Reg xregdest, const OpArg& src);
|
||||
void CVTTSS2SI(X64Reg xregdest, const OpArg& arg);
|
||||
void CVTTSD2SI(X64Reg xregdest, const OpArg& arg);
|
||||
|
||||
// SSE2: Packed integer instructions
|
||||
void PACKSSDW(X64Reg dest, OpArg arg);
|
||||
void PACKSSWB(X64Reg dest, OpArg arg);
|
||||
void PACKUSDW(X64Reg dest, OpArg arg);
|
||||
void PACKUSWB(X64Reg dest, OpArg arg);
|
||||
void PACKSSDW(X64Reg dest, const OpArg& arg);
|
||||
void PACKSSWB(X64Reg dest, const OpArg& arg);
|
||||
void PACKUSDW(X64Reg dest, const OpArg& arg);
|
||||
void PACKUSWB(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PUNPCKLBW(X64Reg dest, const OpArg& arg);
|
||||
void PUNPCKLWD(X64Reg dest, const OpArg& arg);
|
||||
void PUNPCKLDQ(X64Reg dest, const OpArg& arg);
|
||||
void PUNPCKLQDQ(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PTEST(X64Reg dest, OpArg arg);
|
||||
void PAND(X64Reg dest, OpArg arg);
|
||||
void PANDN(X64Reg dest, OpArg arg);
|
||||
void PXOR(X64Reg dest, OpArg arg);
|
||||
void POR(X64Reg dest, OpArg arg);
|
||||
void PTEST(X64Reg dest, const OpArg& arg);
|
||||
void PAND(X64Reg dest, const OpArg& arg);
|
||||
void PANDN(X64Reg dest, const OpArg& arg);
|
||||
void PXOR(X64Reg dest, const OpArg& arg);
|
||||
void POR(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PADDB(X64Reg dest, OpArg arg);
|
||||
void PADDW(X64Reg dest, OpArg arg);
|
||||
void PADDD(X64Reg dest, OpArg arg);
|
||||
void PADDQ(X64Reg dest, OpArg arg);
|
||||
void PADDB(X64Reg dest, const OpArg& arg);
|
||||
void PADDW(X64Reg dest, const OpArg& arg);
|
||||
void PADDD(X64Reg dest, const OpArg& arg);
|
||||
void PADDQ(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PADDSB(X64Reg dest, OpArg arg);
|
||||
void PADDSW(X64Reg dest, OpArg arg);
|
||||
void PADDUSB(X64Reg dest, OpArg arg);
|
||||
void PADDUSW(X64Reg dest, OpArg arg);
|
||||
void PADDSB(X64Reg dest, const OpArg& arg);
|
||||
void PADDSW(X64Reg dest, const OpArg& arg);
|
||||
void PADDUSB(X64Reg dest, const OpArg& arg);
|
||||
void PADDUSW(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PSUBB(X64Reg dest, OpArg arg);
|
||||
void PSUBW(X64Reg dest, OpArg arg);
|
||||
void PSUBD(X64Reg dest, OpArg arg);
|
||||
void PSUBQ(X64Reg dest, OpArg arg);
|
||||
void PSUBB(X64Reg dest, const OpArg& arg);
|
||||
void PSUBW(X64Reg dest, const OpArg& arg);
|
||||
void PSUBD(X64Reg dest, const OpArg& arg);
|
||||
void PSUBQ(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PSUBSB(X64Reg dest, OpArg arg);
|
||||
void PSUBSW(X64Reg dest, OpArg arg);
|
||||
void PSUBUSB(X64Reg dest, OpArg arg);
|
||||
void PSUBUSW(X64Reg dest, OpArg arg);
|
||||
void PSUBSB(X64Reg dest, const OpArg& arg);
|
||||
void PSUBSW(X64Reg dest, const OpArg& arg);
|
||||
void PSUBUSB(X64Reg dest, const OpArg& arg);
|
||||
void PSUBUSW(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PAVGB(X64Reg dest, OpArg arg);
|
||||
void PAVGW(X64Reg dest, OpArg arg);
|
||||
void PAVGB(X64Reg dest, const OpArg& arg);
|
||||
void PAVGW(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PCMPEQB(X64Reg dest, OpArg arg);
|
||||
void PCMPEQW(X64Reg dest, OpArg arg);
|
||||
void PCMPEQD(X64Reg dest, OpArg arg);
|
||||
void PCMPEQB(X64Reg dest, const OpArg& arg);
|
||||
void PCMPEQW(X64Reg dest, const OpArg& arg);
|
||||
void PCMPEQD(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PCMPGTB(X64Reg dest, OpArg arg);
|
||||
void PCMPGTW(X64Reg dest, OpArg arg);
|
||||
void PCMPGTD(X64Reg dest, OpArg arg);
|
||||
void PCMPGTB(X64Reg dest, const OpArg& arg);
|
||||
void PCMPGTW(X64Reg dest, const OpArg& arg);
|
||||
void PCMPGTD(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PEXTRW(X64Reg dest, OpArg arg, u8 subreg);
|
||||
void PINSRW(X64Reg dest, OpArg arg, u8 subreg);
|
||||
void PEXTRW(X64Reg dest, const OpArg& arg, u8 subreg);
|
||||
void PINSRW(X64Reg dest, const OpArg& arg, u8 subreg);
|
||||
|
||||
void PMADDWD(X64Reg dest, OpArg arg);
|
||||
void PSADBW(X64Reg dest, OpArg arg);
|
||||
void PMADDWD(X64Reg dest, const OpArg& arg);
|
||||
void PSADBW(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PMAXSW(X64Reg dest, OpArg arg);
|
||||
void PMAXUB(X64Reg dest, OpArg arg);
|
||||
void PMINSW(X64Reg dest, OpArg arg);
|
||||
void PMINUB(X64Reg dest, OpArg arg);
|
||||
void PMAXSW(X64Reg dest, const OpArg& arg);
|
||||
void PMAXUB(X64Reg dest, const OpArg& arg);
|
||||
void PMINSW(X64Reg dest, const OpArg& arg);
|
||||
void PMINUB(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PMOVMSKB(X64Reg dest, OpArg arg);
|
||||
void PSHUFD(X64Reg dest, OpArg arg, u8 shuffle);
|
||||
void PSHUFB(X64Reg dest, OpArg arg);
|
||||
void PMOVMSKB(X64Reg dest, const OpArg& arg);
|
||||
void PSHUFD(X64Reg dest, const OpArg& arg, u8 shuffle);
|
||||
void PSHUFB(X64Reg dest, const OpArg& arg);
|
||||
|
||||
void PSHUFLW(X64Reg dest, OpArg arg, u8 shuffle);
|
||||
void PSHUFHW(X64Reg dest, OpArg arg, u8 shuffle);
|
||||
void PSHUFLW(X64Reg dest, const OpArg& arg, u8 shuffle);
|
||||
void PSHUFHW(X64Reg dest, const OpArg& arg, u8 shuffle);
|
||||
|
||||
void PSRLW(X64Reg reg, int shift);
|
||||
void PSRLD(X64Reg reg, int shift);
|
||||
void PSRLQ(X64Reg reg, int shift);
|
||||
void PSRLQ(X64Reg reg, OpArg arg);
|
||||
void PSRLQ(X64Reg reg, const OpArg& arg);
|
||||
void PSRLDQ(X64Reg reg, int shift);
|
||||
|
||||
void PSLLW(X64Reg reg, int shift);
|
||||
@ -776,132 +776,132 @@ public:
|
||||
void PSRAD(X64Reg reg, int shift);
|
||||
|
||||
// SSE4: data type conversions
|
||||
void PMOVSXBW(X64Reg dest, OpArg arg);
|
||||
void PMOVSXBD(X64Reg dest, OpArg arg);
|
||||
void PMOVSXBQ(X64Reg dest, OpArg arg);
|
||||
void PMOVSXWD(X64Reg dest, OpArg arg);
|
||||
void PMOVSXWQ(X64Reg dest, OpArg arg);
|
||||
void PMOVSXDQ(X64Reg dest, OpArg arg);
|
||||
void PMOVZXBW(X64Reg dest, OpArg arg);
|
||||
void PMOVZXBD(X64Reg dest, OpArg arg);
|
||||
void PMOVZXBQ(X64Reg dest, OpArg arg);
|
||||
void PMOVZXWD(X64Reg dest, OpArg arg);
|
||||
void PMOVZXWQ(X64Reg dest, OpArg arg);
|
||||
void PMOVZXDQ(X64Reg dest, OpArg arg);
|
||||
void PMOVSXBW(X64Reg dest, const OpArg& arg);
|
||||
void PMOVSXBD(X64Reg dest, const OpArg& arg);
|
||||
void PMOVSXBQ(X64Reg dest, const OpArg& arg);
|
||||
void PMOVSXWD(X64Reg dest, const OpArg& arg);
|
||||
void PMOVSXWQ(X64Reg dest, const OpArg& arg);
|
||||
void PMOVSXDQ(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXBW(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXBD(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXBQ(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXWD(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXWQ(X64Reg dest, const OpArg& arg);
|
||||
void PMOVZXDQ(X64Reg dest, const OpArg& arg);
|
||||
|
||||
// SSE4: blend instructions
|
||||
void PBLENDVB(X64Reg dest, OpArg arg);
|
||||
void BLENDVPS(X64Reg dest, OpArg arg);
|
||||
void BLENDVPD(X64Reg dest, OpArg arg);
|
||||
void BLENDPS(X64Reg dest, OpArg arg, u8 blend);
|
||||
void BLENDPD(X64Reg dest, OpArg arg, u8 blend);
|
||||
void PBLENDVB(X64Reg dest, const OpArg& arg);
|
||||
void BLENDVPS(X64Reg dest, const OpArg& arg);
|
||||
void BLENDVPD(X64Reg dest, const OpArg& arg);
|
||||
void BLENDPS(X64Reg dest, const OpArg& arg, u8 blend);
|
||||
void BLENDPD(X64Reg dest, const OpArg& arg, u8 blend);
|
||||
|
||||
// AVX
|
||||
void VADDSD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VSUBSD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VMULSD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VDIVSD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VADDPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VSUBPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VMULPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VDIVPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VSQRTSD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VCMPPD(X64Reg regOp1, X64Reg regOp2, OpArg arg, u8 compare);
|
||||
void VSHUFPD(X64Reg regOp1, X64Reg regOp2, OpArg arg, u8 shuffle);
|
||||
void VUNPCKLPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VUNPCKHPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VBLENDVPD(X64Reg regOp1, X64Reg regOp2, OpArg arg, X64Reg mask);
|
||||
void VADDSD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VSUBSD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VMULSD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VDIVSD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VADDPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VSUBPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VMULPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VDIVPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VSQRTSD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VCMPPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg, u8 compare);
|
||||
void VSHUFPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg, u8 shuffle);
|
||||
void VUNPCKLPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VUNPCKHPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VBLENDVPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg, X64Reg mask);
|
||||
|
||||
void VANDPS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VANDPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VANDNPS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VANDNPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VORPS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VORPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VXORPS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VXORPD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VANDPS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VANDPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VANDNPS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VANDNPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VORPS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VORPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VXORPS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VXORPD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
|
||||
void VPAND(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VPANDN(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VPOR(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VPXOR(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VPAND(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VPANDN(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VPOR(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VPXOR(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
|
||||
// FMA3
|
||||
void VFMADD132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD132SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD213SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD231SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD132SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD213SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD231SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB132SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB213SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB231SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB132SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB213SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUB231SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD132SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD213SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD231SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD132SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD213SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMADD231SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB132SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB213SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB231SS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB132SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB213SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFNMSUB231SD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADDSUB231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD132PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD213PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD231PS(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD132PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD213PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMSUBADD231PD(X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void VFMADD132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD132SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD213SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD231SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD132SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD213SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADD231SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB132SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB213SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB231SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB132SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB213SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUB231SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD132SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD213SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD231SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD132SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD213SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMADD231SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB132SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB213SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB231SS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB132SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB213SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFNMSUB231SD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMADDSUB231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD132PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD213PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD231PS(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD132PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD213PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void VFMSUBADD231PD(X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
|
||||
// VEX GPR instructions
|
||||
void SARX(int bits, X64Reg regOp1, OpArg arg, X64Reg regOp2);
|
||||
void SHLX(int bits, X64Reg regOp1, OpArg arg, X64Reg regOp2);
|
||||
void SHRX(int bits, X64Reg regOp1, OpArg arg, X64Reg regOp2);
|
||||
void RORX(int bits, X64Reg regOp, OpArg arg, u8 rotate);
|
||||
void PEXT(int bits, X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void PDEP(int bits, X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void MULX(int bits, X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void BZHI(int bits, X64Reg regOp1, OpArg arg, X64Reg regOp2);
|
||||
void BLSR(int bits, X64Reg regOp, OpArg arg);
|
||||
void BLSMSK(int bits, X64Reg regOp, OpArg arg);
|
||||
void BLSI(int bits, X64Reg regOp, OpArg arg);
|
||||
void BEXTR(int bits, X64Reg regOp1, OpArg arg, X64Reg regOp2);
|
||||
void ANDN(int bits, X64Reg regOp1, X64Reg regOp2, OpArg arg);
|
||||
void SARX(int bits, X64Reg regOp1, const OpArg& arg, X64Reg regOp2);
|
||||
void SHLX(int bits, X64Reg regOp1, const OpArg& arg, X64Reg regOp2);
|
||||
void SHRX(int bits, X64Reg regOp1, const OpArg& arg, X64Reg regOp2);
|
||||
void RORX(int bits, X64Reg regOp, const OpArg& arg, u8 rotate);
|
||||
void PEXT(int bits, X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void PDEP(int bits, X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void MULX(int bits, X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
void BZHI(int bits, X64Reg regOp1, const OpArg& arg, X64Reg regOp2);
|
||||
void BLSR(int bits, X64Reg regOp, const OpArg& arg);
|
||||
void BLSMSK(int bits, X64Reg regOp, const OpArg& arg);
|
||||
void BLSI(int bits, X64Reg regOp, const OpArg& arg);
|
||||
void BEXTR(int bits, X64Reg regOp1, const OpArg& arg, X64Reg regOp2);
|
||||
void ANDN(int bits, X64Reg regOp1, X64Reg regOp2, const OpArg& arg);
|
||||
|
||||
void RDTSC();
|
||||
|
||||
|
Reference in New Issue
Block a user