add vpmul{dq,udq,hrsw, huw, hw, ld, lq, lw}
This commit is contained in:
parent
2c3247db0d
commit
b94e25f335
5 changed files with 43 additions and 16 deletions
|
@ -196,6 +196,8 @@ void putX_X_XM_IMM()
|
||||||
|
|
||||||
{ 0xEF, "vpxord", T_66 | T_0F | T_MUST_EVEX | T_YMM | T_EW0 | T_B32, false },
|
{ 0xEF, "vpxord", T_66 | T_0F | T_MUST_EVEX | T_YMM | T_EW0 | T_B32, false },
|
||||||
{ 0xEF, "vpxorq", T_66 | T_0F | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
{ 0xEF, "vpxorq", T_66 | T_0F | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
||||||
|
|
||||||
|
{ 0x40, "vpmullq", T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
||||||
};
|
};
|
||||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||||
const Tbl *p = &tbl[i];
|
const Tbl *p = &tbl[i];
|
||||||
|
|
|
@ -1105,14 +1105,14 @@ void put()
|
||||||
{ 0x3A, "pminuw", T_0F38 | T_66 | T_YMM | T_EVEX, false, true },
|
{ 0x3A, "pminuw", T_0F38 | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
{ 0x3B, "pminud", T_0F38 | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true },
|
{ 0x3B, "pminud", T_0F38 | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true },
|
||||||
|
|
||||||
{ 0xE4, "pmulhuw", T_0F | T_66 | T_YMM, false, true },
|
{ 0xE4, "pmulhuw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
{ 0x0B, "pmulhrsw", T_0F38 | T_66 | T_YMM, false, true },
|
{ 0x0B, "pmulhrsw", T_0F38 | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
{ 0xE5, "pmulhw", T_0F | T_66 | T_YMM, false, true },
|
{ 0xE5, "pmulhw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
{ 0xD5, "pmullw", T_0F | T_66 | T_YMM, false, true },
|
{ 0xD5, "pmullw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
{ 0x40, "pmulld", T_0F38 | T_66 | T_YMM, false, true },
|
{ 0x40, "pmulld", T_0F38 | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true },
|
||||||
|
|
||||||
{ 0xF4, "pmuludq", T_0F | T_66, false, true },
|
{ 0xF4, "pmuludq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1 | T_B64, false, true },
|
||||||
{ 0x28, "pmuldq", T_0F38 | T_66 | T_YMM, false, true },
|
{ 0x28, "pmuldq", T_0F38 | T_66 | T_YMM | T_EVEX | T_EW1 | T_B64, false, true },
|
||||||
|
|
||||||
{ 0xEB, "por", T_0F | T_66 | T_YMM, false, true },
|
{ 0xEB, "por", T_0F | T_66 | T_YMM, false, true },
|
||||||
{ 0xF6, "psadbw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
{ 0xF6, "psadbw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||||
|
|
|
@ -1537,7 +1537,7 @@ class Test {
|
||||||
{ "vpmullw", true },
|
{ "vpmullw", true },
|
||||||
{ "vpmulld", true },
|
{ "vpmulld", true },
|
||||||
|
|
||||||
{ "vpmuludq", false },
|
{ "vpmuludq", true },
|
||||||
{ "vpmuldq", true },
|
{ "vpmuldq", true },
|
||||||
|
|
||||||
{ "vpor", true },
|
{ "vpor", true },
|
||||||
|
@ -2921,7 +2921,31 @@ public:
|
||||||
{ "vpxorq", _ZMM | ZMM_KZ, _ZMM, M_1to8 },
|
{ "vpxorq", _ZMM | ZMM_KZ, _ZMM, M_1to8 },
|
||||||
|
|
||||||
{ "vpsadbw", _XMM3, _XMM, _XMM },
|
{ "vpsadbw", _XMM3, _XMM, _XMM },
|
||||||
{ "vpsadbw", _ZMM, _ZMM, _MEM }
|
{ "vpsadbw", _ZMM, _ZMM, _MEM },
|
||||||
|
|
||||||
|
{ "vpmuldq", _XMM3, _XMM, _XMM | M_1to2 },
|
||||||
|
{ "vpmuldq", ZMM_KZ, _ZMM, M_1to8 },
|
||||||
|
|
||||||
|
{ "vpmulhrsw", _XMM3, _XMM, _XMM },
|
||||||
|
{ "vpmulhrsw", ZMM_KZ, _ZMM, _MEM },
|
||||||
|
|
||||||
|
{ "vpmulhuw", _XMM3, _XMM, _XMM },
|
||||||
|
{ "vpmulhuw", ZMM_KZ, _ZMM, _MEM },
|
||||||
|
|
||||||
|
{ "vpmulhw", _XMM3, _XMM, _XMM },
|
||||||
|
{ "vpmulhw", ZMM_KZ, _ZMM, _MEM },
|
||||||
|
|
||||||
|
{ "vpmullw", _XMM3, _XMM, _XMM },
|
||||||
|
{ "vpmullw", ZMM_KZ, _ZMM, _MEM },
|
||||||
|
|
||||||
|
{ "vpmulld", _XMM3, _XMM, M_1to4 },
|
||||||
|
{ "vpmulld", ZMM_KZ, _ZMM, M_1to16 },
|
||||||
|
|
||||||
|
{ "vpmullq", _XMM3, _XMM, M_1to2 },
|
||||||
|
{ "vpmullq", ZMM_KZ, _ZMM, M_1to8 },
|
||||||
|
|
||||||
|
{ "vpmuludq", _XMM3, _XMM, M_1to2 },
|
||||||
|
{ "vpmuludq", ZMM_KZ, _ZMM, M_1to8 },
|
||||||
};
|
};
|
||||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||||
const Tbl& p = tbl[i];
|
const Tbl& p = tbl[i];
|
||||||
|
|
|
@ -108,5 +108,6 @@ void vpord(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x
|
||||||
void vporq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0xEB); }
|
void vporq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0xEB); }
|
||||||
void vpxord(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW0 | T_YMM | T_MUST_EVEX | T_B32, 0xEF); }
|
void vpxord(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW0 | T_YMM | T_MUST_EVEX | T_B32, 0xEF); }
|
||||||
void vpxorq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0xEF); }
|
void vpxorq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0xEF); }
|
||||||
|
void vpmullq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0x40); }
|
||||||
void vpsraq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(4), x, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0x72, imm); }
|
void vpsraq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(4), x, op, T_0F | T_66 | T_EW1 | T_YMM | T_MUST_EVEX | T_B64, 0x72, imm); }
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -867,19 +867,19 @@ void vpminuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1,
|
||||||
void vpminuw(const Xmm& x, const Operand& op) { vpminuw(x, x, op); }
|
void vpminuw(const Xmm& x, const Operand& op) { vpminuw(x, x, op); }
|
||||||
void vpminud(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x3B); }
|
void vpminud(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x3B); }
|
||||||
void vpminud(const Xmm& x, const Operand& op) { vpminud(x, x, op); }
|
void vpminud(const Xmm& x, const Operand& op) { vpminud(x, x, op); }
|
||||||
void vpmulhuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE4); }
|
void vpmulhuw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xE4); }
|
||||||
void vpmulhuw(const Xmm& x, const Operand& op) { vpmulhuw(x, x, op); }
|
void vpmulhuw(const Xmm& x, const Operand& op) { vpmulhuw(x, x, op); }
|
||||||
void vpmulhrsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_YMM, 0x0B); }
|
void vpmulhrsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_YMM | T_EVEX, 0x0B); }
|
||||||
void vpmulhrsw(const Xmm& x, const Operand& op) { vpmulhrsw(x, x, op); }
|
void vpmulhrsw(const Xmm& x, const Operand& op) { vpmulhrsw(x, x, op); }
|
||||||
void vpmulhw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE5); }
|
void vpmulhw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xE5); }
|
||||||
void vpmulhw(const Xmm& x, const Operand& op) { vpmulhw(x, x, op); }
|
void vpmulhw(const Xmm& x, const Operand& op) { vpmulhw(x, x, op); }
|
||||||
void vpmullw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD5); }
|
void vpmullw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xD5); }
|
||||||
void vpmullw(const Xmm& x, const Operand& op) { vpmullw(x, x, op); }
|
void vpmullw(const Xmm& x, const Operand& op) { vpmullw(x, x, op); }
|
||||||
void vpmulld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_YMM, 0x40); }
|
void vpmulld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x40); }
|
||||||
void vpmulld(const Xmm& x, const Operand& op) { vpmulld(x, x, op); }
|
void vpmulld(const Xmm& x, const Operand& op) { vpmulld(x, x, op); }
|
||||||
void vpmuludq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66, 0xF4); }
|
void vpmuludq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_B64, 0xF4); }
|
||||||
void vpmuludq(const Xmm& x, const Operand& op) { vpmuludq(x, x, op); }
|
void vpmuludq(const Xmm& x, const Operand& op) { vpmuludq(x, x, op); }
|
||||||
void vpmuldq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_YMM, 0x28); }
|
void vpmuldq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW1 | T_YMM | T_EVEX | T_B64, 0x28); }
|
||||||
void vpmuldq(const Xmm& x, const Operand& op) { vpmuldq(x, x, op); }
|
void vpmuldq(const Xmm& x, const Operand& op) { vpmuldq(x, x, op); }
|
||||||
void vpor(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xEB); }
|
void vpor(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xEB); }
|
||||||
void vpor(const Xmm& x, const Operand& op) { vpor(x, x, op); }
|
void vpor(const Xmm& x, const Operand& op) { vpor(x, x, op); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue