Added support for missing AMD instruction sets (FMA4 and XOP) to Assembler.

This commit is contained in:
kobalicekp
2014-05-03 18:04:16 +02:00
parent 00f9e5fe50
commit bceaebdbe3
6 changed files with 1623 additions and 304 deletions
+247
View File
@@ -2300,6 +2300,253 @@ static void opcode(asmjit::host::Assembler& a) {
a.vfnmsub231ss(xmm0, xmm1, ptr_gp0);
a.vfnmsub231ss(xmm0, xmm1, xmm2);
// FMA4.
a.vfmaddpd(xmm0, xmm1, xmm2, xmm3);
a.vfmaddpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddpd(ymm0, ymm1, ymm2, ymm3);
a.vfmaddpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmaddpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmaddps(xmm0, xmm1, xmm2, xmm3);
a.vfmaddps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddps(ymm0, ymm1, ymm2, ymm3);
a.vfmaddps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmaddps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmaddsd(xmm0, xmm1, xmm2, xmm3);
a.vfmaddsd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddsd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddss(xmm0, xmm1, xmm2, xmm3);
a.vfmaddss(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddss(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddsubpd(xmm0, xmm1, xmm2, xmm3);
a.vfmaddsubpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddsubpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddsubpd(ymm0, ymm1, ymm2, ymm3);
a.vfmaddsubpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmaddsubpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmaddsubps(xmm0, xmm1, xmm2, xmm3);
a.vfmaddsubps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmaddsubps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmaddsubps(ymm0, ymm1, ymm2, ymm3);
a.vfmaddsubps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmaddsubps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmsubaddpd(xmm0, xmm1, xmm2, xmm3);
a.vfmsubaddpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubaddpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmsubaddpd(ymm0, ymm1, ymm2, ymm3);
a.vfmsubaddpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmsubaddpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmsubaddps(xmm0, xmm1, xmm2, xmm3);
a.vfmsubaddps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubaddps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmsubaddps(ymm0, ymm1, ymm2, ymm3);
a.vfmsubaddps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmsubaddps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmsubpd(xmm0, xmm1, xmm2, xmm3);
a.vfmsubpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmsubpd(ymm0, ymm1, ymm2, ymm3);
a.vfmsubpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmsubpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmsubps(xmm0, xmm1, xmm2, xmm3);
a.vfmsubps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmsubps(ymm0, ymm1, ymm2, ymm3);
a.vfmsubps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfmsubps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfmsubsd(xmm0, xmm1, xmm2, xmm3);
a.vfmsubsd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubsd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfmsubss(xmm0, xmm1, xmm2, xmm3);
a.vfmsubss(xmm0, xmm1, ptr_gp0, xmm3);
a.vfmsubss(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmaddpd(xmm0, xmm1, xmm2, xmm3);
a.vfnmaddpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmaddpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmaddpd(ymm0, ymm1, ymm2, ymm3);
a.vfnmaddpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfnmaddpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfnmaddps(xmm0, xmm1, xmm2, xmm3);
a.vfnmaddps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmaddps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmaddps(ymm0, ymm1, ymm2, ymm3);
a.vfnmaddps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfnmaddps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfnmaddsd(xmm0, xmm1, xmm2, xmm3);
a.vfnmaddsd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmaddsd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmaddss(xmm0, xmm1, xmm2, xmm3);
a.vfnmaddss(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmaddss(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmsubpd(xmm0, xmm1, xmm2, xmm3);
a.vfnmsubpd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmsubpd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmsubpd(ymm0, ymm1, ymm2, ymm3);
a.vfnmsubpd(ymm0, ymm1, ptr_gp0, ymm3);
a.vfnmsubpd(ymm0, ymm1, ymm2, ptr_gp0);
a.vfnmsubps(xmm0, xmm1, xmm2, xmm3);
a.vfnmsubps(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmsubps(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmsubps(ymm0, ymm1, ymm2, ymm3);
a.vfnmsubps(ymm0, ymm1, ptr_gp0, ymm3);
a.vfnmsubps(ymm0, ymm1, ymm2, ptr_gp0);
a.vfnmsubsd(xmm0, xmm1, xmm2, xmm3);
a.vfnmsubsd(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmsubsd(xmm0, xmm1, xmm2, ptr_gp0);
a.vfnmsubss(xmm0, xmm1, xmm2, xmm3);
a.vfnmsubss(xmm0, xmm1, ptr_gp0, xmm3);
a.vfnmsubss(xmm0, xmm1, xmm2, ptr_gp0);
// XOP.
a.vfrczpd(xmm0, xmm1);
a.vfrczpd(xmm0, ptr_gp0);
a.vfrczpd(ymm0, ymm1);
a.vfrczpd(ymm0, ptr_gp0);
a.vfrczps(xmm0, xmm1);
a.vfrczps(xmm0, ptr_gp0);
a.vfrczps(ymm0, ymm1);
a.vfrczps(ymm0, ptr_gp0);
a.vfrczsd(xmm0, xmm1);
a.vfrczsd(xmm0, ptr_gp0);
a.vfrczss(xmm0, xmm1);
a.vfrczss(xmm0, ptr_gp0);
a.vpcmov(xmm0, xmm1, xmm2, xmm3);
a.vpcmov(xmm0, xmm1, ptr_gp0, xmm3);
a.vpcmov(xmm0, xmm1, xmm2, ptr_gp0);
a.vpcmov(ymm0, ymm1, ymm2, ymm3);
a.vpcmov(ymm0, ymm1, ptr_gp0, ymm3);
a.vpcmov(ymm0, ymm1, ymm2, ptr_gp0);
a.vpcomb(xmm0, xmm1, xmm2, 0);
a.vpcomb(xmm0, xmm1, ptr_gp0, 0);
a.vpcomd(xmm0, xmm1, xmm2, 0);
a.vpcomd(xmm0, xmm1, ptr_gp0, 0);
a.vpcomq(xmm0, xmm1, xmm2, 0);
a.vpcomq(xmm0, xmm1, ptr_gp0, 0);
a.vpcomw(xmm0, xmm1, xmm2, 0);
a.vpcomw(xmm0, xmm1, ptr_gp0, 0);
a.vpcomub(xmm0, xmm1, xmm2, 0);
a.vpcomub(xmm0, xmm1, ptr_gp0, 0);
a.vpcomud(xmm0, xmm1, xmm2, 0);
a.vpcomud(xmm0, xmm1, ptr_gp0, 0);
a.vpcomuq(xmm0, xmm1, xmm2, 0);
a.vpcomuq(xmm0, xmm1, ptr_gp0, 0);
a.vpcomuw(xmm0, xmm1, xmm2, 0);
a.vpcomuw(xmm0, xmm1, ptr_gp0, 0);
a.vpermil2pd(xmm0, xmm1, xmm2, xmm3);
a.vpermil2pd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpermil2pd(xmm0, xmm1, xmm2, ptr_gp0);
a.vpermil2pd(ymm0, ymm1, ymm2, ymm3);
a.vpermil2pd(ymm0, ymm1, ptr_gp0, ymm3);
a.vpermil2pd(ymm0, ymm1, ymm2, ptr_gp0);
a.vpermil2ps(xmm0, xmm1, xmm2, xmm3);
a.vpermil2ps(xmm0, xmm1, ptr_gp0, xmm3);
a.vpermil2ps(xmm0, xmm1, xmm2, ptr_gp0);
a.vpermil2ps(ymm0, ymm1, ymm2, ymm3);
a.vpermil2ps(ymm0, ymm1, ptr_gp0, ymm3);
a.vpermil2ps(ymm0, ymm1, ymm2, ptr_gp0);
a.vphaddbd(xmm0, xmm1);
a.vphaddbd(xmm0, ptr_gp0);
a.vphaddbq(xmm0, xmm1);
a.vphaddbq(xmm0, ptr_gp0);
a.vphaddbw(xmm0, xmm1);
a.vphaddbw(xmm0, ptr_gp0);
a.vphadddq(xmm0, xmm1);
a.vphadddq(xmm0, ptr_gp0);
a.vphaddwd(xmm0, xmm1);
a.vphaddwd(xmm0, ptr_gp0);
a.vphaddwq(xmm0, xmm1);
a.vphaddwq(xmm0, ptr_gp0);
a.vphaddubd(xmm0, xmm1);
a.vphaddubd(xmm0, ptr_gp0);
a.vphaddubq(xmm0, xmm1);
a.vphaddubq(xmm0, ptr_gp0);
a.vphaddubw(xmm0, xmm1);
a.vphaddubw(xmm0, ptr_gp0);
a.vphaddudq(xmm0, xmm1);
a.vphaddudq(xmm0, ptr_gp0);
a.vphadduwd(xmm0, xmm1);
a.vphadduwd(xmm0, ptr_gp0);
a.vphadduwq(xmm0, xmm1);
a.vphadduwq(xmm0, ptr_gp0);
a.vphsubbw(xmm0, xmm1);
a.vphsubbw(xmm0, ptr_gp0);
a.vphsubdq(xmm0, xmm1);
a.vphsubdq(xmm0, ptr_gp0);
a.vphsubwd(xmm0, xmm1);
a.vphsubwd(xmm0, ptr_gp0);
a.vpmacsdd(xmm0, xmm1, xmm2, xmm3);
a.vpmacsdd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacsdqh(xmm0, xmm1, xmm2, xmm3);
a.vpmacsdqh(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacsdql(xmm0, xmm1, xmm2, xmm3);
a.vpmacsdql(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacswd(xmm0, xmm1, xmm2, xmm3);
a.vpmacswd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacsww(xmm0, xmm1, xmm2, xmm3);
a.vpmacsww(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacssdd(xmm0, xmm1, xmm2, xmm3);
a.vpmacssdd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacssdqh(xmm0, xmm1, xmm2, xmm3);
a.vpmacssdqh(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacssdql(xmm0, xmm1, xmm2, xmm3);
a.vpmacssdql(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacsswd(xmm0, xmm1, xmm2, xmm3);
a.vpmacsswd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmacssww(xmm0, xmm1, xmm2, xmm3);
a.vpmacssww(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmadcsswd(xmm0, xmm1, xmm2, xmm3);
a.vpmadcsswd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpmadcswd(xmm0, xmm1, xmm2, xmm3);
a.vpmadcswd(xmm0, xmm1, ptr_gp0, xmm3);
a.vpperm(xmm0, xmm1, xmm2, xmm3);
a.vpperm(xmm0, xmm1, ptr_gp0, xmm3);
a.vpperm(xmm0, xmm1, xmm2, ptr_gp0);
a.vprotb(xmm0, xmm1, xmm2);
a.vprotb(xmm0, ptr_gp0, xmm2);
a.vprotb(xmm0, xmm1, ptr_gp0);
a.vprotb(xmm0, xmm1, 0);
a.vprotb(xmm0, ptr_gp0, 0);
a.vprotd(xmm0, xmm1, xmm2);
a.vprotd(xmm0, ptr_gp0, xmm2);
a.vprotd(xmm0, xmm1, ptr_gp0);
a.vprotd(xmm0, xmm1, 0);
a.vprotd(xmm0, ptr_gp0, 0);
a.vprotq(xmm0, xmm1, xmm2);
a.vprotq(xmm0, ptr_gp0, xmm2);
a.vprotq(xmm0, xmm1, ptr_gp0);
a.vprotq(xmm0, xmm1, 0);
a.vprotq(xmm0, ptr_gp0, 0);
a.vprotw(xmm0, xmm1, xmm2);
a.vprotw(xmm0, ptr_gp0, xmm2);
a.vprotw(xmm0, xmm1, ptr_gp0);
a.vprotw(xmm0, xmm1, 0);
a.vprotw(xmm0, ptr_gp0, 0);
a.vpshab(xmm0, xmm1, xmm2);
a.vpshab(xmm0, ptr_gp0, xmm2);
a.vpshab(xmm0, xmm1, ptr_gp0);
a.vpshad(xmm0, xmm1, xmm2);
a.vpshad(xmm0, ptr_gp0, xmm2);
a.vpshad(xmm0, xmm1, ptr_gp0);
a.vpshaq(xmm0, xmm1, xmm2);
a.vpshaq(xmm0, ptr_gp0, xmm2);
a.vpshaq(xmm0, xmm1, ptr_gp0);
a.vpshaw(xmm0, xmm1, xmm2);
a.vpshaw(xmm0, ptr_gp0, xmm2);
a.vpshaw(xmm0, xmm1, ptr_gp0);
a.vpshlb(xmm0, xmm1, xmm2);
a.vpshlb(xmm0, ptr_gp0, xmm2);
a.vpshlb(xmm0, xmm1, ptr_gp0);
a.vpshld(xmm0, xmm1, xmm2);
a.vpshld(xmm0, ptr_gp0, xmm2);
a.vpshld(xmm0, xmm1, ptr_gp0);
a.vpshlq(xmm0, xmm1, xmm2);
a.vpshlq(xmm0, ptr_gp0, xmm2);
a.vpshlq(xmm0, xmm1, ptr_gp0);
a.vpshlw(xmm0, xmm1, xmm2);
a.vpshlw(xmm0, ptr_gp0, xmm2);
a.vpshlw(xmm0, xmm1, ptr_gp0);
// BMI.
a.andn(gp0, gp1, zcx);
a.andn(gp0, gp1, ptr_gp1);
+362 -1
View File
@@ -46,6 +46,13 @@ enum { kVex2Byte = 0xC5 };
// [2] WvvvvLpp.
enum { kVex3Byte = 0xC4 };
// 3-byte XOP prefix.
// [0] kXopByte
// [1] RXBmmmmm
// [2] WvvvvLpp
enum { kXopByte = 0x8F };
// AsmJit specific (used to encode VVVV field in XOP/VEX).
enum kVexVVVV {
kVexVVVVShift = 12,
kVexVVVVMask = 0xF << kVexVVVVShift
@@ -146,6 +153,11 @@ struct X64TrampolineWriter {
opX |= static_cast<uint32_t>(_Reg_) >> 3; \
} while (0)
#define ADD_VEX_W(_Exp_) \
do { \
opX |= static_cast<uint32_t>(_Exp_) << 3; \
} while (0)
#define ADD_VEX_L(_Exp_) \
do { \
opCode |= static_cast<uint32_t>(_Exp_) << kInstOpCode_L_Shift; \
@@ -2748,7 +2760,7 @@ _EmitAvxRvm:
if (!o3->isReg())
goto _IllegalInst;
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;;
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
@@ -3033,6 +3045,46 @@ _EmitAvxRvm:
}
break;
case kInstGroupAvxRvrmRvmr_P:
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupAvxRvrmRvmr:
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmReg = static_cast<const X86Reg*>(o2)->getRegIndex();
goto _EmitAvxR;
}
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) {
imVal = static_cast<const X86Reg*>(o2)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o3);
ADD_VEX_W(true);
goto _EmitAvxM;
}
if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
goto _EmitAvxM;
}
break;
case kInstGroupAvxMovSsSd:
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
goto _EmitAvxRvm;
@@ -3080,6 +3132,237 @@ _EmitAvxRvm:
goto _EmitAvxV;
}
break;
// ------------------------------------------------------------------------
// [FMA4]
// ------------------------------------------------------------------------
case kInstGroupFma4_P:
// It's fine to just check the first operand, second is just for sanity.
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupFma4:
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmReg = static_cast<const X86Reg*>(o2)->getRegIndex();
goto _EmitAvxR;
}
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) {
imVal = static_cast<const X86Reg*>(o2)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o3);
ADD_VEX_W(true);
goto _EmitAvxM;
}
if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
goto _EmitAvxM;
}
break;
// ------------------------------------------------------------------------
// [XOP]
// ------------------------------------------------------------------------
case kInstGroupXopRm_P:
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupXopRm:
if (encoded == ENC_OPS(Reg, Reg, None)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmReg = static_cast<const X86Reg*>(o1)->getRegIndex();
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Mem, None)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmMem = static_cast<const Mem*>(o1);
goto _EmitXopM;
}
break;
case kInstGroupXopRvmRmv:
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o2)->getRegIndex() << kVexVVVVShift;
rmReg = static_cast<const X86Reg*>(o1)->getRegIndex();
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Mem, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o2)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o1);
goto _EmitXopM;
}
if (encoded == ENC_OPS(Reg, Reg, Mem)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
ADD_VEX_W(true);
goto _EmitXopM;
}
break;
case kInstGroupXopRvmRmi:
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o2)->getRegIndex() << kVexVVVVShift;
rmReg = static_cast<const X86Reg*>(o1)->getRegIndex();
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Mem, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o2)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o1);
goto _EmitXopM;
}
if (encoded == ENC_OPS(Reg, Reg, Mem)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
ADD_VEX_W(true);
goto _EmitXopM;
}
// The following instructions use the secondary opcode.
opCode = info->_opCode[1];
imVal = static_cast<const Imm*>(o2)->getInt64();
imLen = 1;
if (encoded == ENC_OPS(Reg, Reg, Imm)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmReg = static_cast<const X86Reg*>(o1)->getRegIndex();
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Mem, Imm)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmMem = static_cast<const Mem*>(o1);
goto _EmitXopM;
}
break;
case kInstGroupXopRvmr_P:
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupXopRvmr:
if (!o3->isReg())
goto _IllegalInst;
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmReg = static_cast<const X86Reg*>(o2)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Reg, Mem)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
goto _EmitXopM;
}
break;
case kInstGroupXopRvmi_P:
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupXopRvmi:
if (!o3->isImm())
goto _IllegalInst;
imVal = static_cast<const Imm*>(o3)->getInt64();
imLen = 1;
if (encoded == ENC_OPS(Reg, Reg, Reg)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
rmReg = static_cast<const X86Reg*>(o2)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Reg, Mem)) {
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
goto _EmitXopM;
}
break;
case kInstGroupXopRvrmRvmr_P:
ADD_VEX_L(static_cast<const X86Reg*>(o0)->isYmm() || static_cast<const X86Reg*>(o1)->isYmm());
// ... Fall through ...
case kInstGroupXopRvrmRvmr:
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmReg = static_cast<const X86Reg*>(o2)->getRegIndex();
goto _EmitXopR;
}
if (encoded == ENC_OPS(Reg, Reg, Reg) && o3->isMem()) {
imVal = static_cast<const X86Reg*>(o2)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o3);
ADD_VEX_W(true);
goto _EmitXopM;
}
if (encoded == ENC_OPS(Reg, Reg, Mem) && o3->isReg()) {
imVal = static_cast<const X86Reg*>(o3)->getRegIndex() << 4;
imLen = 1;
opReg = static_cast<const X86Reg*>(o0)->getRegIndex();
opX |= static_cast<const X86Reg*>(o1)->getRegIndex() << kVexVVVVShift;
rmMem = static_cast<const Mem*>(o2);
goto _EmitXopM;
}
break;
}
// --------------------------------------------------------------------------
@@ -3604,6 +3887,84 @@ _EmitAvxV:
}
goto _EmitDone;
// --------------------------------------------------------------------------
// [Xop]
// --------------------------------------------------------------------------
#define EMIT_XOP_M \
ASMJIT_ASSERT(rmMem != NULL); \
ASMJIT_ASSERT(rmMem->getOp() == kOperandTypeMem); \
\
if (rmMem->hasSegment()) { \
EMIT_BYTE(x86SegmentPrefix[rmMem->getSegment()]); \
} \
\
mBase = rmMem->getBase(); \
mIndex = rmMem->getIndex(); \
\
{ \
uint32_t vex_XvvvvLpp; \
uint32_t vex_rxbmmmmm; \
\
vex_XvvvvLpp = (opCode >> (kInstOpCode_L_Shift - 2)) & 0x04; \
vex_XvvvvLpp += (opCode >> (kInstOpCode_PP_Shift)) & 0x03; \
vex_XvvvvLpp += (opX >> (kVexVVVVShift - 3)); \
vex_XvvvvLpp += (opX << 4) & 0x80; \
\
vex_rxbmmmmm = (opCode >> kInstOpCode_MM_Shift) & 0x1F; \
vex_rxbmmmmm += static_cast<uint32_t>(mBase - 8 < 8) << 5; \
vex_rxbmmmmm += static_cast<uint32_t>(mIndex - 8 < 8) << 6; \
\
vex_rxbmmmmm |= static_cast<uint32_t>(opReg << 4) & 0x80; \
vex_rxbmmmmm ^= 0xE0; \
vex_XvvvvLpp ^= 0x78; \
\
EMIT_BYTE(kXopByte); \
EMIT_BYTE(vex_rxbmmmmm); \
EMIT_BYTE(vex_XvvvvLpp); \
EMIT_OP(opCode); \
} \
\
mBase &= 0x7; \
opReg &= 0x7;
_EmitXopR:
{
uint32_t xop_XvvvvLpp;
uint32_t xop_rxbmmmmm;
xop_XvvvvLpp = (opCode >> (kInstOpCode_L_Shift - 2)) & 0x04;
xop_XvvvvLpp |= (opCode >> (kInstOpCode_PP_Shift));
xop_XvvvvLpp |= (opX >> (kVexVVVVShift - 3));
xop_XvvvvLpp |= (opX << 4) & 0x80;
xop_rxbmmmmm = (opCode >> kInstOpCode_MM_Shift) & 0x1F;
xop_rxbmmmmm |= (rmReg << 2) & 0x20;
xop_rxbmmmmm |= static_cast<uint32_t>(opReg & 0x08) << 4;
xop_rxbmmmmm ^= 0xE0;
xop_XvvvvLpp ^= 0x78;
EMIT_BYTE(kXopByte);
EMIT_OP(xop_rxbmmmmm);
EMIT_OP(xop_XvvvvLpp);
EMIT_OP(opCode);
rmReg &= 0x07;
}
EMIT_BYTE(x86EncodeMod(3, opReg, static_cast<uint32_t>(rmReg)));
if (imLen == 0)
goto _EmitDone;
EMIT_BYTE(imVal & 0xFF);
goto _EmitDone;
_EmitXopM:
EMIT_XOP_M
goto _EmitSib;
// --------------------------------------------------------------------------
// [Emit - Jump/Call to an Immediate]
// --------------------------------------------------------------------------
+300
View File
@@ -5072,6 +5072,306 @@ struct X86X64Assembler : public BaseAssembler {
INST_3x(vfnmsub231ss, kInstVfnmsub231ss, XmmReg, XmmReg, Mem)
INST_3x(vfnmsub231ss, kInstVfnmsub231ss, XmmReg, XmmReg, XmmReg)
// --------------------------------------------------------------------------
// [FMA4]
// --------------------------------------------------------------------------
INST_4x(vfmaddpd, kInstVfmaddpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddpd, kInstVfmaddpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddpd, kInstVfmaddpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddpd, kInstVfmaddpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmaddpd, kInstVfmaddpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmaddpd, kInstVfmaddpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmaddps, kInstVfmaddps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddps, kInstVfmaddps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddps, kInstVfmaddps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddps, kInstVfmaddps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmaddps, kInstVfmaddps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmaddps, kInstVfmaddps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmaddsd, kInstVfmaddsd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddsd, kInstVfmaddsd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddsd, kInstVfmaddsd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddss, kInstVfmaddss, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddss, kInstVfmaddss, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddss, kInstVfmaddss, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmaddsubpd, kInstVfmaddsubpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmaddsubps, kInstVfmaddsubps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmaddsubps, kInstVfmaddsubps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmaddsubps, kInstVfmaddsubps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmaddsubps, kInstVfmaddsubps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmaddsubps, kInstVfmaddsubps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmaddsubps, kInstVfmaddsubps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmsubaddpd, kInstVfmsubaddpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmsubaddps, kInstVfmsubaddps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubaddps, kInstVfmsubaddps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubaddps, kInstVfmsubaddps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmsubaddps, kInstVfmsubaddps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmsubaddps, kInstVfmsubaddps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmsubaddps, kInstVfmsubaddps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmsubpd, kInstVfmsubpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubpd, kInstVfmsubpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubpd, kInstVfmsubpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmsubpd, kInstVfmsubpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmsubpd, kInstVfmsubpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmsubpd, kInstVfmsubpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmsubps, kInstVfmsubps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubps, kInstVfmsubps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubps, kInstVfmsubps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmsubps, kInstVfmsubps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfmsubps, kInstVfmsubps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfmsubps, kInstVfmsubps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfmsubsd, kInstVfmsubsd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubsd, kInstVfmsubsd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubsd, kInstVfmsubsd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfmsubss, kInstVfmsubss, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfmsubss, kInstVfmsubss, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfmsubss, kInstVfmsubss, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmaddpd, kInstVfnmaddpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmaddpd, kInstVfnmaddpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmaddpd, kInstVfnmaddpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmaddpd, kInstVfnmaddpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfnmaddpd, kInstVfnmaddpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfnmaddpd, kInstVfnmaddpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfnmaddps, kInstVfnmaddps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmaddps, kInstVfnmaddps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmaddps, kInstVfnmaddps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmaddps, kInstVfnmaddps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfnmaddps, kInstVfnmaddps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfnmaddps, kInstVfnmaddps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfnmaddsd, kInstVfnmaddsd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmaddsd, kInstVfnmaddsd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmaddsd, kInstVfnmaddsd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmaddss, kInstVfnmaddss, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmaddss, kInstVfnmaddss, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmaddss, kInstVfnmaddss, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmsubpd, kInstVfnmsubpd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmsubpd, kInstVfnmsubpd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmsubpd, kInstVfnmsubpd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmsubpd, kInstVfnmsubpd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfnmsubpd, kInstVfnmsubpd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfnmsubpd, kInstVfnmsubpd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfnmsubps, kInstVfnmsubps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmsubps, kInstVfnmsubps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmsubps, kInstVfnmsubps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmsubps, kInstVfnmsubps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vfnmsubps, kInstVfnmsubps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vfnmsubps, kInstVfnmsubps, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vfnmsubsd, kInstVfnmsubsd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmsubsd, kInstVfnmsubsd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmsubsd, kInstVfnmsubsd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vfnmsubss, kInstVfnmsubss, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vfnmsubss, kInstVfnmsubss, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vfnmsubss, kInstVfnmsubss, XmmReg, XmmReg, XmmReg, Mem)
// --------------------------------------------------------------------------
// [XOP]
// --------------------------------------------------------------------------
INST_2x(vfrczpd, kInstVfrczpd, XmmReg, XmmReg)
INST_2x(vfrczpd, kInstVfrczpd, XmmReg, Mem)
INST_2x(vfrczpd, kInstVfrczpd, YmmReg, YmmReg)
INST_2x(vfrczpd, kInstVfrczpd, YmmReg, Mem)
INST_2x(vfrczps, kInstVfrczps, XmmReg, XmmReg)
INST_2x(vfrczps, kInstVfrczps, XmmReg, Mem)
INST_2x(vfrczps, kInstVfrczps, YmmReg, YmmReg)
INST_2x(vfrczps, kInstVfrczps, YmmReg, Mem)
INST_2x(vfrczsd, kInstVfrczsd, XmmReg, XmmReg)
INST_2x(vfrczsd, kInstVfrczsd, XmmReg, Mem)
INST_2x(vfrczss, kInstVfrczss, XmmReg, XmmReg)
INST_2x(vfrczss, kInstVfrczss, XmmReg, Mem)
INST_4x(vpcmov, kInstVpcmov, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpcmov, kInstVpcmov, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpcmov, kInstVpcmov, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vpcmov, kInstVpcmov, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vpcmov, kInstVpcmov, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vpcmov, kInstVpcmov, YmmReg, YmmReg, YmmReg, Mem)
INST_4i(vpcomb, kInstVpcomb, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomb, kInstVpcomb, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomd, kInstVpcomd, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomd, kInstVpcomd, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomq, kInstVpcomq, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomq, kInstVpcomq, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomw, kInstVpcomw, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomw, kInstVpcomw, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomub, kInstVpcomub, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomub, kInstVpcomub, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomud, kInstVpcomud, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomud, kInstVpcomud, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomuq, kInstVpcomuq, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomuq, kInstVpcomuq, XmmReg, XmmReg, Mem, Imm)
INST_4i(vpcomuw, kInstVpcomuw, XmmReg, XmmReg, XmmReg, Imm)
INST_4i(vpcomuw, kInstVpcomuw, XmmReg, XmmReg, Mem, Imm)
INST_4x(vpermil2pd, kInstVpermil2pd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpermil2pd, kInstVpermil2pd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpermil2pd, kInstVpermil2pd, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vpermil2pd, kInstVpermil2pd, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vpermil2pd, kInstVpermil2pd, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vpermil2pd, kInstVpermil2pd, YmmReg, YmmReg, YmmReg, Mem)
INST_4x(vpermil2ps, kInstVpermil2ps, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpermil2ps, kInstVpermil2ps, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpermil2ps, kInstVpermil2ps, XmmReg, XmmReg, XmmReg, Mem)
INST_4x(vpermil2ps, kInstVpermil2ps, YmmReg, YmmReg, YmmReg, YmmReg)
INST_4x(vpermil2ps, kInstVpermil2ps, YmmReg, YmmReg, Mem, YmmReg)
INST_4x(vpermil2ps, kInstVpermil2ps, YmmReg, YmmReg, YmmReg, Mem)
INST_2x(vphaddbd, kInstVphaddbd, XmmReg, XmmReg)
INST_2x(vphaddbd, kInstVphaddbd, XmmReg, Mem)
INST_2x(vphaddbq, kInstVphaddbq, XmmReg, XmmReg)
INST_2x(vphaddbq, kInstVphaddbq, XmmReg, Mem)
INST_2x(vphaddbw, kInstVphaddbw, XmmReg, XmmReg)
INST_2x(vphaddbw, kInstVphaddbw, XmmReg, Mem)
INST_2x(vphadddq, kInstVphadddq, XmmReg, XmmReg)
INST_2x(vphadddq, kInstVphadddq, XmmReg, Mem)
INST_2x(vphaddwd, kInstVphaddwd, XmmReg, XmmReg)
INST_2x(vphaddwd, kInstVphaddwd, XmmReg, Mem)
INST_2x(vphaddwq, kInstVphaddwq, XmmReg, XmmReg)
INST_2x(vphaddwq, kInstVphaddwq, XmmReg, Mem)
INST_2x(vphaddubd, kInstVphaddubd, XmmReg, XmmReg)
INST_2x(vphaddubd, kInstVphaddubd, XmmReg, Mem)
INST_2x(vphaddubq, kInstVphaddubq, XmmReg, XmmReg)
INST_2x(vphaddubq, kInstVphaddubq, XmmReg, Mem)
INST_2x(vphaddubw, kInstVphaddubw, XmmReg, XmmReg)
INST_2x(vphaddubw, kInstVphaddubw, XmmReg, Mem)
INST_2x(vphaddudq, kInstVphaddudq, XmmReg, XmmReg)
INST_2x(vphaddudq, kInstVphaddudq, XmmReg, Mem)
INST_2x(vphadduwd, kInstVphadduwd, XmmReg, XmmReg)
INST_2x(vphadduwd, kInstVphadduwd, XmmReg, Mem)
INST_2x(vphadduwq, kInstVphadduwq, XmmReg, XmmReg)
INST_2x(vphadduwq, kInstVphadduwq, XmmReg, Mem)
INST_2x(vphsubbw, kInstVphsubbw, XmmReg, XmmReg)
INST_2x(vphsubbw, kInstVphsubbw, XmmReg, Mem)
INST_2x(vphsubdq, kInstVphsubdq, XmmReg, XmmReg)
INST_2x(vphsubdq, kInstVphsubdq, XmmReg, Mem)
INST_2x(vphsubwd, kInstVphsubwd, XmmReg, XmmReg)
INST_2x(vphsubwd, kInstVphsubwd, XmmReg, Mem)
INST_4x(vpmacsdd, kInstVpmacsdd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacsdd, kInstVpmacsdd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacsdqh, kInstVpmacsdqh, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacsdqh, kInstVpmacsdqh, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacsdql, kInstVpmacsdql, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacsdql, kInstVpmacsdql, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacswd, kInstVpmacswd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacswd, kInstVpmacswd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacsww, kInstVpmacsww, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacsww, kInstVpmacsww, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacssdd, kInstVpmacssdd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacssdd, kInstVpmacssdd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacssdqh, kInstVpmacssdqh, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacssdqh, kInstVpmacssdqh, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacssdql, kInstVpmacssdql, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacssdql, kInstVpmacssdql, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacsswd, kInstVpmacsswd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacsswd, kInstVpmacsswd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmacssww, kInstVpmacssww, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmacssww, kInstVpmacssww, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmadcsswd, kInstVpmadcsswd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmadcsswd, kInstVpmadcsswd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpmadcswd, kInstVpmadcswd, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpmadcswd, kInstVpmadcswd, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpperm, kInstVpperm, XmmReg, XmmReg, XmmReg, XmmReg)
INST_4x(vpperm, kInstVpperm, XmmReg, XmmReg, Mem, XmmReg)
INST_4x(vpperm, kInstVpperm, XmmReg, XmmReg, XmmReg, Mem)
INST_3x(vprotb, kInstVprotb, XmmReg, XmmReg, XmmReg)
INST_3x(vprotb, kInstVprotb, XmmReg, Mem, XmmReg)
INST_3x(vprotb, kInstVprotb, XmmReg, XmmReg, Mem)
INST_3i(vprotb, kInstVprotb, XmmReg, XmmReg, Imm)
INST_3i(vprotb, kInstVprotb, XmmReg, Mem, Imm)
INST_3x(vprotd, kInstVprotd, XmmReg, XmmReg, XmmReg)
INST_3x(vprotd, kInstVprotd, XmmReg, Mem, XmmReg)
INST_3x(vprotd, kInstVprotd, XmmReg, XmmReg, Mem)
INST_3i(vprotd, kInstVprotd, XmmReg, XmmReg, Imm)
INST_3i(vprotd, kInstVprotd, XmmReg, Mem, Imm)
INST_3x(vprotq, kInstVprotq, XmmReg, XmmReg, XmmReg)
INST_3x(vprotq, kInstVprotq, XmmReg, Mem, XmmReg)
INST_3x(vprotq, kInstVprotq, XmmReg, XmmReg, Mem)
INST_3i(vprotq, kInstVprotq, XmmReg, XmmReg, Imm)
INST_3i(vprotq, kInstVprotq, XmmReg, Mem, Imm)
INST_3x(vprotw, kInstVprotw, XmmReg, XmmReg, XmmReg)
INST_3x(vprotw, kInstVprotw, XmmReg, Mem, XmmReg)
INST_3x(vprotw, kInstVprotw, XmmReg, XmmReg, Mem)
INST_3i(vprotw, kInstVprotw, XmmReg, XmmReg, Imm)
INST_3i(vprotw, kInstVprotw, XmmReg, Mem, Imm)
INST_3x(vpshab, kInstVpshab, XmmReg, XmmReg, XmmReg)
INST_3x(vpshab, kInstVpshab, XmmReg, Mem, XmmReg)
INST_3x(vpshab, kInstVpshab, XmmReg, XmmReg, Mem)
INST_3x(vpshad, kInstVpshad, XmmReg, XmmReg, XmmReg)
INST_3x(vpshad, kInstVpshad, XmmReg, Mem, XmmReg)
INST_3x(vpshad, kInstVpshad, XmmReg, XmmReg, Mem)
INST_3x(vpshaq, kInstVpshaq, XmmReg, XmmReg, XmmReg)
INST_3x(vpshaq, kInstVpshaq, XmmReg, Mem, XmmReg)
INST_3x(vpshaq, kInstVpshaq, XmmReg, XmmReg, Mem)
INST_3x(vpshaw, kInstVpshaw, XmmReg, XmmReg, XmmReg)
INST_3x(vpshaw, kInstVpshaw, XmmReg, Mem, XmmReg)
INST_3x(vpshaw, kInstVpshaw, XmmReg, XmmReg, Mem)
INST_3x(vpshlb, kInstVpshlb, XmmReg, XmmReg, XmmReg)
INST_3x(vpshlb, kInstVpshlb, XmmReg, Mem, XmmReg)
INST_3x(vpshlb, kInstVpshlb, XmmReg, XmmReg, Mem)
INST_3x(vpshld, kInstVpshld, XmmReg, XmmReg, XmmReg)
INST_3x(vpshld, kInstVpshld, XmmReg, Mem, XmmReg)
INST_3x(vpshld, kInstVpshld, XmmReg, XmmReg, Mem)
INST_3x(vpshlq, kInstVpshlq, XmmReg, XmmReg, XmmReg)
INST_3x(vpshlq, kInstVpshlq, XmmReg, Mem, XmmReg)
INST_3x(vpshlq, kInstVpshlq, XmmReg, XmmReg, Mem)
INST_3x(vpshlw, kInstVpshlw, XmmReg, XmmReg, XmmReg)
INST_3x(vpshlw, kInstVpshlw, XmmReg, Mem, XmmReg)
INST_3x(vpshlw, kInstVpshlw, XmmReg, XmmReg, Mem)
// --------------------------------------------------------------------------
// [BMI]
// --------------------------------------------------------------------------
+6
View File
@@ -509,6 +509,12 @@ Error X86X64Compiler::_newVar(BaseVar* var, uint32_t vType, const char* name) {
vType = _targetVarMapping[vType];
ASMJIT_ASSERT(vType != kVarTypeInvalid);
// There is not ASSERT in release mode and this should be checked.
if (vType == kVarTypeInvalid) {
static_cast<X86Var*>(var)->reset();
return kErrorInvalidArgument;
}
const VarInfo& vInfo = _varInfo[vType];
VarData* vd = _newVd(vType, vInfo.getSize(), vInfo.getClass(), name);
+528 -287
View File
@@ -694,6 +694,12 @@ const char _instName[] =
"vfmadd231ps\0"
"vfmadd231sd\0"
"vfmadd231ss\0"
"vfmaddpd\0"
"vfmaddps\0"
"vfmaddsd\0"
"vfmaddss\0"
"vfmaddsubpd\0"
"vfmaddsubps\0"
"vfmaddsub132pd\0"
"vfmaddsub132ps\0"
"vfmaddsub213pd\0"
@@ -718,6 +724,12 @@ const char _instName[] =
"vfmsubadd213ps\0"
"vfmsubadd231pd\0"
"vfmsubadd231ps\0"
"vfmsubaddpd\0"
"vfmsubaddps\0"
"vfmsubpd\0"
"vfmsubps\0"
"vfmsubsd\0"
"vfmsubss\0"
"vfnmadd132pd\0"
"vfnmadd132ps\0"
"vfnmadd132sd\0"
@@ -730,6 +742,10 @@ const char _instName[] =
"vfnmadd231ps\0"
"vfnmadd231sd\0"
"vfnmadd231ss\0"
"vfnmaddpd\0"
"vfnmaddps\0"
"vfnmaddsd\0"
"vfnmaddss\0"
"vfnmsub132pd\0"
"vfnmsub132ps\0"
"vfnmsub132sd\0"
@@ -742,6 +758,14 @@ const char _instName[] =
"vfnmsub231ps\0"
"vfnmsub231sd\0"
"vfnmsub231ss\0"
"vfnmsubpd\0"
"vfnmsubps\0"
"vfnmsubsd\0"
"vfnmsubss\0"
"vfrczpd\0"
"vfrczps\0"
"vfrczsd\0"
"vfrczss\0"
"vgatherdpd\0"
"vgatherdps\0"
"vgatherqpd\0"
@@ -826,6 +850,7 @@ const char _instName[] =
"vpbroadcastq\0"
"vpbroadcastw\0"
"vpclmulqdq\0"
"vpcmov\0"
"vpcmpeqb\0"
"vpcmpeqd\0"
"vpcmpeqq\0"
@@ -838,9 +863,19 @@ const char _instName[] =
"vpcmpgtw\0"
"vpcmpistri\0"
"vpcmpistrm\0"
"vpcomb\0"
"vpcomd\0"
"vpcomq\0"
"vpcomub\0"
"vpcomud\0"
"vpcomuq\0"
"vpcomuw\0"
"vpcomw\0"
"vperm2f128\0"
"vperm2i128\0"
"vpermd\0"
"vpermil2pd\0"
"vpermil2ps\0"
"vpermilpd\0"
"vpermilps\0"
"vpermpd\0"
@@ -854,17 +889,44 @@ const char _instName[] =
"vpgatherdq\0"
"vpgatherqd\0"
"vpgatherqq\0"
"vphaddbd\0"
"vphaddbq\0"
"vphaddbw\0"
"vphaddd\0"
"vphadddq\0"
"vphaddsw\0"
"vphaddubd\0"
"vphaddubq\0"
"vphaddubw\0"
"vphaddudq\0"
"vphadduwd\0"
"vphadduwq\0"
"vphaddw\0"
"vphaddwd\0"
"vphaddwq\0"
"vphminposuw\0"
"vphsubbw\0"
"vphsubdq\0"
"vphsubd\0"
"vphsubsw\0"
"vphsubw\0"
"vphsubwd\0"
"vpinsrb\0"
"vpinsrd\0"
"vpinsrq\0"
"vpinsrw\0"
"vpmacsdd\0"
"vpmacsdqh\0"
"vpmacsdql\0"
"vpmacssdd\0"
"vpmacssdqh\0"
"vpmacssdql\0"
"vpmacsswd\0"
"vpmacssww\0"
"vpmacswd\0"
"vpmacsww\0"
"vpmadcsswd\0"
"vpmadcswd\0"
"vpmaddubsw\0"
"vpmaddwd\0"
"vpmaskmovd\0"
@@ -902,7 +964,20 @@ const char _instName[] =
"vpmullw\0"
"vpmuludq\0"
"vpor\0"
"vpperm\0"
"vprotb\0"
"vprotd\0"
"vprotq\0"
"vprotw\0"
"vpsadbw\0"
"vpshab\0"
"vpshad\0"
"vpshaq\0"
"vpshaw\0"
"vpshlb\0"
"vpshld\0"
"vpshlq\0"
"vpshlw\0"
"vpshufb\0"
"vpshufd\0"
"vpshufhw\0"
@@ -1649,293 +1724,368 @@ enum kInstData_NameIndex {
kInstVfmadd231ps_NameIndex = 4715,
kInstVfmadd231sd_NameIndex = 4727,
kInstVfmadd231ss_NameIndex = 4739,
kInstVfmaddsub132pd_NameIndex = 4751,
kInstVfmaddsub132ps_NameIndex = 4766,
kInstVfmaddsub213pd_NameIndex = 4781,
kInstVfmaddsub213ps_NameIndex = 4796,
kInstVfmaddsub231pd_NameIndex = 4811,
kInstVfmaddsub231ps_NameIndex = 4826,
kInstVfmsub132pd_NameIndex = 4841,
kInstVfmsub132ps_NameIndex = 4853,
kInstVfmsub132sd_NameIndex = 4865,
kInstVfmsub132ss_NameIndex = 4877,
kInstVfmsub213pd_NameIndex = 4889,
kInstVfmsub213ps_NameIndex = 4901,
kInstVfmsub213sd_NameIndex = 4913,
kInstVfmsub213ss_NameIndex = 4925,
kInstVfmsub231pd_NameIndex = 4937,
kInstVfmsub231ps_NameIndex = 4949,
kInstVfmsub231sd_NameIndex = 4961,
kInstVfmsub231ss_NameIndex = 4973,
kInstVfmsubadd132pd_NameIndex = 4985,
kInstVfmsubadd132ps_NameIndex = 5000,
kInstVfmsubadd213pd_NameIndex = 5015,
kInstVfmsubadd213ps_NameIndex = 5030,
kInstVfmsubadd231pd_NameIndex = 5045,
kInstVfmsubadd231ps_NameIndex = 5060,
kInstVfnmadd132pd_NameIndex = 5075,
kInstVfnmadd132ps_NameIndex = 5088,
kInstVfnmadd132sd_NameIndex = 5101,
kInstVfnmadd132ss_NameIndex = 5114,
kInstVfnmadd213pd_NameIndex = 5127,
kInstVfnmadd213ps_NameIndex = 5140,
kInstVfnmadd213sd_NameIndex = 5153,
kInstVfnmadd213ss_NameIndex = 5166,
kInstVfnmadd231pd_NameIndex = 5179,
kInstVfnmadd231ps_NameIndex = 5192,
kInstVfnmadd231sd_NameIndex = 5205,
kInstVfnmadd231ss_NameIndex = 5218,
kInstVfnmsub132pd_NameIndex = 5231,
kInstVfnmsub132ps_NameIndex = 5244,
kInstVfnmsub132sd_NameIndex = 5257,
kInstVfnmsub132ss_NameIndex = 5270,
kInstVfnmsub213pd_NameIndex = 5283,
kInstVfnmsub213ps_NameIndex = 5296,
kInstVfnmsub213sd_NameIndex = 5309,
kInstVfnmsub213ss_NameIndex = 5322,
kInstVfnmsub231pd_NameIndex = 5335,
kInstVfnmsub231ps_NameIndex = 5348,
kInstVfnmsub231sd_NameIndex = 5361,
kInstVfnmsub231ss_NameIndex = 5374,
kInstVgatherdpd_NameIndex = 5387,
kInstVgatherdps_NameIndex = 5398,
kInstVgatherqpd_NameIndex = 5409,
kInstVgatherqps_NameIndex = 5420,
kInstVhaddpd_NameIndex = 5431,
kInstVhaddps_NameIndex = 5439,
kInstVhsubpd_NameIndex = 5447,
kInstVhsubps_NameIndex = 5455,
kInstVinsertf128_NameIndex = 5463,
kInstVinserti128_NameIndex = 5475,
kInstVinsertps_NameIndex = 5487,
kInstVlddqu_NameIndex = 5497,
kInstVldmxcsr_NameIndex = 5504,
kInstVmaskmovdqu_NameIndex = 5513,
kInstVmaskmovpd_NameIndex = 5525,
kInstVmaskmovps_NameIndex = 5536,
kInstVmaxpd_NameIndex = 5547,
kInstVmaxps_NameIndex = 5554,
kInstVmaxsd_NameIndex = 5561,
kInstVmaxss_NameIndex = 5568,
kInstVminpd_NameIndex = 5575,
kInstVminps_NameIndex = 5582,
kInstVminsd_NameIndex = 5589,
kInstVminss_NameIndex = 5596,
kInstVmovapd_NameIndex = 5603,
kInstVmovaps_NameIndex = 5611,
kInstVmovd_NameIndex = 5619,
kInstVmovddup_NameIndex = 5625,
kInstVmovdqa_NameIndex = 5634,
kInstVmovdqu_NameIndex = 5642,
kInstVmovhlps_NameIndex = 5650,
kInstVmovhpd_NameIndex = 5659,
kInstVmovhps_NameIndex = 5667,
kInstVmovlhps_NameIndex = 5675,
kInstVmovlpd_NameIndex = 5684,
kInstVmovlps_NameIndex = 5692,
kInstVmovmskpd_NameIndex = 5700,
kInstVmovmskps_NameIndex = 5710,
kInstVmovntdq_NameIndex = 5720,
kInstVmovntdqa_NameIndex = 5729,
kInstVmovntpd_NameIndex = 5739,
kInstVmovntps_NameIndex = 5748,
kInstVmovq_NameIndex = 5757,
kInstVmovsd_NameIndex = 5763,
kInstVmovshdup_NameIndex = 5770,
kInstVmovsldup_NameIndex = 5780,
kInstVmovss_NameIndex = 5790,
kInstVmovupd_NameIndex = 5797,
kInstVmovups_NameIndex = 5805,
kInstVmpsadbw_NameIndex = 5813,
kInstVmulpd_NameIndex = 5822,
kInstVmulps_NameIndex = 5829,
kInstVmulsd_NameIndex = 5836,
kInstVmulss_NameIndex = 5843,
kInstVorpd_NameIndex = 5850,
kInstVorps_NameIndex = 5856,
kInstVpabsb_NameIndex = 5862,
kInstVpabsd_NameIndex = 5869,
kInstVpabsw_NameIndex = 5876,
kInstVpackssdw_NameIndex = 5883,
kInstVpacksswb_NameIndex = 5893,
kInstVpackusdw_NameIndex = 5903,
kInstVpackuswb_NameIndex = 5913,
kInstVpaddb_NameIndex = 5923,
kInstVpaddd_NameIndex = 5930,
kInstVpaddq_NameIndex = 5937,
kInstVpaddsb_NameIndex = 5944,
kInstVpaddsw_NameIndex = 5952,
kInstVpaddusb_NameIndex = 5960,
kInstVpaddusw_NameIndex = 5969,
kInstVpaddw_NameIndex = 5978,
kInstVpalignr_NameIndex = 5985,
kInstVpand_NameIndex = 5994,
kInstVpandn_NameIndex = 6000,
kInstVpavgb_NameIndex = 6007,
kInstVpavgw_NameIndex = 6014,
kInstVpblendd_NameIndex = 6021,
kInstVpblendvb_NameIndex = 6030,
kInstVpblendw_NameIndex = 6040,
kInstVpbroadcastb_NameIndex = 6049,
kInstVpbroadcastd_NameIndex = 6062,
kInstVpbroadcastq_NameIndex = 6075,
kInstVpbroadcastw_NameIndex = 6088,
kInstVpclmulqdq_NameIndex = 6101,
kInstVpcmpeqb_NameIndex = 6112,
kInstVpcmpeqd_NameIndex = 6121,
kInstVpcmpeqq_NameIndex = 6130,
kInstVpcmpeqw_NameIndex = 6139,
kInstVpcmpestri_NameIndex = 6148,
kInstVpcmpestrm_NameIndex = 6159,
kInstVpcmpgtb_NameIndex = 6170,
kInstVpcmpgtd_NameIndex = 6179,
kInstVpcmpgtq_NameIndex = 6188,
kInstVpcmpgtw_NameIndex = 6197,
kInstVpcmpistri_NameIndex = 6206,
kInstVpcmpistrm_NameIndex = 6217,
kInstVperm2f128_NameIndex = 6228,
kInstVperm2i128_NameIndex = 6239,
kInstVpermd_NameIndex = 6250,
kInstVpermilpd_NameIndex = 6257,
kInstVpermilps_NameIndex = 6267,
kInstVpermpd_NameIndex = 6277,
kInstVpermps_NameIndex = 6285,
kInstVpermq_NameIndex = 6293,
kInstVpextrb_NameIndex = 6300,
kInstVpextrd_NameIndex = 6308,
kInstVpextrq_NameIndex = 6316,
kInstVpextrw_NameIndex = 6324,
kInstVpgatherdd_NameIndex = 6332,
kInstVpgatherdq_NameIndex = 6343,
kInstVpgatherqd_NameIndex = 6354,
kInstVpgatherqq_NameIndex = 6365,
kInstVphaddd_NameIndex = 6376,
kInstVphaddsw_NameIndex = 6384,
kInstVphaddw_NameIndex = 6393,
kInstVphminposuw_NameIndex = 6401,
kInstVphsubd_NameIndex = 6413,
kInstVphsubsw_NameIndex = 6421,
kInstVphsubw_NameIndex = 6430,
kInstVpinsrb_NameIndex = 6438,
kInstVpinsrd_NameIndex = 6446,
kInstVpinsrq_NameIndex = 6454,
kInstVpinsrw_NameIndex = 6462,
kInstVpmaddubsw_NameIndex = 6470,
kInstVpmaddwd_NameIndex = 6481,
kInstVpmaskmovd_NameIndex = 6490,
kInstVpmaskmovq_NameIndex = 6501,
kInstVpmaxsb_NameIndex = 6512,
kInstVpmaxsd_NameIndex = 6520,
kInstVpmaxsw_NameIndex = 6528,
kInstVpmaxub_NameIndex = 6536,
kInstVpmaxud_NameIndex = 6544,
kInstVpmaxuw_NameIndex = 6552,
kInstVpminsb_NameIndex = 6560,
kInstVpminsd_NameIndex = 6568,
kInstVpminsw_NameIndex = 6576,
kInstVpminub_NameIndex = 6584,
kInstVpminud_NameIndex = 6592,
kInstVpminuw_NameIndex = 6600,
kInstVpmovmskb_NameIndex = 6608,
kInstVpmovsxbd_NameIndex = 6618,
kInstVpmovsxbq_NameIndex = 6628,
kInstVpmovsxbw_NameIndex = 6638,
kInstVpmovsxdq_NameIndex = 6648,
kInstVpmovsxwd_NameIndex = 6658,
kInstVpmovsxwq_NameIndex = 6668,
kInstVpmovzxbd_NameIndex = 6678,
kInstVpmovzxbq_NameIndex = 6688,
kInstVpmovzxbw_NameIndex = 6698,
kInstVpmovzxdq_NameIndex = 6708,
kInstVpmovzxwd_NameIndex = 6718,
kInstVpmovzxwq_NameIndex = 6728,
kInstVpmuldq_NameIndex = 6738,
kInstVpmulhrsw_NameIndex = 6746,
kInstVpmulhuw_NameIndex = 6756,
kInstVpmulhw_NameIndex = 6765,
kInstVpmulld_NameIndex = 6773,
kInstVpmullw_NameIndex = 6781,
kInstVpmuludq_NameIndex = 6789,
kInstVpor_NameIndex = 6798,
kInstVpsadbw_NameIndex = 6803,
kInstVpshufb_NameIndex = 6811,
kInstVpshufd_NameIndex = 6819,
kInstVpshufhw_NameIndex = 6827,
kInstVpshuflw_NameIndex = 6836,
kInstVpsignb_NameIndex = 6845,
kInstVpsignd_NameIndex = 6853,
kInstVpsignw_NameIndex = 6861,
kInstVpslld_NameIndex = 6869,
kInstVpslldq_NameIndex = 6876,
kInstVpsllq_NameIndex = 6884,
kInstVpsllvd_NameIndex = 6891,
kInstVpsllvq_NameIndex = 6899,
kInstVpsllw_NameIndex = 6907,
kInstVpsrad_NameIndex = 6914,
kInstVpsravd_NameIndex = 6921,
kInstVpsraw_NameIndex = 6929,
kInstVpsrld_NameIndex = 6936,
kInstVpsrldq_NameIndex = 6943,
kInstVpsrlq_NameIndex = 6951,
kInstVpsrlvd_NameIndex = 6958,
kInstVpsrlvq_NameIndex = 6966,
kInstVpsrlw_NameIndex = 6974,
kInstVpsubb_NameIndex = 6981,
kInstVpsubd_NameIndex = 6988,
kInstVpsubq_NameIndex = 6995,
kInstVpsubsb_NameIndex = 7002,
kInstVpsubsw_NameIndex = 7010,
kInstVpsubusb_NameIndex = 7018,
kInstVpsubusw_NameIndex = 7027,
kInstVpsubw_NameIndex = 7036,
kInstVptest_NameIndex = 7043,
kInstVpunpckhbw_NameIndex = 7050,
kInstVpunpckhdq_NameIndex = 7061,
kInstVpunpckhqdq_NameIndex = 7072,
kInstVpunpckhwd_NameIndex = 7084,
kInstVpunpcklbw_NameIndex = 7095,
kInstVpunpckldq_NameIndex = 7106,
kInstVpunpcklqdq_NameIndex = 7117,
kInstVpunpcklwd_NameIndex = 7129,
kInstVpxor_NameIndex = 7140,
kInstVrcpps_NameIndex = 7146,
kInstVrcpss_NameIndex = 7153,
kInstVroundpd_NameIndex = 7160,
kInstVroundps_NameIndex = 7169,
kInstVroundsd_NameIndex = 7178,
kInstVroundss_NameIndex = 7187,
kInstVrsqrtps_NameIndex = 7196,
kInstVrsqrtss_NameIndex = 7205,
kInstVshufpd_NameIndex = 7214,
kInstVshufps_NameIndex = 7222,
kInstVsqrtpd_NameIndex = 7230,
kInstVsqrtps_NameIndex = 7238,
kInstVsqrtsd_NameIndex = 7246,
kInstVsqrtss_NameIndex = 7254,
kInstVstmxcsr_NameIndex = 7262,
kInstVsubpd_NameIndex = 7271,
kInstVsubps_NameIndex = 7278,
kInstVsubsd_NameIndex = 7285,
kInstVsubss_NameIndex = 7292,
kInstVtestpd_NameIndex = 7299,
kInstVtestps_NameIndex = 7307,
kInstVucomisd_NameIndex = 7315,
kInstVucomiss_NameIndex = 7324,
kInstVunpckhpd_NameIndex = 7333,
kInstVunpckhps_NameIndex = 7343,
kInstVunpcklpd_NameIndex = 7353,
kInstVunpcklps_NameIndex = 7363,
kInstVxorpd_NameIndex = 7373,
kInstVxorps_NameIndex = 7380,
kInstVzeroall_NameIndex = 7387,
kInstVzeroupper_NameIndex = 7396,
kInstWrfsbase_NameIndex = 7407,
kInstWrgsbase_NameIndex = 7416,
kInstXadd_NameIndex = 7425,
kInstXchg_NameIndex = 7430,
kInstXor_NameIndex = 7435,
kInstXorpd_NameIndex = 7439,
kInstXorps_NameIndex = 7445
kInstVfmaddpd_NameIndex = 4751,
kInstVfmaddps_NameIndex = 4760,
kInstVfmaddsd_NameIndex = 4769,
kInstVfmaddss_NameIndex = 4778,
kInstVfmaddsubpd_NameIndex = 4787,
kInstVfmaddsubps_NameIndex = 4799,
kInstVfmaddsub132pd_NameIndex = 4811,
kInstVfmaddsub132ps_NameIndex = 4826,
kInstVfmaddsub213pd_NameIndex = 4841,
kInstVfmaddsub213ps_NameIndex = 4856,
kInstVfmaddsub231pd_NameIndex = 4871,
kInstVfmaddsub231ps_NameIndex = 4886,
kInstVfmsub132pd_NameIndex = 4901,
kInstVfmsub132ps_NameIndex = 4913,
kInstVfmsub132sd_NameIndex = 4925,
kInstVfmsub132ss_NameIndex = 4937,
kInstVfmsub213pd_NameIndex = 4949,
kInstVfmsub213ps_NameIndex = 4961,
kInstVfmsub213sd_NameIndex = 4973,
kInstVfmsub213ss_NameIndex = 4985,
kInstVfmsub231pd_NameIndex = 4997,
kInstVfmsub231ps_NameIndex = 5009,
kInstVfmsub231sd_NameIndex = 5021,
kInstVfmsub231ss_NameIndex = 5033,
kInstVfmsubadd132pd_NameIndex = 5045,
kInstVfmsubadd132ps_NameIndex = 5060,
kInstVfmsubadd213pd_NameIndex = 5075,
kInstVfmsubadd213ps_NameIndex = 5090,
kInstVfmsubadd231pd_NameIndex = 5105,
kInstVfmsubadd231ps_NameIndex = 5120,
kInstVfmsubaddpd_NameIndex = 5135,
kInstVfmsubaddps_NameIndex = 5147,
kInstVfmsubpd_NameIndex = 5159,
kInstVfmsubps_NameIndex = 5168,
kInstVfmsubsd_NameIndex = 5177,
kInstVfmsubss_NameIndex = 5186,
kInstVfnmadd132pd_NameIndex = 5195,
kInstVfnmadd132ps_NameIndex = 5208,
kInstVfnmadd132sd_NameIndex = 5221,
kInstVfnmadd132ss_NameIndex = 5234,
kInstVfnmadd213pd_NameIndex = 5247,
kInstVfnmadd213ps_NameIndex = 5260,
kInstVfnmadd213sd_NameIndex = 5273,
kInstVfnmadd213ss_NameIndex = 5286,
kInstVfnmadd231pd_NameIndex = 5299,
kInstVfnmadd231ps_NameIndex = 5312,
kInstVfnmadd231sd_NameIndex = 5325,
kInstVfnmadd231ss_NameIndex = 5338,
kInstVfnmaddpd_NameIndex = 5351,
kInstVfnmaddps_NameIndex = 5361,
kInstVfnmaddsd_NameIndex = 5371,
kInstVfnmaddss_NameIndex = 5381,
kInstVfnmsub132pd_NameIndex = 5391,
kInstVfnmsub132ps_NameIndex = 5404,
kInstVfnmsub132sd_NameIndex = 5417,
kInstVfnmsub132ss_NameIndex = 5430,
kInstVfnmsub213pd_NameIndex = 5443,
kInstVfnmsub213ps_NameIndex = 5456,
kInstVfnmsub213sd_NameIndex = 5469,
kInstVfnmsub213ss_NameIndex = 5482,
kInstVfnmsub231pd_NameIndex = 5495,
kInstVfnmsub231ps_NameIndex = 5508,
kInstVfnmsub231sd_NameIndex = 5521,
kInstVfnmsub231ss_NameIndex = 5534,
kInstVfnmsubpd_NameIndex = 5547,
kInstVfnmsubps_NameIndex = 5557,
kInstVfnmsubsd_NameIndex = 5567,
kInstVfnmsubss_NameIndex = 5577,
kInstVfrczpd_NameIndex = 5587,
kInstVfrczps_NameIndex = 5595,
kInstVfrczsd_NameIndex = 5603,
kInstVfrczss_NameIndex = 5611,
kInstVgatherdpd_NameIndex = 5619,
kInstVgatherdps_NameIndex = 5630,
kInstVgatherqpd_NameIndex = 5641,
kInstVgatherqps_NameIndex = 5652,
kInstVhaddpd_NameIndex = 5663,
kInstVhaddps_NameIndex = 5671,
kInstVhsubpd_NameIndex = 5679,
kInstVhsubps_NameIndex = 5687,
kInstVinsertf128_NameIndex = 5695,
kInstVinserti128_NameIndex = 5707,
kInstVinsertps_NameIndex = 5719,
kInstVlddqu_NameIndex = 5729,
kInstVldmxcsr_NameIndex = 5736,
kInstVmaskmovdqu_NameIndex = 5745,
kInstVmaskmovpd_NameIndex = 5757,
kInstVmaskmovps_NameIndex = 5768,
kInstVmaxpd_NameIndex = 5779,
kInstVmaxps_NameIndex = 5786,
kInstVmaxsd_NameIndex = 5793,
kInstVmaxss_NameIndex = 5800,
kInstVminpd_NameIndex = 5807,
kInstVminps_NameIndex = 5814,
kInstVminsd_NameIndex = 5821,
kInstVminss_NameIndex = 5828,
kInstVmovapd_NameIndex = 5835,
kInstVmovaps_NameIndex = 5843,
kInstVmovd_NameIndex = 5851,
kInstVmovddup_NameIndex = 5857,
kInstVmovdqa_NameIndex = 5866,
kInstVmovdqu_NameIndex = 5874,
kInstVmovhlps_NameIndex = 5882,
kInstVmovhpd_NameIndex = 5891,
kInstVmovhps_NameIndex = 5899,
kInstVmovlhps_NameIndex = 5907,
kInstVmovlpd_NameIndex = 5916,
kInstVmovlps_NameIndex = 5924,
kInstVmovmskpd_NameIndex = 5932,
kInstVmovmskps_NameIndex = 5942,
kInstVmovntdq_NameIndex = 5952,
kInstVmovntdqa_NameIndex = 5961,
kInstVmovntpd_NameIndex = 5971,
kInstVmovntps_NameIndex = 5980,
kInstVmovq_NameIndex = 5989,
kInstVmovsd_NameIndex = 5995,
kInstVmovshdup_NameIndex = 6002,
kInstVmovsldup_NameIndex = 6012,
kInstVmovss_NameIndex = 6022,
kInstVmovupd_NameIndex = 6029,
kInstVmovups_NameIndex = 6037,
kInstVmpsadbw_NameIndex = 6045,
kInstVmulpd_NameIndex = 6054,
kInstVmulps_NameIndex = 6061,
kInstVmulsd_NameIndex = 6068,
kInstVmulss_NameIndex = 6075,
kInstVorpd_NameIndex = 6082,
kInstVorps_NameIndex = 6088,
kInstVpabsb_NameIndex = 6094,
kInstVpabsd_NameIndex = 6101,
kInstVpabsw_NameIndex = 6108,
kInstVpackssdw_NameIndex = 6115,
kInstVpacksswb_NameIndex = 6125,
kInstVpackusdw_NameIndex = 6135,
kInstVpackuswb_NameIndex = 6145,
kInstVpaddb_NameIndex = 6155,
kInstVpaddd_NameIndex = 6162,
kInstVpaddq_NameIndex = 6169,
kInstVpaddsb_NameIndex = 6176,
kInstVpaddsw_NameIndex = 6184,
kInstVpaddusb_NameIndex = 6192,
kInstVpaddusw_NameIndex = 6201,
kInstVpaddw_NameIndex = 6210,
kInstVpalignr_NameIndex = 6217,
kInstVpand_NameIndex = 6226,
kInstVpandn_NameIndex = 6232,
kInstVpavgb_NameIndex = 6239,
kInstVpavgw_NameIndex = 6246,
kInstVpblendd_NameIndex = 6253,
kInstVpblendvb_NameIndex = 6262,
kInstVpblendw_NameIndex = 6272,
kInstVpbroadcastb_NameIndex = 6281,
kInstVpbroadcastd_NameIndex = 6294,
kInstVpbroadcastq_NameIndex = 6307,
kInstVpbroadcastw_NameIndex = 6320,
kInstVpclmulqdq_NameIndex = 6333,
kInstVpcmov_NameIndex = 6344,
kInstVpcmpeqb_NameIndex = 6351,
kInstVpcmpeqd_NameIndex = 6360,
kInstVpcmpeqq_NameIndex = 6369,
kInstVpcmpeqw_NameIndex = 6378,
kInstVpcmpestri_NameIndex = 6387,
kInstVpcmpestrm_NameIndex = 6398,
kInstVpcmpgtb_NameIndex = 6409,
kInstVpcmpgtd_NameIndex = 6418,
kInstVpcmpgtq_NameIndex = 6427,
kInstVpcmpgtw_NameIndex = 6436,
kInstVpcmpistri_NameIndex = 6445,
kInstVpcmpistrm_NameIndex = 6456,
kInstVpcomb_NameIndex = 6467,
kInstVpcomd_NameIndex = 6474,
kInstVpcomq_NameIndex = 6481,
kInstVpcomub_NameIndex = 6488,
kInstVpcomud_NameIndex = 6496,
kInstVpcomuq_NameIndex = 6504,
kInstVpcomuw_NameIndex = 6512,
kInstVpcomw_NameIndex = 6520,
kInstVperm2f128_NameIndex = 6527,
kInstVperm2i128_NameIndex = 6538,
kInstVpermd_NameIndex = 6549,
kInstVpermil2pd_NameIndex = 6556,
kInstVpermil2ps_NameIndex = 6567,
kInstVpermilpd_NameIndex = 6578,
kInstVpermilps_NameIndex = 6588,
kInstVpermpd_NameIndex = 6598,
kInstVpermps_NameIndex = 6606,
kInstVpermq_NameIndex = 6614,
kInstVpextrb_NameIndex = 6621,
kInstVpextrd_NameIndex = 6629,
kInstVpextrq_NameIndex = 6637,
kInstVpextrw_NameIndex = 6645,
kInstVpgatherdd_NameIndex = 6653,
kInstVpgatherdq_NameIndex = 6664,
kInstVpgatherqd_NameIndex = 6675,
kInstVpgatherqq_NameIndex = 6686,
kInstVphaddbd_NameIndex = 6697,
kInstVphaddbq_NameIndex = 6706,
kInstVphaddbw_NameIndex = 6715,
kInstVphaddd_NameIndex = 6724,
kInstVphadddq_NameIndex = 6732,
kInstVphaddsw_NameIndex = 6741,
kInstVphaddubd_NameIndex = 6750,
kInstVphaddubq_NameIndex = 6760,
kInstVphaddubw_NameIndex = 6770,
kInstVphaddudq_NameIndex = 6780,
kInstVphadduwd_NameIndex = 6790,
kInstVphadduwq_NameIndex = 6800,
kInstVphaddw_NameIndex = 6810,
kInstVphaddwd_NameIndex = 6818,
kInstVphaddwq_NameIndex = 6827,
kInstVphminposuw_NameIndex = 6836,
kInstVphsubbw_NameIndex = 6848,
kInstVphsubdq_NameIndex = 6857,
kInstVphsubd_NameIndex = 6866,
kInstVphsubsw_NameIndex = 6874,
kInstVphsubw_NameIndex = 6883,
kInstVphsubwd_NameIndex = 6891,
kInstVpinsrb_NameIndex = 6900,
kInstVpinsrd_NameIndex = 6908,
kInstVpinsrq_NameIndex = 6916,
kInstVpinsrw_NameIndex = 6924,
kInstVpmacsdd_NameIndex = 6932,
kInstVpmacsdqh_NameIndex = 6941,
kInstVpmacsdql_NameIndex = 6951,
kInstVpmacssdd_NameIndex = 6961,
kInstVpmacssdqh_NameIndex = 6971,
kInstVpmacssdql_NameIndex = 6982,
kInstVpmacsswd_NameIndex = 6993,
kInstVpmacssww_NameIndex = 7003,
kInstVpmacswd_NameIndex = 7013,
kInstVpmacsww_NameIndex = 7022,
kInstVpmadcsswd_NameIndex = 7031,
kInstVpmadcswd_NameIndex = 7042,
kInstVpmaddubsw_NameIndex = 7052,
kInstVpmaddwd_NameIndex = 7063,
kInstVpmaskmovd_NameIndex = 7072,
kInstVpmaskmovq_NameIndex = 7083,
kInstVpmaxsb_NameIndex = 7094,
kInstVpmaxsd_NameIndex = 7102,
kInstVpmaxsw_NameIndex = 7110,
kInstVpmaxub_NameIndex = 7118,
kInstVpmaxud_NameIndex = 7126,
kInstVpmaxuw_NameIndex = 7134,
kInstVpminsb_NameIndex = 7142,
kInstVpminsd_NameIndex = 7150,
kInstVpminsw_NameIndex = 7158,
kInstVpminub_NameIndex = 7166,
kInstVpminud_NameIndex = 7174,
kInstVpminuw_NameIndex = 7182,
kInstVpmovmskb_NameIndex = 7190,
kInstVpmovsxbd_NameIndex = 7200,
kInstVpmovsxbq_NameIndex = 7210,
kInstVpmovsxbw_NameIndex = 7220,
kInstVpmovsxdq_NameIndex = 7230,
kInstVpmovsxwd_NameIndex = 7240,
kInstVpmovsxwq_NameIndex = 7250,
kInstVpmovzxbd_NameIndex = 7260,
kInstVpmovzxbq_NameIndex = 7270,
kInstVpmovzxbw_NameIndex = 7280,
kInstVpmovzxdq_NameIndex = 7290,
kInstVpmovzxwd_NameIndex = 7300,
kInstVpmovzxwq_NameIndex = 7310,
kInstVpmuldq_NameIndex = 7320,
kInstVpmulhrsw_NameIndex = 7328,
kInstVpmulhuw_NameIndex = 7338,
kInstVpmulhw_NameIndex = 7347,
kInstVpmulld_NameIndex = 7355,
kInstVpmullw_NameIndex = 7363,
kInstVpmuludq_NameIndex = 7371,
kInstVpor_NameIndex = 7380,
kInstVpperm_NameIndex = 7385,
kInstVprotb_NameIndex = 7392,
kInstVprotd_NameIndex = 7399,
kInstVprotq_NameIndex = 7406,
kInstVprotw_NameIndex = 7413,
kInstVpsadbw_NameIndex = 7420,
kInstVpshab_NameIndex = 7428,
kInstVpshad_NameIndex = 7435,
kInstVpshaq_NameIndex = 7442,
kInstVpshaw_NameIndex = 7449,
kInstVpshlb_NameIndex = 7456,
kInstVpshld_NameIndex = 7463,
kInstVpshlq_NameIndex = 7470,
kInstVpshlw_NameIndex = 7477,
kInstVpshufb_NameIndex = 7484,
kInstVpshufd_NameIndex = 7492,
kInstVpshufhw_NameIndex = 7500,
kInstVpshuflw_NameIndex = 7509,
kInstVpsignb_NameIndex = 7518,
kInstVpsignd_NameIndex = 7526,
kInstVpsignw_NameIndex = 7534,
kInstVpslld_NameIndex = 7542,
kInstVpslldq_NameIndex = 7549,
kInstVpsllq_NameIndex = 7557,
kInstVpsllvd_NameIndex = 7564,
kInstVpsllvq_NameIndex = 7572,
kInstVpsllw_NameIndex = 7580,
kInstVpsrad_NameIndex = 7587,
kInstVpsravd_NameIndex = 7594,
kInstVpsraw_NameIndex = 7602,
kInstVpsrld_NameIndex = 7609,
kInstVpsrldq_NameIndex = 7616,
kInstVpsrlq_NameIndex = 7624,
kInstVpsrlvd_NameIndex = 7631,
kInstVpsrlvq_NameIndex = 7639,
kInstVpsrlw_NameIndex = 7647,
kInstVpsubb_NameIndex = 7654,
kInstVpsubd_NameIndex = 7661,
kInstVpsubq_NameIndex = 7668,
kInstVpsubsb_NameIndex = 7675,
kInstVpsubsw_NameIndex = 7683,
kInstVpsubusb_NameIndex = 7691,
kInstVpsubusw_NameIndex = 7700,
kInstVpsubw_NameIndex = 7709,
kInstVptest_NameIndex = 7716,
kInstVpunpckhbw_NameIndex = 7723,
kInstVpunpckhdq_NameIndex = 7734,
kInstVpunpckhqdq_NameIndex = 7745,
kInstVpunpckhwd_NameIndex = 7757,
kInstVpunpcklbw_NameIndex = 7768,
kInstVpunpckldq_NameIndex = 7779,
kInstVpunpcklqdq_NameIndex = 7790,
kInstVpunpcklwd_NameIndex = 7802,
kInstVpxor_NameIndex = 7813,
kInstVrcpps_NameIndex = 7819,
kInstVrcpss_NameIndex = 7826,
kInstVroundpd_NameIndex = 7833,
kInstVroundps_NameIndex = 7842,
kInstVroundsd_NameIndex = 7851,
kInstVroundss_NameIndex = 7860,
kInstVrsqrtps_NameIndex = 7869,
kInstVrsqrtss_NameIndex = 7878,
kInstVshufpd_NameIndex = 7887,
kInstVshufps_NameIndex = 7895,
kInstVsqrtpd_NameIndex = 7903,
kInstVsqrtps_NameIndex = 7911,
kInstVsqrtsd_NameIndex = 7919,
kInstVsqrtss_NameIndex = 7927,
kInstVstmxcsr_NameIndex = 7935,
kInstVsubpd_NameIndex = 7944,
kInstVsubps_NameIndex = 7951,
kInstVsubsd_NameIndex = 7958,
kInstVsubss_NameIndex = 7965,
kInstVtestpd_NameIndex = 7972,
kInstVtestps_NameIndex = 7980,
kInstVucomisd_NameIndex = 7988,
kInstVucomiss_NameIndex = 7997,
kInstVunpckhpd_NameIndex = 8006,
kInstVunpckhps_NameIndex = 8016,
kInstVunpcklpd_NameIndex = 8026,
kInstVunpcklps_NameIndex = 8036,
kInstVxorpd_NameIndex = 8046,
kInstVxorps_NameIndex = 8053,
kInstVzeroall_NameIndex = 8060,
kInstVzeroupper_NameIndex = 8069,
kInstWrfsbase_NameIndex = 8080,
kInstWrgsbase_NameIndex = 8089,
kInstXadd_NameIndex = 8098,
kInstXchg_NameIndex = 8103,
kInstXor_NameIndex = 8108,
kInstXorpd_NameIndex = 8112,
kInstXorps_NameIndex = 8118
};
// ${kInstData:End}
@@ -1969,6 +2119,14 @@ enum kInstData_NameIndex {
#define O_F30F38(_OpCode_, _R_) (kInstOpCode_PP_F3 | kInstOpCode_MM_0F38 | (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_F30F3A(_OpCode_, _R_) (kInstOpCode_PP_F3 | kInstOpCode_MM_0F3A | (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_00_M03(_OpCode_, _R_) (kInstOpCode_PP_00 | kInstOpCode_MM_00011| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_00_M08(_OpCode_, _R_) (kInstOpCode_PP_00 | kInstOpCode_MM_01000| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_00_M09(_OpCode_, _R_) (kInstOpCode_PP_00 | kInstOpCode_MM_01001| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_66_M03(_OpCode_, _R_) (kInstOpCode_PP_66 | kInstOpCode_MM_00011| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_66_M08(_OpCode_, _R_) (kInstOpCode_PP_66 | kInstOpCode_MM_01000| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_66_M09(_OpCode_, _R_) (kInstOpCode_PP_66 | kInstOpCode_MM_01001| (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_00_X(_OpCode_, _R_) (kInstOpCode_PP_00 | (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
#define O_9B_X(_OpCode_, _R_) (kInstOpCode_PP_9B | (0x##_OpCode_) | ((_R_) << kInstOpCode_O_Shift))
@@ -2640,6 +2798,12 @@ const InstInfo _instInfo[] = {
INST(kInstVfmadd231ps , "vfmadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(B8,U) , U ),
INST(kInstVfmadd231sd , "vfmadd231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(B9,U) , U ),
INST(kInstVfmadd231ss , "vfmadd231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(B9,U) , U ),
INST(kInstVfmaddpd , "vfmaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(69,U) , U ),
INST(kInstVfmaddps , "vfmaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(68,U) , U ),
INST(kInstVfmaddsd , "vfmaddsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(6B,U) , U ),
INST(kInstVfmaddss , "vfmaddss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(6A,U) , U ),
INST(kInstVfmaddsubpd , "vfmaddsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(5D,U) , U ),
INST(kInstVfmaddsubps , "vfmaddsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(5C,U) , U ),
INST(kInstVfmaddsub132pd , "vfmaddsub132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(96,U) , U ),
INST(kInstVfmaddsub132ps , "vfmaddsub132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(96,U) , U ),
INST(kInstVfmaddsub213pd , "vfmaddsub213pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(A6,U) , U ),
@@ -2664,6 +2828,12 @@ const InstInfo _instInfo[] = {
INST(kInstVfmsubadd213ps , "vfmsubadd213ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(A7,U) , U ),
INST(kInstVfmsubadd231pd , "vfmsubadd231pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(B7,U) , U ),
INST(kInstVfmsubadd231ps , "vfmsubadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(B7,U) , U ),
INST(kInstVfmsubaddpd , "vfmsubaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(5F,U) , U ),
INST(kInstVfmsubaddps , "vfmsubaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(5E,U) , U ),
INST(kInstVfmsubpd , "vfmsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(6D,U) , U ),
INST(kInstVfmsubps , "vfmsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(6C,U) , U ),
INST(kInstVfmsubsd , "vfmsubsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(6F,U) , U ),
INST(kInstVfmsubss , "vfmsubss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(6E,U) , U ),
INST(kInstVfnmadd132pd , "vfnmadd132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(9C,U) , U ),
INST(kInstVfnmadd132ps , "vfnmadd132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(9C,U) , U ),
INST(kInstVfnmadd132sd , "vfnmadd132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(9D,U) , U ),
@@ -2676,6 +2846,10 @@ const InstInfo _instInfo[] = {
INST(kInstVfnmadd231ps , "vfnmadd231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(BC,U) , U ),
INST(kInstVfnmadd231sd , "vfnmadd231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(BC,U) , U ),
INST(kInstVfnmadd231ss , "vfnmadd231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(BC,U) , U ),
INST(kInstVfnmaddpd , "vfnmaddpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(79,U) , U ),
INST(kInstVfnmaddps , "vfnmaddps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(78,U) , U ),
INST(kInstVfnmaddsd , "vfnmaddsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(7B,U) , U ),
INST(kInstVfnmaddss , "vfnmaddss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(7A,U) , U ),
INST(kInstVfnmsub132pd , "vfnmsub132pd" , G(AvxRvm_P) , F(None) |F(W), 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(9E,U) , U ),
INST(kInstVfnmsub132ps , "vfnmsub132ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(9E,U) , U ),
INST(kInstVfnmsub132sd , "vfnmsub132sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(9F,U) , U ),
@@ -2688,6 +2862,14 @@ const InstInfo _instInfo[] = {
INST(kInstVfnmsub231ps , "vfnmsub231ps" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(BE,U) , U ),
INST(kInstVfnmsub231sd , "vfnmsub231sd" , G(AvxRvm) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(BF,U) , U ),
INST(kInstVfnmsub231ss , "vfnmsub231ss" , G(AvxRvm) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , U , O_660F38(BF,U) , U ),
INST(kInstVfnmsubpd , "vfnmsubpd" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(7D,U) , U ),
INST(kInstVfnmsubps , "vfnmsubps" , G(Fma4_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_660F3A(7C,U) , U ),
INST(kInstVfnmsubsd , "vfnmsubsd" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(7F,U) , U ),
INST(kInstVfnmsubss , "vfnmsubss" , G(Fma4) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_660F3A(7E,U) , U ),
INST(kInstVfrczpd , "vfrczpd" , G(XopRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , O_00_M09(81,U) , U ),
INST(kInstVfrczps , "vfrczps" , G(XopRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , U , U , O_00_M09(80,U) , U ),
INST(kInstVfrczsd , "vfrczsd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(83,U) , U ),
INST(kInstVfrczss , "vfrczss" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(82,U) , U ),
INST(kInstVgatherdpd , "vgatherdpd" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , O_660F38(92,U) , U ),
INST(kInstVgatherdps , "vgatherdps" , G(AvxGather) , F(None) , 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , O_660F38(92,U) , U ),
INST(kInstVgatherqpd , "vgatherqpd" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , O_660F38(93,U) , U ),
@@ -2772,6 +2954,7 @@ const InstInfo _instInfo[] = {
INST(kInstVpbroadcastq , "vpbroadcastq" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , O_660F38(59,U) , U ),
INST(kInstVpbroadcastw , "vpbroadcastw" , G(AvxRm_P) , F(None) , 0 , O(XmmYmm) , O(XmmMem) , U , U , O_660F38(79,U) , U ),
INST(kInstVpclmulqdq , "vpclmulqdq" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_660F3A(44,U) , U ),
INST(kInstVpcmov , "vpcmov" , G(XopRvrmRvmr_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_00_M08(A2,U) , U ),
INST(kInstVpcmpeqb , "vpcmpeqb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(74,U) , U ),
INST(kInstVpcmpeqd , "vpcmpeqd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(76,U) , U ),
INST(kInstVpcmpeqq , "vpcmpeqq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(29,U) , U ),
@@ -2784,9 +2967,19 @@ const InstInfo _instInfo[] = {
INST(kInstVpcmpgtw , "vpcmpgtw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(65,U) , U ),
INST(kInstVpcmpistri , "vpcmpistri" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , O_660F3A(63,U) , U ),
INST(kInstVpcmpistrm , "vpcmpistrm" , G(AvxRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(Imm) , U , O_660F3A(62,U) , U ),
INST(kInstVpcomb , "vpcomb" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(CC,U) , U ),
INST(kInstVpcomd , "vpcomd" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(CE,U) , U ),
INST(kInstVpcomq , "vpcomq" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(CF,U) , U ),
INST(kInstVpcomub , "vpcomub" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(EC,U) , U ),
INST(kInstVpcomud , "vpcomud" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(EE,U) , U ),
INST(kInstVpcomuq , "vpcomuq" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(EF,U) , U ),
INST(kInstVpcomuw , "vpcomuw" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(ED,U) , U ),
INST(kInstVpcomw , "vpcomw" , G(XopRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Imm) , O_00_M08(CD,U) , U ),
INST(kInstVperm2f128 , "vperm2f128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , O_660F3A(06,U)|L, U ),
INST(kInstVperm2i128 , "vperm2i128" , G(AvxRvmi) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , O(Imm) , O_660F3A(46,U)|L, U ),
INST(kInstVpermd , "vpermd" , G(AvxRvm) , F(None) , 0 , O(Ymm) , O(Ymm) , O(YmmMem) , U , O_660F38(36,U)|L, U ),
INST(kInstVpermil2pd , "vpermil2pd" , G(AvxRvrmRvmr_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_66_M03(49,U) , U ),
INST(kInstVpermil2ps , "vpermil2ps" , G(AvxRvrmRvmr_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem) , O_66_M03(48,U) , U ),
INST(kInstVpermilpd , "vpermilpd" , G(AvxRvmRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , O_660F38(0D,U) , O_660F3A(05,U) ),
INST(kInstVpermilps , "vpermilps" , G(AvxRvmRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(XmmYmmMem)|O(Imm) , U , O_660F38(0C,U) , O_660F3A(04,U) ),
INST(kInstVpermpd , "vpermpd" , G(AvxRmi) , F(None) |F(W), 0 , O(Ymm) , O(YmmMem) , O(Imm) , U , O_660F3A(01,U)|L, U ),
@@ -2800,17 +2993,44 @@ const InstInfo _instInfo[] = {
INST(kInstVpgatherdq , "vpgatherdq" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , O_660F38(90,U) , U ),
INST(kInstVpgatherqd , "vpgatherqd" , G(AvxGatherEx) , F(None) , 0 , O(Xmm) , O(Mem) , O(Xmm) , U , O_660F38(91,U) , U ),
INST(kInstVpgatherqq , "vpgatherqq" , G(AvxGather) , F(None) |F(W), 0 , O(XmmYmm) , O(Mem) , O(XmmYmm) , U , O_660F38(91,U) , U ),
INST(kInstVphaddbd , "vphaddbd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(C2,U) , U ),
INST(kInstVphaddbq , "vphaddbq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(C3,U) , U ),
INST(kInstVphaddbw , "vphaddbw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(C1,U) , U ),
INST(kInstVphaddd , "vphaddd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(02,U) , U ),
INST(kInstVphadddq , "vphadddq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(CB,U) , U ),
INST(kInstVphaddsw , "vphaddsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(03,U) , U ),
INST(kInstVphaddubd , "vphaddubd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(D2,U) , U ),
INST(kInstVphaddubq , "vphaddubq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(D3,U) , U ),
INST(kInstVphaddubw , "vphaddubw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(D1,U) , U ),
INST(kInstVphaddudq , "vphaddudq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(DB,U) , U ),
INST(kInstVphadduwd , "vphadduwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(D6,U) , U ),
INST(kInstVphadduwq , "vphadduwq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(D7,U) , U ),
INST(kInstVphaddw , "vphaddw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(01,U) , U ),
INST(kInstVphaddwd , "vphaddwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(C6,U) , U ),
INST(kInstVphaddwq , "vphaddwq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(C7,U) , U ),
INST(kInstVphminposuw , "vphminposuw" , G(AvxRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_660F38(41,U) , U ),
INST(kInstVphsubbw , "vphsubbw" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(E1,U) , U ),
INST(kInstVphsubdq , "vphsubdq" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(E3,U) , U ),
INST(kInstVphsubd , "vphsubd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(06,U) , U ),
INST(kInstVphsubsw , "vphsubsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(07,U) , U ),
INST(kInstVphsubw , "vphsubw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(05,U) , U ),
INST(kInstVphsubwd , "vphsubwd" , G(XopRm) , F(None) , 0 , O(Xmm) , O(XmmMem) , U , U , O_00_M09(E2,U) , U ),
INST(kInstVpinsrb , "vpinsrb" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdwbMem) , O(Imm) , O_660F3A(20,U) , U ),
INST(kInstVpinsrd , "vpinsrd" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdMem) , O(Imm) , O_660F3A(22,U) , U ),
INST(kInstVpinsrq , "vpinsrq" , G(AvxRvmi) , F(None) |F(W), 0 , O(Xmm) , O(Xmm) , O(GqMem) , O(Imm) , O_660F3A(22,U) , U ),
INST(kInstVpinsrw , "vpinsrw" , G(AvxRvmi) , F(None) , 0 , O(Xmm) , O(Xmm) , O(GqdwMem) , O(Imm) , O_660F00(C4,U) , U ),
INST(kInstVpmacsdd , "vpmacsdd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(9E,U) , U ),
INST(kInstVpmacsdqh , "vpmacsdqh" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(9F,U) , U ),
INST(kInstVpmacsdql , "vpmacsdql" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(97,U) , U ),
INST(kInstVpmacssdd , "vpmacssdd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(8E,U) , U ),
INST(kInstVpmacssdqh , "vpmacssdqh" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(8F,U) , U ),
INST(kInstVpmacssdql , "vpmacssdql" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(87,U) , U ),
INST(kInstVpmacsswd , "vpmacsswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(86,U) , U ),
INST(kInstVpmacssww , "vpmacssww" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(85,U) , U ),
INST(kInstVpmacswd , "vpmacswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(96,U) , U ),
INST(kInstVpmacsww , "vpmacsww" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(95,U) , U ),
INST(kInstVpmadcsswd , "vpmadcsswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(A6,U) , U ),
INST(kInstVpmadcswd , "vpmadcswd" , G(XopRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(Xmm) , O_00_M08(B6,U) , U ),
INST(kInstVpmaddubsw , "vpmaddubsw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(04,U) , U ),
INST(kInstVpmaddwd , "vpmaddwd" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(F5,U) , U ),
INST(kInstVpmaskmovd , "vpmaskmovd" , G(AvxRvmMvr_P) , F(None) , 0 , O(XmmYmmMem) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(8C,U) , O_660F38(8E,U) ),
@@ -2848,7 +3068,20 @@ const InstInfo _instInfo[] = {
INST(kInstVpmullw , "vpmullw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(D5,U) , U ),
INST(kInstVpmuludq , "vpmuludq" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(F4,U) , U ),
INST(kInstVpor , "vpor" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(EB,U) , U ),
INST(kInstVpperm , "vpperm" , G(XopRvrmRvmr) , F(None) , 0 , O(Xmm) , O(Xmm) , O(XmmMem) , O(XmmMem) , O_00_M08(A3,U) , U ),
INST(kInstVprotb , "vprotb" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , O_00_M09(90,U) , O_00_M08(C0,U) ),
INST(kInstVprotd , "vprotd" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , O_00_M09(92,U) , O_00_M08(C2,U) ),
INST(kInstVprotq , "vprotq" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , O_00_M09(93,U) , O_00_M08(C3,U) ),
INST(kInstVprotw , "vprotw" , G(XopRvmRmi) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem)|O(Imm) , U , O_00_M09(91,U) , O_00_M08(C1,U) ),
INST(kInstVpsadbw , "vpsadbw" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F00(F6,U) , U ),
INST(kInstVpshab , "vpshab" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(98,U) , U ),
INST(kInstVpshad , "vpshad" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(9A,U) , U ),
INST(kInstVpshaq , "vpshaq" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(9B,U) , U ),
INST(kInstVpshaw , "vpshaw" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(99,U) , U ),
INST(kInstVpshlb , "vpshlb" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(94,U) , U ),
INST(kInstVpshld , "vpshld" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(96,U) , U ),
INST(kInstVpshlq , "vpshlq" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(97,U) , U ),
INST(kInstVpshlw , "vpshlw" , G(XopRvmRmv) , F(None) , 0 , O(Xmm) , O(XmmMem) , O(XmmMem) , U , O_00_M09(95,U) , U ),
INST(kInstVpshufb , "vpshufb" , G(AvxRvm_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmm) , O(XmmYmmMem) , U , O_660F38(00,U) , U ),
INST(kInstVpshufd , "vpshufd" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , O_660F00(70,U) , U ),
INST(kInstVpshufhw , "vpshufhw" , G(AvxRmi_P) , F(None) , 0 , O(XmmYmm) , O(XmmYmmMem) , O(Imm) , U , O_F30F00(70,U) , U ),
@@ -2932,6 +3165,14 @@ const InstInfo _instInfo[] = {
#undef O_00_X
#undef O_9B_X
#undef O_66_M09
#undef O_66_M08
#undef O_66_M03
#undef O_00_M09
#undef O_00_M08
#undef O_00_M03
#undef O_F30F3A
#undef O_F30F38
#undef O_F30F00
+180 -16
View File
@@ -1114,6 +1114,12 @@ ASMJIT_ENUM(kInstCode) {
kInstVfmadd231ps, // FMA3
kInstVfmadd231sd, // FMA3
kInstVfmadd231ss, // FMA3
kInstVfmaddpd, // FMA4
kInstVfmaddps, // FMA4
kInstVfmaddsd, // FMA4
kInstVfmaddss, // FMA4
kInstVfmaddsubpd, // FMA4
kInstVfmaddsubps, // FMA4
kInstVfmaddsub132pd, // FMA3
kInstVfmaddsub132ps, // FMA3
kInstVfmaddsub213pd, // FMA3
@@ -1138,6 +1144,12 @@ ASMJIT_ENUM(kInstCode) {
kInstVfmsubadd213ps, // FMA3
kInstVfmsubadd231pd, // FMA3
kInstVfmsubadd231ps, // FMA3
kInstVfmsubaddpd, // FMA4
kInstVfmsubaddps, // FMA4
kInstVfmsubpd, // FMA4
kInstVfmsubps, // FMA4
kInstVfmsubsd, // FMA4
kInstVfmsubss, // FMA4
kInstVfnmadd132pd, // FMA3
kInstVfnmadd132ps, // FMA3
kInstVfnmadd132sd, // FMA3
@@ -1150,6 +1162,10 @@ ASMJIT_ENUM(kInstCode) {
kInstVfnmadd231ps, // FMA3
kInstVfnmadd231sd, // FMA3
kInstVfnmadd231ss, // FMA3
kInstVfnmaddpd, // FMA4
kInstVfnmaddps, // FMA4
kInstVfnmaddsd, // FMA4
kInstVfnmaddss, // FMA4
kInstVfnmsub132pd, // FMA3
kInstVfnmsub132ps, // FMA3
kInstVfnmsub132sd, // FMA3
@@ -1162,6 +1178,14 @@ ASMJIT_ENUM(kInstCode) {
kInstVfnmsub231ps, // FMA3
kInstVfnmsub231sd, // FMA3
kInstVfnmsub231ss, // FMA3
kInstVfnmsubpd, // FMA4
kInstVfnmsubps, // FMA4
kInstVfnmsubsd, // FMA4
kInstVfnmsubss, // FMA4
kInstVfrczpd, // XOP
kInstVfrczps, // XOP
kInstVfrczsd, // XOP
kInstVfrczss, // XOP
kInstVgatherdpd, // AVX2
kInstVgatherdps, // AVX2
kInstVgatherqpd, // AVX2
@@ -1246,6 +1270,7 @@ ASMJIT_ENUM(kInstCode) {
kInstVpbroadcastq, // AVX2
kInstVpbroadcastw, // AVX2
kInstVpclmulqdq, // AVX+PCLMULQDQ
kInstVpcmov, // XOP
kInstVpcmpeqb, // AVX2
kInstVpcmpeqd, // AVX2
kInstVpcmpeqq, // AVX2
@@ -1258,9 +1283,19 @@ ASMJIT_ENUM(kInstCode) {
kInstVpcmpgtw, // AVX2
kInstVpcmpistri, // AVX
kInstVpcmpistrm, // AVX
kInstVpcomb, // XOP
kInstVpcomd, // XOP
kInstVpcomq, // XOP
kInstVpcomub, // XOP
kInstVpcomud, // XOP
kInstVpcomuq, // XOP
kInstVpcomuw, // XOP
kInstVpcomw, // XOP
kInstVperm2f128, // AVX
kInstVperm2i128, // AVX2
kInstVpermd, // AVX2
kInstVpermil2pd, // XOP
kInstVpermil2ps, // XOP
kInstVpermilpd, // AVX
kInstVpermilps, // AVX
kInstVpermpd, // AVX2
@@ -1274,17 +1309,44 @@ ASMJIT_ENUM(kInstCode) {
kInstVpgatherdq, // AVX2
kInstVpgatherqd, // AVX2
kInstVpgatherqq, // AVX2
kInstVphaddbd, // XOP
kInstVphaddbq, // XOP
kInstVphaddbw, // XOP
kInstVphaddd, // AVX2
kInstVphadddq, // XOP
kInstVphaddsw, // AVX2
kInstVphaddubd, // XOP
kInstVphaddubq, // XOP
kInstVphaddubw, // XOP
kInstVphaddudq, // XOP
kInstVphadduwd, // XOP
kInstVphadduwq, // XOP
kInstVphaddw, // AVX2
kInstVphaddwd, // XOP
kInstVphaddwq, // XOP
kInstVphminposuw, // AVX
kInstVphsubbw, // XOP
kInstVphsubdq, // XOP
kInstVphsubd, // AVX2
kInstVphsubsw, // AVX2
kInstVphsubw, // AVX2
kInstVphsubwd, // XOP
kInstVpinsrb, // AVX
kInstVpinsrd, // AVX
kInstVpinsrq, // AVX (x64 only)
kInstVpinsrw, // AVX
kInstVpmacsdd, // XOP
kInstVpmacsdqh, // XOP
kInstVpmacsdql, // XOP
kInstVpmacssdd, // XOP
kInstVpmacssdqh, // XOP
kInstVpmacssdql, // XOP
kInstVpmacsswd, // XOP
kInstVpmacssww, // XOP
kInstVpmacswd, // XOP
kInstVpmacsww, // XOP
kInstVpmadcsswd, // XOP
kInstVpmadcswd, // XOP
kInstVpmaddubsw, // AVX/AVX2
kInstVpmaddwd, // AVX/AVX2
kInstVpmaskmovd, // AVX2
@@ -1322,7 +1384,20 @@ ASMJIT_ENUM(kInstCode) {
kInstVpmullw, // AVX/AVX2
kInstVpmuludq, // AVX/AVX2
kInstVpor, // AVX/AVX2
kInstVpperm, // XOP
kInstVprotb, // XOP
kInstVprotd, // XOP
kInstVprotq, // XOP
kInstVprotw, // XOP
kInstVpsadbw, // AVX/AVX2
kInstVpshab, // XOP
kInstVpshad, // XOP
kInstVpshaq, // XOP
kInstVpshaw, // XOP
kInstVpshlb, // XOP
kInstVpshld, // XOP
kInstVpshlq, // XOP
kInstVpshlw, // XOP
kInstVpshufb, // AVX/AVX2
kInstVpshufd, // AVX/AVX2
kInstVpshufhw, // AVX/AVX2
@@ -1576,66 +1651,151 @@ ASMJIT_ENUM(kInstGroup) {
kInstGroupAvxM,
//! @brief AVX instruction encoded as 'MR'.
kInstGroupAvxMr,
//! @brief AVX instruction encoded as 'MR' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'MR'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxMr_P,
//! @brief AVX instruction encoded as 'MRI'.
kInstGroupAvxMri,
//! @brief AVX instruction encoded as 'MRI' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'MRI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxMri_P,
//! @brief AVX instruction encoded as 'RM'.
kInstGroupAvxRm,
//! @brief AVX instruction encoded as 'RM' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RM'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRm_P,
//! @brief AVX instruction encoded as 'RMI'.
kInstGroupAvxRmi,
//! @brief AVX instruction encoded as 'RMI' (propagates AVX.L if the instruction uses YMM register)..
//! @brief AVX instruction encoded as 'RMI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRmi_P,
//! @brief AVX instruction encoded as 'RVM'.
kInstGroupAvxRvm,
//! @brief AVX instruction encoded as 'RVM' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVM'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvm_P,
//! @brief AVX instruction encoded as 'RVMR'.
kInstGroupAvxRvmr,
//! @brief AVX instruction encoded as 'RVMR' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVMR'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvmr_P,
//! @brief AVX instruction encoded as 'RVMI'.
kInstGroupAvxRvmi,
//! @brief AVX instruction encoded as 'RVMI' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVMI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvmi_P,
//! @brief AVX instruction encoded as 'RMV'.
kInstGroupAvxRmv,
//! @brief AVX instruction encoded as 'RMVI'.
kInstGroupAvxRmvi,
//! @brief AVX instruction encoded as 'RM' or 'MR'.
kInstGroupAvxRmMr,
//! @brief AVX instruction encoded as 'RM' or 'MR' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RM' or 'MR'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRmMr_P,
//! @brief AVX instruction encoded as 'RVM' or 'RMI'.
kInstGroupAvxRvmRmi,
//! @brief AVX instruction encoded as 'RVM' or 'RMI' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVM' or 'RMI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvmRmi_P,
//! @brief AVX instruction encoded as 'RVM' or 'MR'.
kInstGroupAvxRvmMr,
//! @brief AVX instruction encoded as 'RVM' or 'MVR'.
kInstGroupAvxRvmMvr,
//! @brief AVX instruction encoded as 'RVM' or 'MVR' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVM' or 'MVR'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvmMvr_P,
//! @brief AVX instruction encoded as 'RVM' or 'VMI'.
kInstGroupAvxRvmVmi,
//! @brief AVX instruction encoded as 'RVM' or 'VMI' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'RVM' or 'VMI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxRvmVmi_P,
//! @brief AVX instruction encoded as 'VM'.
kInstGroupAvxVm,
//! @brief AVX instruction encoded as 'VMI'.
kInstGroupAvxVmi,
//! @brief AVX instruction encoded as 'VMI' (propagates AVX.L if the instruction uses YMM register).
//! @brief AVX instruction encoded as 'VMI'.
//!
//! Propagates AVX.L if the instruction uses YMM register.
kInstGroupAvxVmi_P,
//! @brief AVX instruction encoded as 'RVRM' or 'RVMR'.
kInstGroupAvxRvrmRvmr,
//! @brief AVX instruction encoded as 'RVRM' or 'RVMR'.
//!
//! Propagates AVX.L if the instruction uses YMM register).
kInstGroupAvxRvrmRvmr_P,
//! @brief Vmovss/Vmovsd.
kInstGroupAvxMovSsSd,
//! @brief AVX2 gather family instructions (VSIB).
kInstGroupAvxGather,
//! @brief AVX2 gather family instructions (VSIB), differs only in mem operand.
kInstGroupAvxGatherEx
kInstGroupAvxGatherEx,
//! @brief FMA4 supporting XMM in form [R, R, R/M, R/M].
kInstGroupFma4,
//! @brief FMA4 supporting XMM/YMM in form [R, R, R/M, R/M].
kInstGroupFma4_P,
//! @brief XOP instruction encoded as 'RM'.
kInstGroupXopRm,
//! @brief XOP instruction encoded as 'RM'.
//!
//! Propagates XOP.L if the instruction uses YMM register).
kInstGroupXopRm_P,
//! @brief XOP instruction encoded as 'RVM' or 'RMV'.
kInstGroupXopRvmRmv,
//! @brief XOP instruction encoded as 'RVM' or 'RMI'.
kInstGroupXopRvmRmi,
//! @brief XOP instruction encoded as 'RVMR'.
kInstGroupXopRvmr,
//! @brief XOP instruction encoded as 'RVMR'.
//!
//! Propagates XOP.L if the instruction uses YMM register.
kInstGroupXopRvmr_P,
//! @brief XOP instruction encoded as 'RVMI'.
kInstGroupXopRvmi,
//! @brief XOP instruction encoded as 'RVMI'.
//!
//! Propagates XOP.L if the instruction uses YMM register.
kInstGroupXopRvmi_P,
//! @brief XOP instruction encoded as 'RVRM' or 'RVMR'.
kInstGroupXopRvrmRvmr,
//! @brief XOP instruction encoded as 'RVRM' or 'RVMR'.
//!
//! Propagates XOP.L if the instruction uses YMM register).
kInstGroupXopRvrmRvmr_P
};
// ============================================================================
@@ -1646,7 +1806,7 @@ ASMJIT_ENUM(kInstGroup) {
//!
//! The schema was inspired by AVX/AVX2 features.
ASMJIT_ENUM(kInstOpCode) {
// 'MMMMM' field in AVX instruction.
// 'MMMMM' field in AVX/XOP instruction.
// 'OpCode' leading bytes in legacy encoding.
kInstOpCode_MM_Shift = 16,
kInstOpCode_MM_Mask = 0x0FU << kInstOpCode_MM_Shift,
@@ -1656,7 +1816,11 @@ ASMJIT_ENUM(kInstOpCode) {
kInstOpCode_MM_0F3A = 0x03U << kInstOpCode_MM_Shift,
kInstOpCode_MM_0F01 = 0x0FU << kInstOpCode_MM_Shift, // Ext/Not part of AVX.
// 'PP' field in AVX instruction.
kInstOpCode_MM_00011 = 0x03U << kInstOpCode_MM_Shift,
kInstOpCode_MM_01000 = 0x08U << kInstOpCode_MM_Shift,
kInstOpCode_MM_01001 = 0x09U << kInstOpCode_MM_Shift,
// 'PP' field in AVX/XOP instruction.
// 'Mandatory Prefix' in legacy encoding.
kInstOpCode_PP_Shift = 21,
kInstOpCode_PP_Mask = 0x07U << kInstOpCode_PP_Shift,
@@ -1666,7 +1830,7 @@ ASMJIT_ENUM(kInstOpCode) {
kInstOpCode_PP_F2 = 0x03U << kInstOpCode_PP_Shift,
kInstOpCode_PP_9B = 0x07U << kInstOpCode_PP_Shift, //Ext/Not part of AVX.
// 'L' field in AVX instruction.
// 'L' field in AVX/XOP instruction.
kInstOpCode_L_Shift = 24,
kInstOpCode_L_Mask = 0x01U << kInstOpCode_L_Shift,
kInstOpCode_L_False = 0x00U << kInstOpCode_L_Shift,