add vcvttph2dq

This commit is contained in:
MITSUNARI Shigeo 2021-09-13 10:42:16 +09:00
parent 524d52bf62
commit 72a5717e40
3 changed files with 22 additions and 1 deletions

View file

@ -549,6 +549,7 @@ void putCvt()
{ 0x5B, "vcvtph2dq", T_66 | T_MAP5 | T_YMM | T_MUST_EVEX | T_EW0 | T_B16 | T_ER_Y | T_N8 | T_N_VL, 1 },
{ 0x13, "vcvtph2psx", T_66 | T_MAP6 | T_YMM | T_MUST_EVEX | T_EW0 | T_B16 | T_SAE_Y | T_N8 | T_N_VL, 1 },
{ 0x79, "vcvtph2udq", T_MAP5 | T_YMM | T_MUST_EVEX | T_EW0 | T_B16 | T_ER_Y | T_N8 | T_N_VL, 1 },
{ 0x5B, "vcvttph2dq", T_F3 | T_MAP5 | T_YMM | T_MUST_EVEX | T_EW0 | T_B16 | T_SAE_Y | T_N8 | T_N_VL, 1 },
{ 0x79, "vcvtpd2udq", T_0F | T_YMM | T_MUST_EVEX | T_EW1 | T_B64 | T_ER_Z, 2 },
{ 0x5B, "vcvtqq2ps", T_0F | T_YMM | T_MUST_EVEX | T_EW1 | T_B64 | T_ER_Z, 2 },

View file

@ -1109,7 +1109,15 @@ CYBOZU_TEST_AUTO(vaddph)
vcvtph2udq(zmm1|k5|T_z, ptr [rax+0x40]);
vcvtph2udq(zmm1|k5|T_z, ptr_b [rax+0x40]);
vcvttph2dq(xmm1, xmm5);
vcvttph2dq(xmm1, ptr [rax+0x40]);
vcvttph2dq(xmm1, ptr_b [rax+0x40]);
vcvttph2dq(ymm1|k2|T_z, xmm5);
vcvttph2dq(ymm1, ptr [rax+0x40]);
vcvttph2dq(ymm1, ptr_b [rax+0x40]);
vcvttph2dq(zmm1|k5|T_z|T_sae, ymm3);
vcvttph2dq(zmm1|k5|T_z, ptr [rax+0x40]);
vcvttph2dq(zmm1|k5|T_z, ptr_b [rax+0x40]);
}
} c;
@ -1400,6 +1408,17 @@ CYBOZU_TEST_AUTO(vaddph)
0x62, 0xf5, 0x7c, 0xbd, 0x79, 0xcb,
0x62, 0xf5, 0x7c, 0xcd, 0x79, 0x48, 0x02,
0x62, 0xf5, 0x7c, 0xdd, 0x79, 0x48, 0x20,
// vcvttph2dq
0x62, 0xf5, 0x7e, 0x08, 0x5b, 0xcd,
0x62, 0xf5, 0x7e, 0x08, 0x5b, 0x48, 0x08,
0x62, 0xf5, 0x7e, 0x18, 0x5b, 0x48, 0x20,
0x62, 0xf5, 0x7e, 0xaa, 0x5b, 0xcd,
0x62, 0xf5, 0x7e, 0x28, 0x5b, 0x48, 0x04,
0x62, 0xf5, 0x7e, 0x38, 0x5b, 0x48, 0x20,
0x62, 0xf5, 0x7e, 0x9d, 0x5b, 0xcb,
0x62, 0xf5, 0x7e, 0xcd, 0x5b, 0x48, 0x02,
0x62, 0xf5, 0x7e, 0xdd, 0x5b, 0x48, 0x20,
};
const size_t n = sizeof(tbl) / sizeof(tbl[0]);
CYBOZU_TEST_EQUAL(c.getSize(), n);

View file

@ -1919,6 +1919,7 @@ void vcvtss2usi(const Reg32e& r, const Operand& op) { int type = (T_N4 | T_F3 |
void vcvttpd2qq(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_66 | T_0F | T_EW1 | T_YMM | T_SAE_Z | T_MUST_EVEX | T_B64, 0x7A); }
void vcvttpd2udq(const Xmm& x, const Operand& op) { opCvt2(x, op, T_0F | T_EW1 | T_YMM | T_SAE_Z | T_MUST_EVEX | T_B64, 0x78); }
void vcvttpd2uqq(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_66 | T_0F | T_EW1 | T_YMM | T_SAE_Z | T_MUST_EVEX | T_B64, 0x78); }
void vcvttph2dq(const Xmm& x, const Operand& op) { checkCvt1(x, op); opVex(x, 0, op, T_N8 | T_N_VL | T_F3 | T_MAP5 | T_EW0 | T_YMM | T_SAE_Y | T_MUST_EVEX | T_B16, 0x5B); }
void vcvttps2qq(const Xmm& x, const Operand& op) { checkCvt1(x, op); opVex(x, 0, op, T_N8 | T_N_VL | T_66 | T_0F | T_EW0 | T_YMM | T_SAE_Y | T_MUST_EVEX | T_B32, 0x7A); }
void vcvttps2udq(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_0F | T_EW0 | T_YMM | T_SAE_Z | T_MUST_EVEX | T_B32, 0x78); }
void vcvttps2uqq(const Xmm& x, const Operand& op) { checkCvt1(x, op); opVex(x, 0, op, T_N8 | T_N_VL | T_66 | T_0F | T_EW0 | T_YMM | T_SAE_Y | T_MUST_EVEX | T_B32, 0x78); }