diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index fc62eb8..c50bb14 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -1061,7 +1061,7 @@ void put() { 0xDC, "paddusb", T_0F | T_66 | T_YMM, false, true }, { 0xDD, "paddusw", T_0F | T_66 | T_YMM, false, true }, - { 0x0F, "palignr", T_0F3A | T_66 | T_YMM, true, true }, + { 0x0F, "palignr", T_0F3A | T_66 | T_YMM | T_EVEX, true, true }, { 0xDB, "pand", T_0F | T_66 | T_YMM, false, true }, { 0xDF, "pandn", T_0F | T_66 | T_YMM, false, true }, diff --git a/test/make_nm.cpp b/test/make_nm.cpp index aeb3c45..006d7a5 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -2719,19 +2719,22 @@ public: put(p.name, XMM_KZ, _XMM, _XMM|p.mem); } } - void put512_X_X_XM_I() + void put512_X3_I() { const struct Tbl { const char *name; - uint64_t mem; + uint64_t x1; + uint64_t x2; + uint64_t xm; } tbl[] = { #ifdef XBYAK64 - { "vinsertps", _XMM3 }, + { "vinsertps", _XMM, _XMM, _XMM3 }, #endif + { "vpalignr", ZMM_KZ, _ZMM, _ZMM }, }; for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) { const Tbl& p = tbl[i]; - put(p.name, _XMM, _XMM, p.mem, IMM); + put(p.name, p.x1, p.x2, p.xm, IMM); } } void putAVX512() @@ -2744,7 +2747,7 @@ public: put_vmov(); put512_X_MX(); put512_X_X_XM(); - put512_X_X_XM_I(); + put512_X3_I(); } #endif }; diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index 7d6b7a6..78f7280 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -801,7 +801,7 @@ void vpaddusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1 void vpaddusb(const Xmm& x, const Operand& op) { vpaddusb(x, x, op); } void vpaddusw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xDD); } void vpaddusw(const Xmm& x, const Operand& op) { vpaddusw(x, x, op); } -void vpalignr(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, T_0F3A | T_66 | T_YMM, 0x0F, imm); } +void vpalignr(const Xmm& x1, const Xmm& x2, const Operand& op, uint8 imm) { opAVX_X_X_XM(x1, x2, op, T_0F3A | T_66 | T_YMM | T_EVEX, 0x0F, imm); } void vpalignr(const Xmm& x, const Operand& op, uint8 imm) { vpalignr(x, x, op, imm); } void vpand(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xDB); } void vpand(const Xmm& x, const Operand& op) { vpand(x, x, op); }