add vcomish

This commit is contained in:
MITSUNARI Shigeo 2021-09-05 11:57:47 +09:00
parent cd036ea174
commit ab9481b4c6
3 changed files with 13 additions and 0 deletions

View file

@ -146,6 +146,7 @@ void putVcmp()
printf("void %s(const Opmask& k, const Xmm& x, const Operand& op%s) { opAVX_K_X_XM(k, x, op, %s, 0x%02X%s); }\n"
, p->name, p->hasIMM ? ", uint8_t imm" : "", type.c_str(), p->code, p->hasIMM ? ", imm" : "");
}
puts("void vcomish(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_MAP5 | T_MUST_EVEX | T_EW0 | T_SAE_X | T_N2, 0x2F); }");
}
void putVcmpAlias()

View file

@ -891,9 +891,13 @@ CYBOZU_TEST_AUTO(vaddph)
vcmpsh(k1, xm15, ptr[rax+64], 1);
vcmpsh(k3|k5, xmm1, xmm25|T_sae, 4);
vcomish(xmm1, ptr[rax+64]);
vcomish(xmm1|T_sae, xmm15);
}
} c;
const uint8_t tbl[] = {
// vaddph
0x62, 0xF5, 0x74, 0x48, 0x58, 0x40, 0x01,
0x62, 0xF5, 0x74, 0x28, 0x58, 0x40, 0x02,
0x62, 0xF5, 0x74, 0x08, 0x58, 0x40, 0x04,
@ -902,9 +906,11 @@ CYBOZU_TEST_AUTO(vaddph)
0x62, 0xF5, 0x74, 0x38, 0x58, 0x40, 0x20,
0x62, 0xF5, 0x74, 0x18, 0x58, 0x40, 0x20,
// vaddsh
0x62, 0xF5, 0x06, 0x08, 0x58, 0x40, 0x20,
0x62, 0xF5, 0x06, 0xBD, 0x58, 0xC3,
// vcmpph
0x62, 0xf3, 0x04, 0x08, 0xc2, 0x48, 0x04, 0x01,
0x62, 0xf3, 0x04, 0x28, 0xc2, 0x50, 0x02, 0x02,
0x62, 0xf3, 0x04, 0x48, 0xc2, 0x58, 0x01, 0x03,
@ -912,8 +918,13 @@ CYBOZU_TEST_AUTO(vaddph)
0x62, 0xf3, 0x04, 0x38, 0xc2, 0x50, 0x20, 0x02,
0x62, 0xf3, 0x04, 0x58, 0xc2, 0x58, 0x20, 0x03,
// vcmpsh
0x62, 0xf3, 0x06, 0x08, 0xc2, 0x48, 0x20, 0x01,
0x62, 0x93, 0x76, 0x1d, 0xc2, 0xd9, 0x04,
// vcomish
0x62, 0xf5, 0x7c, 0x08, 0x2f, 0x48, 0x20,
0x62, 0xd5, 0x7c, 0x18, 0x2f, 0xcf,
};
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
CYBOZU_TEST_EQUAL(c.getSize(), n);

View file

@ -1891,6 +1891,7 @@ void vcmpunordpd(const Opmask& k, const Xmm& x, const Operand& op) { vcmppd(k, x
void vcmpunordps(const Opmask& k, const Xmm& x, const Operand& op) { vcmpps(k, x, op, 3); }
void vcmpunordsd(const Opmask& k, const Xmm& x, const Operand& op) { vcmpsd(k, x, op, 3); }
void vcmpunordss(const Opmask& k, const Xmm& x, const Operand& op) { vcmpss(k, x, op, 3); }
void vcomish(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_MAP5 | T_MUST_EVEX | T_EW0 | T_SAE_X | T_N2, 0x2F); }
void vcompressb(const Operand& op, const Xmm& x) { opAVX_X_XM_IMM(x, op, T_N1 | T_66 | T_0F38 | T_EW0 | T_YMM | T_MUST_EVEX, 0x63); }
void vcompresspd(const Operand& op, const Xmm& x) { opAVX_X_XM_IMM(x, op, T_N8 | T_66 | T_0F38 | T_EW1 | T_YMM | T_MUST_EVEX, 0x8A); }
void vcompressps(const Operand& op, const Xmm& x) { opAVX_X_XM_IMM(x, op, T_N4 | T_66 | T_0F38 | T_EW0 | T_YMM | T_MUST_EVEX, 0x8A); }