add vpermd, vpermps
This commit is contained in:
parent
c578525599
commit
32c5582ad2
3 changed files with 24 additions and 0 deletions
|
@ -1327,6 +1327,19 @@ void put()
|
||||||
printf("void vpmaskmov%s(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x%02X, true, %d); }\n", suf[i], 0x8E, i);
|
printf("void vpmaskmov%s(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x%02X, true, %d); }\n", suf[i], 0x8E, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// vpermd, vpermps
|
||||||
|
{
|
||||||
|
const struct {
|
||||||
|
const char *suf;
|
||||||
|
uint8 code;
|
||||||
|
} tbl[] = {
|
||||||
|
{ "d", 0x36 },
|
||||||
|
{ "ps", 0x16 },
|
||||||
|
};
|
||||||
|
for (int i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||||
|
printf("void vperm%s(const Ymm& y1, const Ymm& y2, const Operand& op) { opAVX_X_X_XM(y1, y2, op, MM_0F38 | PP_66, 0x%02X, true, 0); }\n", tbl[i].suf, tbl[i].code);
|
||||||
|
}
|
||||||
|
}
|
||||||
// vcmpeqps
|
// vcmpeqps
|
||||||
{
|
{
|
||||||
const char pred[32][16] = {
|
const char pred[32][16] = {
|
||||||
|
|
|
@ -1785,6 +1785,15 @@ class Test {
|
||||||
put(name, MEM, YMM, YMM);
|
put(name, MEM, YMM, YMM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
const char *tbl[] = {
|
||||||
|
"vpermd", "vpermps",
|
||||||
|
};
|
||||||
|
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
|
||||||
|
const char *name = tbl[i];
|
||||||
|
put(name, YMM, YMM, YMM | MEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
put("vextractf128", XMM | MEM, YMM, IMM);
|
put("vextractf128", XMM | MEM, YMM, IMM);
|
||||||
put("vextracti128", XMM | MEM, YMM, IMM);
|
put("vextracti128", XMM | MEM, YMM, IMM);
|
||||||
|
|
|
@ -927,6 +927,8 @@ void vpmaskmovd(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X
|
||||||
void vpmaskmovd(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 0); }
|
void vpmaskmovd(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 0); }
|
||||||
void vpmaskmovq(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x8C, true, 1); }
|
void vpmaskmovq(const Xmm& xm1, const Xmm& xm2, const Address& addr) { opAVX_X_X_XM(xm1, xm2, addr, MM_0F38 | PP_66, 0x8C, true, 1); }
|
||||||
void vpmaskmovq(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 1); }
|
void vpmaskmovq(const Address& addr, const Xmm& xm1, const Xmm& xm2) { opAVX_X_X_XM(xm2, xm1, addr, MM_0F38 | PP_66, 0x8E, true, 1); }
|
||||||
|
void vpermd(const Ymm& y1, const Ymm& y2, const Operand& op) { opAVX_X_X_XM(y1, y2, op, MM_0F38 | PP_66, 0x36, true, 0); }
|
||||||
|
void vpermps(const Ymm& y1, const Ymm& y2, const Operand& op) { opAVX_X_X_XM(y1, y2, op, MM_0F38 | PP_66, 0x16, true, 0); }
|
||||||
void cmpeqpd(const Xmm& x, const Operand& op) { cmppd(x, op, 0); }
|
void cmpeqpd(const Xmm& x, const Operand& op) { cmppd(x, op, 0); }
|
||||||
void vcmpeqpd(const Xmm& x1, const Xmm& x2, const Operand& op) { vcmppd(x1, x2, op, 0); }
|
void vcmpeqpd(const Xmm& x1, const Xmm& x2, const Operand& op) { vcmppd(x1, x2, op, 0); }
|
||||||
void vcmpeqpd(const Xmm& x, const Operand& op) { vcmppd(x, op, 0); }
|
void vcmpeqpd(const Xmm& x, const Operand& op) { vcmppd(x, op, 0); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue