diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index 5fb61fd..aa1c795 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -1042,6 +1042,13 @@ void put() { 0x44, "pclmulqdq", MM_0F3A | PP_66, false, 0, true, true }, { 0x0C, "permilps", MM_0F38 | PP_66, true, 0, false, false }, { 0x0D, "permilpd", MM_0F38 | PP_66, true, 0, false, false }, + + { 0x47, "psllvd", MM_0F38 | PP_66, true, 0, false, false }, + { 0x47, "psllvq", MM_0F38 | PP_66, true, 1, false, false }, + { 0x46, "psravd", MM_0F38 | PP_66, true, 0, false, false }, + { 0x45, "psrlvd", MM_0F38 | PP_66, true, 0, false, false }, + { 0x45, "psrlvq", MM_0F38 | PP_66, true, 1, false, false }, + { 0xC2, "cmppd", MM_0F | PP_66, true, -1, true, true }, { 0xC2, "cmpps", MM_0F, true, -1, true, true }, { 0xC2, "cmpsd", MM_0F | PP_F2, false, -1, true, true }, diff --git a/test/make_nm.cpp b/test/make_nm.cpp index d0dc701..456c2b3 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -1472,6 +1472,12 @@ class Test { { "vpermilpd", true }, { "vpermilps", true }, { "vpshufb", true }, + + { "vpsllvd", true }, + { "vpsllvq", true }, + { "vpsravd", true }, + { "vpsrlvd", true }, + { "vpsrlvq", true }, }; for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) { const Tbl *p = &tbl[i]; diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index cb6afcd..0a0e0fe 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -655,6 +655,11 @@ void vpclmulqdq(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { void vpclmulqdq(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F3A | PP_66, 0x44, false, 0); db(imm); } void vpermilps(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0C, true, 0); } void vpermilpd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x0D, true, 0); } +void vpsllvd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x47, true, 0); } +void vpsllvq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x47, true, 1); } +void vpsravd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x46, true, 0); } +void vpsrlvd(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x45, true, 0); } +void vpsrlvq(const Xmm& xm1, const Xmm& xm2, const Operand& op) { opAVX_X_X_XM(xm1, xm2, op, MM_0F38 | PP_66, 0x45, true, 1); } void vcmppd(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F | PP_66, 0xC2, true, -1); db(imm); } void vcmppd(const Xmm& xmm, const Operand& op, uint8 imm) { opAVX_X_X_XM(xmm, xmm, op, MM_0F | PP_66, 0xC2, true, -1); db(imm); } void vcmpps(const Xmm& xm1, const Xmm& xm2, const Operand& op, uint8 imm) { opAVX_X_X_XM(xm1, xm2, op, MM_0F, 0xC2, true, -1); db(imm); }