add vpslldq, vpsrldq, vpsraw, vpsrad, vpsraq, vpsllw, vpslld, vpsllq, vpsrlw, vpsrld, vpsrlq
This commit is contained in:
parent
7e0763c964
commit
c1d4abd85d
6 changed files with 113 additions and 48 deletions
|
@ -186,6 +186,7 @@ void putX_X_XM_IMM()
|
|||
{ 0x3F, "vpmaxuq", T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
||||
{ 0x39, "vpminsq", T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
||||
{ 0x3B, "vpminuq", T_66 | T_0F38 | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
|
||||
{ 0xE2, "vpsraq", T_66 | T_0F | T_MUST_EVEX | T_YMM | T_EW1, false },
|
||||
};
|
||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||
const Tbl *p = &tbl[i];
|
||||
|
@ -195,6 +196,23 @@ void putX_X_XM_IMM()
|
|||
}
|
||||
}
|
||||
|
||||
void putShift()
|
||||
{
|
||||
const struct Tbl {
|
||||
const char *name;
|
||||
uint8 code;
|
||||
int idx;
|
||||
int ext_type;
|
||||
} tbl[] = {
|
||||
{ "vpsraq", 0x72, 4, T_EW1 | T_B64 },
|
||||
};
|
||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||
const Tbl& p = tbl[i];
|
||||
std::string type = type2String(T_0F | T_66 | T_YMM | T_EVEX | p.ext_type);
|
||||
printf("void %s(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(%d), x, op, %s, 0x%02X, imm); }\n", p.name, p.idx, type.c_str(), p.code);
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
puts("#ifndef XBYAK_DISABLE_AVX512");
|
||||
|
@ -203,5 +221,6 @@ int main()
|
|||
putX_XM();
|
||||
putM_X();
|
||||
putX_X_XM_IMM();
|
||||
putShift();
|
||||
puts("#endif");
|
||||
}
|
||||
|
|
|
@ -1123,15 +1123,15 @@ void put()
|
|||
{ 0x09, "psignw", T_0F38 | T_66 | T_YMM, false, true },
|
||||
{ 0x0A, "psignd", T_0F38 | T_66 | T_YMM, false, true },
|
||||
|
||||
{ 0xF1, "psllw", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xF2, "pslld", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xF3, "psllq", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xF1, "psllw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||
{ 0xF2, "pslld", T_0F | T_66 | T_YMM | T_EVEX | T_EW0, false, true },
|
||||
{ 0xF3, "psllq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1, false, true },
|
||||
|
||||
{ 0xE1, "psraw", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xE2, "psrad", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xD1, "psrlw", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xD2, "psrld", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xD3, "psrlq", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xE1, "psraw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||
{ 0xE2, "psrad", T_0F | T_66 | T_YMM | T_EVEX | T_EW0, false, true },
|
||||
{ 0xD1, "psrlw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
|
||||
{ 0xD2, "psrld", T_0F | T_66 | T_YMM | T_EVEX | T_EW0, false, true },
|
||||
{ 0xD3, "psrlq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1, false, true },
|
||||
|
||||
{ 0xF8, "psubb", T_0F | T_66 | T_YMM, false, true },
|
||||
{ 0xF9, "psubw", T_0F | T_66 | T_YMM, false, true },
|
||||
|
@ -1483,22 +1483,24 @@ void put()
|
|||
const char *name;
|
||||
uint8 code;
|
||||
int idx;
|
||||
int ext_type;
|
||||
} tbl[] = {
|
||||
{ "pslldq", 0x73, 7 },
|
||||
{ "psrldq", 0x73, 3 },
|
||||
{ "psllw", 0x71, 6 },
|
||||
{ "pslld", 0x72, 6 },
|
||||
{ "psllq", 0x73, 6 },
|
||||
{ "psraw", 0x71, 4 },
|
||||
{ "psrad", 0x72, 4 },
|
||||
{ "psrlw", 0x71, 2 },
|
||||
{ "psrld", 0x72, 2 },
|
||||
{ "psrlq", 0x73, 2 },
|
||||
{ "pslldq", 0x73, 7, 0 },
|
||||
{ "psrldq", 0x73, 3, 0 },
|
||||
{ "psllw", 0x71, 6, 0 },
|
||||
{ "pslld", 0x72, 6, T_EW0 | T_B32 },
|
||||
{ "psllq", 0x73, 6, T_EW1 | T_B64 },
|
||||
{ "psraw", 0x71, 4, 0 },
|
||||
{ "psrad", 0x72, 4, T_EW0 | T_B32 },
|
||||
{ "psrlw", 0x71, 2, 0 },
|
||||
{ "psrld", 0x72, 2, T_EW0 | T_B32 },
|
||||
{ "psrlq", 0x73, 2, T_EW1 | T_B64 },
|
||||
};
|
||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||
const Tbl& p = tbl[i];
|
||||
printf("void v%s(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym%d : xm%d, x1, x2, T_0F | T_66 | T_YMM, 0x%02X, imm); }\n", p.name, p.idx, p.idx, p.code);
|
||||
printf("void v%s(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym%d : xm%d, x, x, T_0F | T_66 | T_YMM, 0x%02X, imm); }\n", p.name, p.idx, p.idx, p.code);
|
||||
std::string type = type2String(T_0F | T_66 | T_YMM | T_EVEX | p.ext_type);
|
||||
printf("void v%s(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(%d), x, op, %s, 0x%02X, imm); }\n", p.name, p.idx, type.c_str(), p.code);
|
||||
printf("void v%s(const Xmm& x, uint8 imm) { v%s(x, x, imm); }\n", p.name, p.name);
|
||||
}
|
||||
}
|
||||
// 4-op
|
||||
|
|
|
@ -1797,6 +1797,11 @@ class Test {
|
|||
put(p.name, XMM, XMM, IMM);
|
||||
put(p.name, YMM, YMM, IMM);
|
||||
put(p.name, YMM, IMM);
|
||||
put(p.name, _ZMM, _ZMM, IMM8);
|
||||
#ifdef XBYAK64
|
||||
put(p.name, _XMM3, _XMM3, IMM8);
|
||||
put(p.name, _YMM3, _YMM3, IMM8);
|
||||
#endif
|
||||
if (p.support_Y_Y_X) {
|
||||
put(p.name, YMM, YMM, XMM);
|
||||
}
|
||||
|
@ -2808,6 +2813,36 @@ public:
|
|||
{ "vpminuw", ZMM_KZ, _ZMM, _ZMM | _MEM },
|
||||
{ "vpminud", ZMM_KZ, _ZMM, _ZMM | _MEM | M_1to16 },
|
||||
{ "vpminuq", ZMM_KZ, _ZMM, _ZMM | _MEM | M_1to8 },
|
||||
|
||||
{ "vpslldq", _XMM3, _XMM3 | _MEM, IMM8 },
|
||||
{ "vpslldq", _YMM3, _YMM3 | _MEM, IMM8 },
|
||||
{ "vpslldq", _ZMM, _ZMM | _MEM, IMM8 },
|
||||
|
||||
{ "vpsrldq", _XMM3, _XMM3 | _MEM, IMM8 },
|
||||
{ "vpsrldq", _YMM3, _YMM3 | _MEM, IMM8 },
|
||||
{ "vpsrldq", _ZMM, _ZMM | _MEM, IMM8 },
|
||||
|
||||
{ "vpsraw", XMM_KZ, _XMM, IMM8 },
|
||||
{ "vpsraw", ZMM_KZ, _ZMM, IMM8 },
|
||||
|
||||
{ "vpsrad", XMM_KZ, _XMM | M_1to4, IMM8 },
|
||||
{ "vpsrad", ZMM_KZ, _ZMM | M_1to16, IMM8 },
|
||||
|
||||
{ "vpsraq", XMM_KZ, _XMM | M_1to2, IMM8 },
|
||||
{ "vpsraq", ZMM_KZ, _ZMM | M_1to8, IMM8 },
|
||||
|
||||
{ "vpsllw", _XMM3, _XMM3 | _MEM, IMM8 },
|
||||
{ "vpslld", _XMM3, _XMM3 | _MEM | M_1to4, IMM8 },
|
||||
{ "vpsllq", _XMM3, _XMM3 | _MEM | M_1to2, IMM8 },
|
||||
|
||||
{ "vpsrlw", XMM_KZ, _XMM, IMM8 },
|
||||
{ "vpsrlw", ZMM_KZ, _ZMM, IMM8 },
|
||||
|
||||
{ "vpsrld", XMM_KZ, _XMM | M_1to4, IMM8 },
|
||||
{ "vpsrld", ZMM_KZ, _ZMM | M_1to16, IMM8 },
|
||||
|
||||
{ "vpsrlq", _XMM3, _XMM3 | _MEM | M_1to2, IMM8 },
|
||||
{ "vpsrlq", _ZMM, _ZMM | _MEM | M_1to8, IMM8 },
|
||||
};
|
||||
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||
const Tbl& p = tbl[i];
|
||||
|
|
|
@ -348,6 +348,7 @@ protected:
|
|||
unsigned int zero_:1;
|
||||
unsigned int mask_:3;
|
||||
unsigned int rounding_:3;
|
||||
void setIdx(int idx) { idx_ = idx; }
|
||||
public:
|
||||
enum Kind {
|
||||
NONE = 0,
|
||||
|
@ -529,6 +530,7 @@ struct EvexModifierZero{};
|
|||
struct Xmm : public Mmx {
|
||||
explicit Xmm(int idx = 0, Kind kind = Operand::XMM, int bit = 128) : Mmx(idx, kind, bit) { }
|
||||
Xmm operator|(const EvexModifierRounding& emr) const { Xmm r(*this); r.setRounding(emr.rounding); return r; }
|
||||
Xmm copyAndSetIdx(int idx) const { Xmm ret(*this); ret.setIdx(idx); return ret; }
|
||||
};
|
||||
|
||||
struct Ymm : public Xmm {
|
||||
|
@ -1830,6 +1832,11 @@ private:
|
|||
// assert(!x.isMEM()); // QQQ
|
||||
return x.isZMM() ? zm0 : x.isYMM() ? ym0 : xm0;
|
||||
}
|
||||
// get op.type(idx)
|
||||
Xmm getXmm(const Operand& op, int idx) const
|
||||
{
|
||||
return op.isZMM() ? Zmm(idx) : op.isYMM() ? Ymm(idx) : Xmm(idx);
|
||||
}
|
||||
// support (x, x/m, imm), (y, y/m, imm)
|
||||
void opAVX_X_XM_IMM(const Xmm& x, const Operand& op, int type, int code, int imm8 = NONE)
|
||||
{
|
||||
|
|
|
@ -99,4 +99,6 @@ void vpmaxsq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1,
|
|||
void vpmaxuq(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, 0x3F); }
|
||||
void vpminsq(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, 0x39); }
|
||||
void vpminuq(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, 0x3B); }
|
||||
void vpsraq(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, 0xE2); }
|
||||
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_EVEX | T_B64, 0x72, imm); }
|
||||
#endif
|
||||
|
|
|
@ -892,21 +892,21 @@ void vpsignw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1,
|
|||
void vpsignw(const Xmm& x, const Operand& op) { vpsignw(x, x, op); }
|
||||
void vpsignd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_YMM, 0x0A); }
|
||||
void vpsignd(const Xmm& x, const Operand& op) { vpsignd(x, x, op); }
|
||||
void vpsllw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF1); }
|
||||
void vpsllw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xF1); }
|
||||
void vpsllw(const Xmm& x, const Operand& op) { vpsllw(x, x, op); }
|
||||
void vpslld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF2); }
|
||||
void vpslld(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_EVEX, 0xF2); }
|
||||
void vpslld(const Xmm& x, const Operand& op) { vpslld(x, x, op); }
|
||||
void vpsllq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF3); }
|
||||
void vpsllq(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, 0xF3); }
|
||||
void vpsllq(const Xmm& x, const Operand& op) { vpsllq(x, x, op); }
|
||||
void vpsraw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE1); }
|
||||
void vpsraw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xE1); }
|
||||
void vpsraw(const Xmm& x, const Operand& op) { vpsraw(x, x, op); }
|
||||
void vpsrad(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE2); }
|
||||
void vpsrad(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_EVEX, 0xE2); }
|
||||
void vpsrad(const Xmm& x, const Operand& op) { vpsrad(x, x, op); }
|
||||
void vpsrlw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD1); }
|
||||
void vpsrlw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xD1); }
|
||||
void vpsrlw(const Xmm& x, const Operand& op) { vpsrlw(x, x, op); }
|
||||
void vpsrld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD2); }
|
||||
void vpsrld(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_EVEX, 0xD2); }
|
||||
void vpsrld(const Xmm& x, const Operand& op) { vpsrld(x, x, op); }
|
||||
void vpsrlq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD3); }
|
||||
void vpsrlq(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, 0xD3); }
|
||||
void vpsrlq(const Xmm& x, const Operand& op) { vpsrlq(x, x, op); }
|
||||
void vpsubb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF8); }
|
||||
void vpsubb(const Xmm& x, const Operand& op) { vpsubb(x, x, op); }
|
||||
|
@ -1427,26 +1427,26 @@ void vpinsrw(const Xmm& x, const Operand& op, uint8 imm) { vpinsrw(x, x, op, imm
|
|||
void vpinsrd(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { if (!op.isREG(32) && !op.isMEM()) throw Error(ERR_BAD_COMBINATION); opAVX_X_X_XMcvt(x1, x2, op, !op.isMEM(), Operand::XMM, T_0F3A | T_66 | T_W0 | T_EVEX | T_EW0, 0x22, imm); }
|
||||
void vpinsrd(const Xmm& x, const Operand& op, uint8 imm) { vpinsrd(x, x, op, imm); }
|
||||
void vpmovmskb(const Reg32e& r, const Xmm& x) { bool isYMM= x.isYMM(); opAVX_X_X_XM(isYMM ? Ymm(r.getIdx()) : Xmm(r.getIdx()), isYMM ? ym0 : xm0, x, T_0F | T_66 | T_YMM, 0xD7); }
|
||||
void vpslldq(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym7 : xm7, x1, x2, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpslldq(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym7 : xm7, x, x, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsrldq(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym3 : xm3, x1, x2, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsrldq(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym3 : xm3, x, x, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsllw(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym6 : xm6, x1, x2, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpsllw(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym6 : xm6, x, x, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpslld(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym6 : xm6, x1, x2, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpslld(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym6 : xm6, x, x, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpsllq(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym6 : xm6, x1, x2, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsllq(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym6 : xm6, x, x, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsraw(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym4 : xm4, x1, x2, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpsraw(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym4 : xm4, x, x, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpsrad(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym4 : xm4, x1, x2, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpsrad(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym4 : xm4, x, x, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpsrlw(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym2 : xm2, x1, x2, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpsrlw(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym2 : xm2, x, x, T_0F | T_66 | T_YMM, 0x71, imm); }
|
||||
void vpsrld(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym2 : xm2, x1, x2, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpsrld(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym2 : xm2, x, x, T_0F | T_66 | T_YMM, 0x72, imm); }
|
||||
void vpsrlq(const Xmm& x1, const Xmm& x2, uint8 imm) { opAVX_X_X_XM(x1.isYMM() ? ym2 : xm2, x1, x2, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpsrlq(const Xmm& x, uint8 imm) { opAVX_X_X_XM(x.isYMM() ? ym2 : xm2, x, x, T_0F | T_66 | T_YMM, 0x73, imm); }
|
||||
void vpslldq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(7), x, op, T_0F | T_66 | T_YMM | T_EVEX, 0x73, imm); }
|
||||
void vpslldq(const Xmm& x, uint8 imm) { vpslldq(x, x, imm); }
|
||||
void vpsrldq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(3), x, op, T_0F | T_66 | T_YMM | T_EVEX, 0x73, imm); }
|
||||
void vpsrldq(const Xmm& x, uint8 imm) { vpsrldq(x, x, imm); }
|
||||
void vpsllw(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(6), x, op, T_0F | T_66 | T_YMM | T_EVEX, 0x71, imm); }
|
||||
void vpsllw(const Xmm& x, uint8 imm) { vpsllw(x, x, imm); }
|
||||
void vpslld(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(6), x, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x72, imm); }
|
||||
void vpslld(const Xmm& x, uint8 imm) { vpslld(x, x, imm); }
|
||||
void vpsllq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(6), x, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_B64, 0x73, imm); }
|
||||
void vpsllq(const Xmm& x, uint8 imm) { vpsllq(x, x, imm); }
|
||||
void vpsraw(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(4), x, op, T_0F | T_66 | T_YMM | T_EVEX, 0x71, imm); }
|
||||
void vpsraw(const Xmm& x, uint8 imm) { vpsraw(x, x, imm); }
|
||||
void vpsrad(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(4), x, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x72, imm); }
|
||||
void vpsrad(const Xmm& x, uint8 imm) { vpsrad(x, x, imm); }
|
||||
void vpsrlw(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(2), x, op, T_0F | T_66 | T_YMM | T_EVEX, 0x71, imm); }
|
||||
void vpsrlw(const Xmm& x, uint8 imm) { vpsrlw(x, x, imm); }
|
||||
void vpsrld(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(2), x, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x72, imm); }
|
||||
void vpsrld(const Xmm& x, uint8 imm) { vpsrld(x, x, imm); }
|
||||
void vpsrlq(const Xmm& x, const Operand& op, uint8 imm) { opAVX_X_X_XM(x.copyAndSetIdx(2), x, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_B64, 0x73, imm); }
|
||||
void vpsrlq(const Xmm& x, uint8 imm) { vpsrlq(x, x, imm); }
|
||||
void vblendvpd(const Xmm& x1, const Xmm& x2, const Operand& op, const Xmm& x4) { opAVX_X_X_XM(x1, x2, op, T_0F3A | T_66 | T_YMM, 0x4B, x4.getIdx() << 4); }
|
||||
void vblendvpd(const Xmm& x1, const Operand& op, const Xmm& x4) { vblendvpd(x1, x1, op, x4); }
|
||||
void vblendvps(const Xmm& x1, const Xmm& x2, const Operand& op, const Xmm& x4) { opAVX_X_X_XM(x1, x2, op, T_0F3A | T_66 | T_YMM, 0x4A, x4.getIdx() << 4); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue