disasm avx2 new instructions (no gather yet)
This commit is contained in:
parent
a1b9a8e190
commit
e796e6a96c
@ -289,6 +289,10 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_
|
||||
entry = &(OPCODE_TABLE(entry)[insn.os_64 ? 2 : insn.os_32]);
|
||||
break;
|
||||
|
||||
case _GRPVEXW:
|
||||
entry = &(OPCODE_TABLE(entry)[insn.vex_w]);
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Internal disassembler error - unknown attribute !\n");
|
||||
return x86_insn(is_32, is_64);
|
||||
@ -391,11 +395,12 @@ unsigned disassembler::decode_vex(x86_insn *insn)
|
||||
if (b2 & 0x80) {
|
||||
insn->os_64 = 1;
|
||||
insn->os_32 = 1;
|
||||
insn->vex_w = 1;
|
||||
}
|
||||
}
|
||||
|
||||
insn->vex_override = 15 - ((b2 >> 3) & 0xf);
|
||||
insn->vex_vl = (b2 >> 2) & 0x1;
|
||||
insn->vex_vvv = 15 - ((b2 >> 3) & 0xf);
|
||||
insn->vex_l = (b2 >> 2) & 0x1;
|
||||
insn->b1 = fetch_byte() + 256 * vex_opcode_extension;
|
||||
return b2 & 0x3;
|
||||
}
|
||||
|
@ -405,7 +405,7 @@ void disassembler::Qq(const x86_insn *insn)
|
||||
// xmm/ymm register
|
||||
void disassembler::Udq(const x86_insn *insn)
|
||||
{
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_vl], insn->rm);
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->rm);
|
||||
}
|
||||
|
||||
void disassembler::Ups(const x86_insn *insn) { Udq(insn); }
|
||||
@ -413,7 +413,7 @@ void disassembler::Upd(const x86_insn *insn) { Udq(insn); }
|
||||
|
||||
void disassembler::Vq(const x86_insn *insn)
|
||||
{
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_vl], insn->nnn);
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->nnn);
|
||||
}
|
||||
|
||||
void disassembler::Vdq(const x86_insn *insn) { Vq(insn); }
|
||||
@ -426,17 +426,24 @@ void disassembler::VIb(const x86_insn *insn)
|
||||
{
|
||||
unsigned vreg = fetch_byte() >> 4;
|
||||
if (! insn->is_64) vreg &= 7;
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_vl], vreg);
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_l], vreg);
|
||||
}
|
||||
|
||||
void disassembler::Hdq(const x86_insn *insn)
|
||||
{
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_vl], insn->vex_override);
|
||||
dis_sprintf("%s%d", vector_reg_name[insn->vex_l], insn->vex_vvv);
|
||||
}
|
||||
|
||||
void disassembler::Hps(const x86_insn *insn) { Hdq(insn); }
|
||||
void disassembler::Hpd(const x86_insn *insn) { Hdq(insn); }
|
||||
|
||||
void disassembler::Wb(const x86_insn *insn)
|
||||
{
|
||||
if (insn->mod == 3) Udq(insn);
|
||||
else
|
||||
(this->*resolve_modrm)(insn, B_SIZE);
|
||||
}
|
||||
|
||||
void disassembler::Ww(const x86_insn *insn)
|
||||
{
|
||||
if (insn->mod == 3) Udq(insn);
|
||||
@ -462,7 +469,7 @@ void disassembler::Wdq(const x86_insn *insn)
|
||||
{
|
||||
if (insn->mod == 3) Udq(insn);
|
||||
else
|
||||
(this->*resolve_modrm)(insn, XMM_SIZE + insn->vex_vl);
|
||||
(this->*resolve_modrm)(insn, XMM_SIZE + insn->vex_l);
|
||||
}
|
||||
|
||||
void disassembler::Wsd(const x86_insn *insn) { Wq(insn); }
|
||||
@ -521,9 +528,9 @@ void disassembler::Md(const x86_insn *insn) { OP_M(insn, D_SIZE); }
|
||||
void disassembler::Mq(const x86_insn *insn) { OP_M(insn, Q_SIZE); }
|
||||
void disassembler::Mt(const x86_insn *insn) { OP_M(insn, T_SIZE); }
|
||||
|
||||
void disassembler::Mdq(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_vl); }
|
||||
void disassembler::Mps(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_vl); }
|
||||
void disassembler::Mpd(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_vl); }
|
||||
void disassembler::Mdq(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); }
|
||||
void disassembler::Mps(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); }
|
||||
void disassembler::Mpd(const x86_insn *insn) { OP_M(insn, XMM_SIZE + insn->vex_l); }
|
||||
void disassembler::Mss(const x86_insn *insn) { OP_M(insn, D_SIZE); }
|
||||
void disassembler::Msd(const x86_insn *insn) { OP_M(insn, Q_SIZE); }
|
||||
|
||||
@ -615,7 +622,7 @@ void disassembler::OP_sY(const x86_insn *insn, unsigned size)
|
||||
}
|
||||
|
||||
void disassembler::sYq(const x86_insn *insn) { OP_sY(insn, Q_SIZE); }
|
||||
void disassembler::sYdq(const x86_insn *insn) { OP_sY(insn, XMM_SIZE + insn->vex_vl); }
|
||||
void disassembler::sYdq(const x86_insn *insn) { OP_sY(insn, XMM_SIZE + insn->vex_l); }
|
||||
|
||||
#define BX_JUMP_TARGET_NOT_REQ ((bx_address)(-1))
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#define _GRPRM 9
|
||||
#define _GRP3BOP 10
|
||||
#define _GRP64B 11
|
||||
#define _GRPVEXW 12
|
||||
|
||||
/* ************************************************************************ */
|
||||
#define GRPSSE(n) _GRPSSE, BxDisasmGroupSSE_##n
|
||||
@ -45,6 +46,7 @@
|
||||
#define GRP3DNOW _GRP3DNOW, BxDisasm3DNowGroup
|
||||
#define GR3BTAB(n) _GRP3BOP, BxDisasm3ByteOpTable##n
|
||||
#define GR64BIT(n) _GRP64B, BxDisasmGrpOs64B_##n
|
||||
#define GRPVEXW(n) _GRPVEXW, BxDisasmGrpVexW_##n
|
||||
/* ************************************************************************ */
|
||||
|
||||
/* ************************************************************************ */
|
||||
@ -139,6 +141,7 @@
|
||||
#define Upd &disassembler::Upd
|
||||
#define Udq &disassembler::Udq
|
||||
|
||||
#define Wb &disassembler::Wb
|
||||
#define Ww &disassembler::Ww
|
||||
#define Wd &disassembler::Wd
|
||||
#define Wq &disassembler::Wq
|
||||
|
@ -407,16 +407,44 @@ static BxDisasmOpcodeTable_t BxDisasmGroupModAVXG15[2] = {
|
||||
/* M */ { GRPN(AVXG15M) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_AVX0f3a16[3] = {
|
||||
/* 16 */ { GRPSSE66(Ia_vpextrd_Ed_Vdq_Ib) },
|
||||
/* 32 */ { GRPSSE66(Ia_vpextrd_Ed_Vdq_Ib) },
|
||||
/* 64 */ { GRPSSE66(Ia_vpextrq_Eq_Vdq_Ib) }
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a16[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vpextrd_Ed_Vdq_Ib) },
|
||||
/* 1 */ { GRPSSE66(Ia_vpextrq_Eq_Vdq_Ib) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpOs64B_AVX0f3a22[3] = {
|
||||
/* 16 */ { GRPSSE66(Ia_vpinsrd_Vdq_Hdq_Ed_Ib) },
|
||||
/* 32 */ { GRPSSE66(Ia_vpinsrd_Vdq_Hdq_Ed_Ib) },
|
||||
/* 64 */ { GRPSSE66(Ia_vpinsrq_Vdq_Hdq_Eq_Ib) }
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a22[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vpinsrd_Vdq_Hdq_Ed_Ib) },
|
||||
/* 1 */ { GRPSSE66(Ia_vpinsrq_Vdq_Hdq_Eq_Ib) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a00[2] = {
|
||||
/* 0 */ { 0, &Ia_Invalid },
|
||||
/* 1 */ { GRPSSE66(Ia_vpermq_Vdq_Wdq_Ib) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3a01[2] = {
|
||||
/* 0 */ { 0, &Ia_Invalid },
|
||||
/* 1 */ { GRPSSE66(Ia_vpermpd_Vpd_Wpd_Ib) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3845[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vpsrlvd_Vdq_Hdq_Wdq) },
|
||||
/* 1 */ { GRPSSE66(Ia_vpsrlvq_Vdq_Hdq_Wdq) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f3847[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vpsllvd_Vdq_Hdq_Wdq) },
|
||||
/* 1 */ { GRPSSE66(Ia_vpsllvq_Vdq_Hdq_Wdq) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388c[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vmaskmovd_Vdq_Hdq_Mdq) },
|
||||
/* 1 */ { GRPSSE66(Ia_vmaskmovq_Vdq_Hdq_Mdq) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmGrpVexW_0f388e[2] = {
|
||||
/* 0 */ { GRPSSE66(Ia_vmaskmovq_Mdq_Hdq_Vdq) },
|
||||
/* 1 */ { GRPSSE66(Ia_vmaskmovq_Mdq_Hdq_Vdq) }
|
||||
};
|
||||
|
||||
static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
@ -701,10 +729,10 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 13 */ { GRPSSE66(Ia_vcvtph2ps_Vps_Wq) },
|
||||
/* 14 */ { 0, &Ia_Invalid },
|
||||
/* 15 */ { 0, &Ia_Invalid },
|
||||
/* 16 */ { 0, &Ia_Invalid },
|
||||
/* 16 */ { GRPSSE66(Ia_vpermps_Vps_Hps_Wps) },
|
||||
/* 17 */ { GRPSSE66(Ia_vptest_Vdq_Wdq) },
|
||||
/* 18 */ { GRPSSE66(Ia_vbroadcastss_Vps_Mss) },
|
||||
/* 19 */ { GRPSSE66(Ia_vbroadcastsd_Vpd_Msd) },
|
||||
/* 18 */ { GRPSSE66(Ia_vbroadcastss_Vps_Wss) },
|
||||
/* 19 */ { GRPSSE66(Ia_vbroadcastsd_Vpd_Wsd) },
|
||||
/* 1A */ { GRPSSE66(Ia_vbroadcastf128_Vdq_Mdq) },
|
||||
/* 1B */ { 0, &Ia_Invalid },
|
||||
/* 1C */ { GRPSSE66(Ia_vpabsb_Vdq_Hdq_Wdq) },
|
||||
@ -733,7 +761,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 33 */ { GRPSSE66(Ia_vpmovzxwd_Vdq_Wq) },
|
||||
/* 34 */ { GRPSSE66(Ia_vpmovzxwq_Vdq_Wd) },
|
||||
/* 35 */ { GRPSSE66(Ia_vpmovzxdq_Vdq_Wq) },
|
||||
/* 36 */ { 0, &Ia_Invalid },
|
||||
/* 36 */ { GRPSSE66(Ia_vpermd_Vdq_Hdq_Wdq) },
|
||||
/* 37 */ { GRPSSE66(Ia_vpcmpgtq_Vdq_Hdq_Wdq) },
|
||||
/* 38 */ { GRPSSE66(Ia_vpminsb_Vdq_Hdq_Wdq) },
|
||||
/* 39 */ { GRPSSE66(Ia_vpminsd_Vdq_Hdq_Wdq) },
|
||||
@ -748,9 +776,9 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 42 */ { 0, &Ia_Invalid },
|
||||
/* 43 */ { 0, &Ia_Invalid },
|
||||
/* 44 */ { 0, &Ia_Invalid },
|
||||
/* 45 */ { 0, &Ia_Invalid },
|
||||
/* 46 */ { 0, &Ia_Invalid },
|
||||
/* 47 */ { 0, &Ia_Invalid },
|
||||
/* 45 */ { GRPVEXW(0f3845) },
|
||||
/* 46 */ { GRPSSE66(Ia_vpsravd_Vdq_Hdq_Wdq) },
|
||||
/* 47 */ { GRPVEXW(0f3847) },
|
||||
/* 48 */ { 0, &Ia_Invalid },
|
||||
/* 49 */ { 0, &Ia_Invalid },
|
||||
/* 4A */ { 0, &Ia_Invalid },
|
||||
@ -767,9 +795,9 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 55 */ { 0, &Ia_Invalid },
|
||||
/* 56 */ { 0, &Ia_Invalid },
|
||||
/* 57 */ { 0, &Ia_Invalid },
|
||||
/* 58 */ { 0, &Ia_Invalid },
|
||||
/* 59 */ { 0, &Ia_Invalid },
|
||||
/* 5A */ { 0, &Ia_Invalid },
|
||||
/* 58 */ { GRPSSE66(Ia_vpbroadcastd_Vdq_Wd) },
|
||||
/* 59 */ { GRPSSE66(Ia_vpbroadcastq_Vdq_Wq) },
|
||||
/* 5A */ { GRPSSE66(Ia_vbroadcasti128_Vdq_Mdq) },
|
||||
/* 5B */ { 0, &Ia_Invalid },
|
||||
/* 5C */ { 0, &Ia_Invalid },
|
||||
/* 5D */ { 0, &Ia_Invalid },
|
||||
@ -799,8 +827,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 75 */ { 0, &Ia_Invalid },
|
||||
/* 76 */ { 0, &Ia_Invalid },
|
||||
/* 77 */ { 0, &Ia_Invalid },
|
||||
/* 78 */ { 0, &Ia_Invalid },
|
||||
/* 79 */ { 0, &Ia_Invalid },
|
||||
/* 78 */ { GRPSSE66(Ia_vpbroadcastb_Vdq_Wb) },
|
||||
/* 79 */ { GRPSSE66(Ia_vpbroadcastw_Vdq_Ww) },
|
||||
/* 7A */ { 0, &Ia_Invalid },
|
||||
/* 7B */ { 0, &Ia_Invalid },
|
||||
/* 7C */ { 0, &Ia_Invalid },
|
||||
@ -819,9 +847,9 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 89 */ { 0, &Ia_Invalid },
|
||||
/* 8A */ { 0, &Ia_Invalid },
|
||||
/* 8B */ { 0, &Ia_Invalid },
|
||||
/* 8C */ { 0, &Ia_Invalid },
|
||||
/* 8C */ { GRPVEXW(0f388c) },
|
||||
/* 8D */ { 0, &Ia_Invalid },
|
||||
/* 8E */ { 0, &Ia_Invalid },
|
||||
/* 8E */ { GRPVEXW(0f388e) },
|
||||
/* 8F */ { 0, &Ia_Invalid },
|
||||
/* 90 */ { 0, &Ia_Invalid },
|
||||
/* 91 */ { 0, &Ia_Invalid },
|
||||
@ -937,9 +965,9 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* FF */ { 0, &Ia_Invalid },
|
||||
|
||||
// 256 entries for VEX-encoded 0x0F 0x3A opcodes
|
||||
/* 00 */ { 0, &Ia_Invalid },
|
||||
/* 01 */ { 0, &Ia_Invalid },
|
||||
/* 02 */ { 0, &Ia_Invalid },
|
||||
/* 00 */ { GRPVEXW(0f3a00) },
|
||||
/* 01 */ { GRPVEXW(0f3a01) },
|
||||
/* 02 */ { GRPSSE66(Ia_vpblendd_Vdq_Hdq_Wdq_Ib) },
|
||||
/* 03 */ { 0, &Ia_Invalid },
|
||||
/* 04 */ { GRPSSE66(Ia_vpermilps_Vps_Wps_Ib) },
|
||||
/* 05 */ { GRPSSE66(Ia_vpermilpd_Vpd_Wpd_Ib) },
|
||||
@ -959,7 +987,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 13 */ { 0, &Ia_Invalid },
|
||||
/* 14 */ { GRPSSE66(Ia_vpextrb_Ebd_Vdq_Ib) },
|
||||
/* 15 */ { GRPSSE66(Ia_vpextrw_Ewd_Vdq_Ib) },
|
||||
/* 16 */ { GR64BIT(AVX0f3a16) },
|
||||
/* 16 */ { GRPVEXW(0f3a16) },
|
||||
/* 17 */ { GRPSSE66(Ia_vextractps_Ed_Vdq_Ib) },
|
||||
/* 18 */ { GRPSSE66(Ia_vinsertf128_Vdq_Hdq_Wdq_Ib) },
|
||||
/* 19 */ { GRPSSE66(Ia_vextractf128_Wdq_Vdq_Ib) },
|
||||
@ -971,7 +999,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 1F */ { 0, &Ia_Invalid },
|
||||
/* 20 */ { GRPSSE66(Ia_vpinsrb_Vdq_Hdq_Ed_Ib) },
|
||||
/* 21 */ { GRPSSE66(Ia_vinsertps_Vps_Hps_Wss_Ib) },
|
||||
/* 22 */ { GR64BIT(AVX0f3a22) },
|
||||
/* 22 */ { GRPVEXW(0f3a22) },
|
||||
/* 23 */ { 0, &Ia_Invalid },
|
||||
/* 24 */ { 0, &Ia_Invalid },
|
||||
/* 25 */ { 0, &Ia_Invalid },
|
||||
@ -993,8 +1021,8 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 35 */ { 0, &Ia_Invalid },
|
||||
/* 36 */ { 0, &Ia_Invalid },
|
||||
/* 37 */ { 0, &Ia_Invalid },
|
||||
/* 38 */ { 0, &Ia_Invalid },
|
||||
/* 39 */ { 0, &Ia_Invalid },
|
||||
/* 38 */ { GRPSSE66(Ia_vinserti128_Vdq_Hdq_Wdq_Ib) },
|
||||
/* 39 */ { GRPSSE66(Ia_vextracti128_Wdq_Vdq_Ib) },
|
||||
/* 3A */ { 0, &Ia_Invalid },
|
||||
/* 3B */ { 0, &Ia_Invalid },
|
||||
/* 3C */ { 0, &Ia_Invalid },
|
||||
@ -1007,7 +1035,7 @@ static BxDisasmOpcodeTable_t BxDisasmOpcodesAVX[256*3] = {
|
||||
/* 43 */ { 0, &Ia_Invalid },
|
||||
/* 44 */ { GRPSSE66(Ia_vpclmulqdq_Vdq_Hdq_Wdq_Ib) },
|
||||
/* 45 */ { 0, &Ia_Invalid },
|
||||
/* 46 */ { 0, &Ia_Invalid },
|
||||
/* 46 */ { GRPSSE66(Ia_vperm2i128_Vdq_Hdq_Wdq_Ib) },
|
||||
/* 47 */ { 0, &Ia_Invalid },
|
||||
/* 48 */ { 0, &Ia_Invalid },
|
||||
/* 49 */ { 0, &Ia_Invalid },
|
||||
|
@ -156,7 +156,7 @@ public:
|
||||
|
||||
#define BX_AVX_VL128 0
|
||||
#define BX_AVX_VL256 1
|
||||
Bit8u vex_override, vex_vl;
|
||||
Bit8u vex_vvv, vex_l, vex_w;
|
||||
int is_vex; // 0 - no VEX used, 1 - VEX is used, 2 - invalid VEX
|
||||
Bit8u modrm, mod, nnn, rm;
|
||||
Bit8u sib, scale, index, base;
|
||||
@ -191,8 +191,9 @@ BX_CPP_INLINE x86_insn::x86_insn(bx_bool is32, bx_bool is64)
|
||||
b1 = 0;
|
||||
|
||||
is_vex = 0;
|
||||
vex_override = 0;
|
||||
vex_vl = BX_AVX_VL128;
|
||||
vex_vvv = 0;
|
||||
vex_l = BX_AVX_VL128;
|
||||
vex_w = 0;
|
||||
modrm = mod = nnn = rm = 0;
|
||||
sib = scale = index = base = 0;
|
||||
displacement.displ32 = 0;
|
||||
@ -518,6 +519,7 @@ public:
|
||||
void VIb(const x86_insn *insn);
|
||||
|
||||
// xmm/ymm register or memory operand
|
||||
void Wb(const x86_insn *insn);
|
||||
void Ww(const x86_insn *insn);
|
||||
void Wd(const x86_insn *insn);
|
||||
void Wq(const x86_insn *insn);
|
||||
|
@ -936,12 +936,12 @@ Ia_popw_RX = { "pop", "popw", RX, XX, XX, XX, 0 },
|
||||
Ia_popw_SS = { "pop", "popw", SS, XX, XX, XX, 0 },
|
||||
Ia_por_Pq_Qq = { "por", "por", Pq, Qq, XX, XX, IA_MMX },
|
||||
Ia_por_Vdq_Wdq = { "por", "por", Vdq, Wdq, XX, XX, IA_SSE2 },
|
||||
Ia_prefetchw = { "prefetchw", "prefetchw", Mb, XX, XX, XX, 0 },
|
||||
Ia_prefetch_hint = { "prefetch_hint", "prefetch_hint", Mb, XX, XX, XX, IA_SSE },
|
||||
Ia_prefetchnta = { "prefetchnta", "prefetchnta", Mb, XX, XX, XX, IA_SSE },
|
||||
Ia_prefetcht0 = { "prefetcht0", "prefetcht0", Mb, XX, XX, XX, IA_SSE },
|
||||
Ia_prefetcht1 = { "prefetcht1", "prefetcht1", Mb, XX, XX, XX, IA_SSE },
|
||||
Ia_prefetcht2 = { "prefetcht2", "prefetcht2", Mb, XX, XX, XX, IA_SSE },
|
||||
Ia_prefetchw = { "prefetchw", "prefetchw", Mb, XX, XX, XX, 0 },
|
||||
Ia_prefix_asize = { "asize", "asize", XX, XX, XX, XX, 0 },
|
||||
Ia_prefix_cs = { "cs", "cs", XX, XX, XX, XX, 0 },
|
||||
Ia_prefix_ds = { "ds", "ds", XX, XX, XX, XX, 0 },
|
||||
@ -1310,8 +1310,9 @@ Ia_vblendps_Vps_Hps_Wps_Ib = { "vblendps", "vblendps", Vps, Hps, Wps, Ib, IA_AVX
|
||||
Ia_vblendvpd_Vpd_Hpd_Wpd_Ib = { "vblendvpd", "vblendvpd", Vpd, Hpd, Wpd, VIb, IA_AVX },
|
||||
Ia_vblendvps_Vps_Hps_Wps_Ib = { "vblendvps", "vblendvps", Vps, Hps, Wps, VIb, IA_AVX },
|
||||
Ia_vbroadcastf128_Vdq_Mdq = { "vbroadcastf128", "vbroadcastf128", Vdq, Mdq, XX, XX, IA_AVX },
|
||||
Ia_vbroadcastsd_Vpd_Msd = { "vbroadcastsd", "vbroadcastsd", Vpd, Msd, XX, XX, IA_AVX },
|
||||
Ia_vbroadcastss_Vps_Mss = { "vbroadcastss", "vbroadcastss", Vps, Mss, XX, XX, IA_AVX },
|
||||
Ia_vbroadcasti128_Vdq_Mdq = { "vbroadcasti128", "vbroadcasti128", Vdq, Mdq, XX, XX, IA_AVX2 },
|
||||
Ia_vbroadcastsd_Vpd_Wsd = { "vbroadcastsd", "vbroadcastsd", Vpd, Wsd, XX, XX, IA_AVX },
|
||||
Ia_vbroadcastss_Vps_Wss = { "vbroadcastss", "vbroadcastss", Vps, Wss, XX, XX, IA_AVX },
|
||||
Ia_vcmppd_Vpd_Hpd_Wpd_Ib = { "vcmppd", "vcmppd", Vpd, Hpd, Wpd, Ib, IA_AVX },
|
||||
Ia_vcmpps_Vps_Hps_Wps_Ib = { "vcmpps", "vcmpps", Vps, Hps, Wps, Ib, IA_AVX },
|
||||
Ia_vcmpsd_Vsd_Hpd_Wsd_Ib = { "vcmpsd", "vcmpsd", Vsd, Hpd, Wsd, Ib, IA_AVX },
|
||||
@ -1345,20 +1346,26 @@ Ia_vdpps_Vps_Hps_Wps_Ib = { "vdpps", "vdpps", Vps, Hps, Wps, Ib, IA_AVX },
|
||||
Ia_verr = { "verr", "verr", Ew, XX, XX, XX, 0 },
|
||||
Ia_verw = { "verw", "verw", Ew, XX, XX, XX, 0 },
|
||||
Ia_vextractf128_Wdq_Vdq_Ib = { "vextractf128", "vextractf128", Wdq, Vdq, Ib, XX, IA_AVX },
|
||||
Ia_vextracti128_Wdq_Vdq_Ib = { "vextracti128", "vextracti128", Wdq, Vdq, Ib, XX, IA_AVX2 },
|
||||
Ia_vextractps_Ed_Vdq_Ib = { "vextractps", "vextractps", Ed, Vdq, Ib, XX, IA_AVX },
|
||||
Ia_vhaddpd_Vpd_Hpd_Wpd = { "vhaddpd", "vhaddpd", Vpd, Hpd, Wpd, XX, IA_AVX },
|
||||
Ia_vhaddps_Vps_Hps_Wps = { "vhaddps", "vhaddps", Vps, Hps, Wps, XX, IA_AVX },
|
||||
Ia_vhsubpd_Vpd_Hpd_Wpd = { "vhsubpd", "vhsubpd", Vpd, Hpd, Wpd, XX, IA_AVX },
|
||||
Ia_vhsubps_Vps_Hps_Wps = { "vhsubps", "vhsubps", Vps, Hps, Wps, XX, IA_AVX },
|
||||
Ia_vinsertf128_Vdq_Hdq_Wdq_Ib = { "vinsertf128", "vinsertf128", Vdq, Hdq, Wdq, Ib, IA_AVX },
|
||||
Ia_vinserti128_Vdq_Hdq_Wdq_Ib = { "vinserti128", "vinserti128", Vdq, Hdq, Wdq, Ib, IA_AVX2 },
|
||||
Ia_vinsertps_Vps_Hps_Wss_Ib = { "vinsertps", "vinsertps", Vps, Hps, Wss, Ib, IA_AVX },
|
||||
Ia_vlddqu_Vdq_Mdq = { "vlddqu", "vlddqu", Vdq, Mdq, XX, XX, IA_AVX },
|
||||
Ia_vldmxcsr = { "vldmxcsr", "vldmxcsr", Md, XX, XX, XX, IA_AVX },
|
||||
Ia_vmaskmovd_Mdq_Hdq_Vdq = { "vmaskmovd", "vmaskmovd", Mdq, Hdq, Vdq, XX, IA_AVX2 },
|
||||
Ia_vmaskmovd_Vdq_Hdq_Mdq = { "vmaskmovd", "vmaskmovd", Vdq, Hdq, Mdq, XX, IA_AVX2 },
|
||||
Ia_vmaskmovdqu_Vdq_Udq = { "vmaskmovdqu", "vmaskmovdqu", Vdq, Udq, XX, XX, IA_AVX },
|
||||
Ia_vmaskmovpd_Mpd_Hpd_Vpd = { "vmaskmovpd", "vmaskmovpd", Mpd, Hpd, Vpd, XX, IA_AVX },
|
||||
Ia_vmaskmovpd_Vpd_Hpd_Mpd = { "vmaskmovpd", "vmaskmovpd", Vpd, Hpd, Mpd, XX, IA_AVX },
|
||||
Ia_vmaskmovps_Mps_Hps_Vps = { "vmaskmovps", "vmaskmovps", Mps, Hps, Vps, XX, IA_AVX },
|
||||
Ia_vmaskmovps_Vps_Hps_Mps = { "vmaskmovps", "vmaskmovps", Vps, Hps, Mps, XX, IA_AVX },
|
||||
Ia_vmaskmovq_Mdq_Hdq_Vdq = { "vmaskmovq", "vmaskmovq", Mdq, Hdq, Vdq, XX, IA_AVX2 },
|
||||
Ia_vmaskmovq_Vdq_Hdq_Mdq = { "vmaskmovq", "vmaskmovq", Vdq, Hdq, Mdq, XX, IA_AVX2 },
|
||||
Ia_vmaxpd_Vpd_Hpd_Wpd = { "vmaxpd", "vmaxpd", Vpd, Hpd, Wpd, XX, IA_AVX },
|
||||
Ia_vmaxps_Vps_Hps_Wps = { "vmaxps", "vmaxps", Vps, Hps, Wps, XX, IA_AVX },
|
||||
Ia_vmaxsd_Vsd_Hpd_Wsd = { "vmaxsd", "vmaxsd", Vsd, Hpd, Wsd, XX, IA_AVX },
|
||||
@ -1449,8 +1456,13 @@ Ia_vpand_Vdq_Hdq_Wdq = { "vpand", "vpand", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpandn_Vdq_Hdq_Wdq = { "vpandn", "vpandn", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpavgb_Vdq_Hdq_Wdq = { "vpavgb", "vpavgb", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpavgw_Vdq_Hdq_Wdq = { "vpavgw", "vpavgw", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpblendd_Vdq_Hdq_Wdq_Ib = { "vpblendd", "vpblendd", Vdq, Hdq, Wdq, Ib, IA_AVX2 },
|
||||
Ia_vpblendvb_Vdq_Hdq_Wdq_Ib = { "vpblendvb", "vpblendvb", Vdq, Hdq, Wdq, VIb, IA_AVX },
|
||||
Ia_vpblendw_Vdq_Hdq_Wdq_Ib = { "vpblendw", "vpblendw", Vdq, Hdq, Wdq, Ib, IA_AVX },
|
||||
Ia_vpbroadcastb_Vdq_Wb = { "vpbroadcastb", "vpbroadcastb", Vdq, Wb, XX, XX, IA_AVX2 },
|
||||
Ia_vpbroadcastd_Vdq_Wd = { "vpbroadcastd", "vpbroadcastd", Vdq, Wd, XX, XX, IA_AVX2 },
|
||||
Ia_vpbroadcastq_Vdq_Wq = { "vpbroadcastq", "vpbroadcastq", Vdq, Wq, XX, XX, IA_AVX2 },
|
||||
Ia_vpbroadcastw_Vdq_Ww = { "vpbroadcastw", "vpbroadcastw", Vdq, Ww, XX, XX, IA_AVX2 },
|
||||
Ia_vpclmulqdq_Vdq_Hdq_Wdq_Ib = { "vpclmulqdq", "vpclmulqdq", Vdq, Hdq, Wdq, Ib, IA_AVX },
|
||||
Ia_vpcmpeqb_Vdq_Hdq_Wdq = { "vpcmpeqb", "vpcmpeqb", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpcmpeqd_Vdq_Hdq_Wdq = { "vpcmpeqd", "vpcmpeqd", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
@ -1465,10 +1477,15 @@ Ia_vpcmpgtw_Vdq_Hdq_Wdq = { "vpcmpgtw", "vpcmpgtw", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpcmpistri_Vdq_Wdq_Ib = { "vpcmpistri", "vpcmpistri", Vdq, Wdq, Ib, XX, IA_AVX },
|
||||
Ia_vpcmpistrm_Vdq_Wdq_Ib = { "vpcmpistrm", "vpcmpistrm", Vdq, Wdq, Ib, XX, IA_AVX },
|
||||
Ia_vperm2f128_Vdq_Hdq_Wdq_Ib = { "vperm2f128", "vperm2f128", Vdq, Hdq, Wdq, Ib, IA_AVX },
|
||||
Ia_vperm2i128_Vdq_Hdq_Wdq_Ib = { "vperm2128", "vperm2i128", Vdq, Hdq, Wdq, Ib, IA_AVX2 },
|
||||
Ia_vpermd_Vdq_Hdq_Wdq = { "vpermd", "vpermd", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpermilpd_Vpd_Hpd_Wpd = { "vpermilpd", "vpermilpd", Vpd, Hpd, Wpd, XX, IA_AVX },
|
||||
Ia_vpermilpd_Vpd_Wpd_Ib = { "vpermilpd", "vpermilpd", Vpd, Wpd, Ib, XX, IA_AVX },
|
||||
Ia_vpermilps_Vps_Hps_Wps = { "vpermilps", "vpermilps", Vps, Hps, Wps, XX, IA_AVX },
|
||||
Ia_vpermilps_Vps_Wps_Ib = { "vpermilps", "vpermilps", Vps, Wps, Ib, XX, IA_AVX },
|
||||
Ia_vpermpd_Vpd_Wpd_Ib = { "vpermpd", "vpermpd", Vpd, Wpd, Ib, XX, IA_AVX2 },
|
||||
Ia_vpermps_Vps_Hps_Wps = { "vpermps", "vpermps", Vps, Hps, Wps, XX, IA_AVX2 },
|
||||
Ia_vpermq_Vdq_Wdq_Ib = { "vpermq", "vpermq", Vdq, Wdq, Ib, XX, IA_AVX2 },
|
||||
Ia_vpextrb_Ebd_Vdq_Ib = { "vpextrb", "vpextrb", Ebd, Vdq, Ib, XX, IA_AVX },
|
||||
Ia_vpextrd_Ed_Vdq_Ib = { "vpextrd", "vpextrd", Ed, Vdq, Ib, XX, IA_AVX },
|
||||
Ia_vpextrq_Eq_Vdq_Ib = { "vpextrq", "vpextrq", Eq, Vdq, Ib, XX, IA_AVX },
|
||||
@ -1533,10 +1550,13 @@ Ia_vpslld_Vdq_Hdq_Wdq = { "vpslld", "vpslld", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpslldq_Hdq_Udq_Ib = { "vpslldq", "vpslldq", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsllq_Hdq_Udq_Ib = { "vpsllq", "vpsllq", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsllq_Vdq_Hdq_Wdq = { "vpsllq", "vpsllq", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsllvd_Vdq_Hdq_Wdq = { "vpsllvd", "vpsllvd", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpsllvq_Vdq_Hdq_Wdq = { "vpsllvq", "vpsllvq", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpsllw_Hdq_Udq_Ib = { "vpsllw", "vpsllw", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsllw_Vdq_Hdq_Wdq = { "vpsllw", "vpsllw", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsrad_Hdq_Udq_Ib = { "vpsrad", "vpsrad", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsrad_Vdq_Hdq_Wdq = { "vpsrad", "vpsrad", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsravd_Vdq_Hdq_Wdq = { "vpsravd", "vpsravd", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpsraw_Hdq_Udq_Ib = { "vpsraw", "vpsraw", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsraw_Vdq_Hdq_Wdq = { "vpsraw", "vpsraw", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsrld_Hdq_Udq_Ib = { "vpsrld", "vpsrld", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
@ -1544,6 +1564,8 @@ Ia_vpsrld_Vdq_Hdq_Wdq = { "vpsrld", "vpsrld", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsrldq_Hdq_Udq_Ib = { "vpsrldq", "vpsrldq", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsrlq_Hdq_Udq_Ib = { "vpsrlq", "vpsrlq", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsrlq_Vdq_Hdq_Wdq = { "vpsrlq", "vpsrlq", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsrlvd_Vdq_Hdq_Wdq = { "vpsrlvd", "vpsrlvd", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpsrlvq_Vdq_Hdq_Wdq = { "vpsrlvq", "vpsrlvq", Vdq, Hdq, Wdq, XX, IA_AVX2 },
|
||||
Ia_vpsrlw_Hdq_Udq_Ib = { "vpsrlw", "vpsrlw", Hdq, Udq, Ib, XX, IA_AVX },
|
||||
Ia_vpsrlw_Vdq_Hdq_Wdq = { "vpsrlw", "vpsrlw", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
Ia_vpsubb_Vdq_Hdq_Wdq = { "vpsubb", "vpsubb", Vdq, Hdq, Wdq, XX, IA_AVX },
|
||||
|
Loading…
Reference in New Issue
Block a user