add vpermd, vpermps

This commit is contained in:
MITSUNARI Shigeo 2013-05-26 23:49:26 +09:00
parent c578525599
commit 32c5582ad2
3 changed files with 24 additions and 0 deletions

View file

@ -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] = {

View file

@ -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);

View file

@ -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); }