diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp index c44639f..d9cf45f 100644 --- a/gen/gen_code.cpp +++ b/gen/gen_code.cpp @@ -1133,16 +1133,16 @@ void put() { 0xD2, "psrld", T_0F | T_66 | T_YMM | T_EVEX | T_EW0, false, true }, { 0xD3, "psrlq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1, false, true }, - { 0xF8, "psubb", T_0F | T_66 | T_YMM, false, true }, - { 0xF9, "psubw", T_0F | T_66 | T_YMM, false, true }, - { 0xFA, "psubd", T_0F | T_66 | T_YMM, false, true }, - { 0xFB, "psubq", T_0F | T_66 | T_YMM, false, true }, + { 0xF8, "psubb", T_0F | T_66 | T_YMM | T_EVEX, false, true }, + { 0xF9, "psubw", T_0F | T_66 | T_YMM | T_EVEX, false, true }, + { 0xFA, "psubd", T_0F | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true }, + { 0xFB, "psubq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1 | T_B64, false, true }, - { 0xE8, "psubsb", T_0F | T_66 | T_YMM, false, true }, - { 0xE9, "psubsw", T_0F | T_66 | T_YMM, false, true }, + { 0xE8, "psubsb", T_0F | T_66 | T_YMM | T_EVEX, false, true }, + { 0xE9, "psubsw", T_0F | T_66 | T_YMM | T_EVEX, false, true }, - { 0xD8, "psubusb", T_0F | T_66 | T_YMM, false, true }, - { 0xD9, "psubusw", T_0F | T_66 | T_YMM, false, true }, + { 0xD8, "psubusb", T_0F | T_66 | T_YMM | T_EVEX, false, true }, + { 0xD9, "psubusw", T_0F | T_66 | T_YMM | T_EVEX, false, true }, { 0x68, "punpckhbw", T_0F | T_66 | T_YMM, false, true }, { 0x69, "punpckhwd", T_0F | T_66 | T_YMM, false, true }, diff --git a/test/make_nm.cpp b/test/make_nm.cpp index a7452c3..d878dfb 100644 --- a/test/make_nm.cpp +++ b/test/make_nm.cpp @@ -2765,6 +2765,7 @@ public: { "vpaddb", XMM_KZ, _XMM, _XMM | _MEM }, { "vpaddw", XMM_KZ, _XMM, _XMM | _MEM }, { "vpaddd", XMM_KZ, _XMM, _XMM | M_1to4 }, + { "vpaddq", ZMM_KZ, _ZMM, M_1to8 }, { "vpaddsb", XMM_KZ, _XMM, _XMM | _MEM }, { "vpaddsb", ZMM_KZ, _ZMM, _ZMM | _MEM }, @@ -2778,6 +2779,23 @@ public: { "vpaddusw", XMM_KZ, _XMM, _XMM | MEM }, { "vpaddusw", ZMM_KZ, _ZMM, _ZMM | MEM }, + { "vpsubb", XMM_KZ, _XMM, _XMM | _MEM }, + { "vpsubw", XMM_KZ, _XMM, _XMM | _MEM }, + { "vpsubd", XMM_KZ, _XMM, _XMM | M_1to4 }, + { "vpsubq", ZMM_KZ, _ZMM, M_1to8 }, + + { "vpsubsb", XMM_KZ, _XMM, _XMM | _MEM }, + { "vpsubsb", ZMM_KZ, _ZMM, _ZMM | _MEM }, + + { "vpsubsw", XMM_KZ, _XMM, _XMM | _MEM }, + { "vpsubsw", ZMM_KZ, _ZMM, _ZMM | _MEM }, + + { "vpsubusb", XMM_KZ, _XMM, _XMM | MEM }, + { "vpsubusb", ZMM_KZ, _ZMM, _ZMM | MEM }, + + { "vpsubusw", XMM_KZ, _XMM, _XMM | MEM }, + { "vpsubusw", ZMM_KZ, _ZMM, _ZMM | MEM }, + { "vpandd", ZMM_KZ, _ZMM, _ZMM | M_1to16 }, { "vpandq", ZMM_KZ, _ZMM, _ZMM | M_1to8 }, diff --git a/xbyak/xbyak_mnemonic.h b/xbyak/xbyak_mnemonic.h index 3907903..9d0e9b5 100644 --- a/xbyak/xbyak_mnemonic.h +++ b/xbyak/xbyak_mnemonic.h @@ -908,21 +908,21 @@ void vpsrld(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, void vpsrld(const Xmm& x, const Operand& op) { vpsrld(x, x, op); } void vpsrlq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX, 0xD3); } void vpsrlq(const Xmm& x, const Operand& op) { vpsrlq(x, x, op); } -void vpsubb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF8); } +void vpsubb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xF8); } void vpsubb(const Xmm& x, const Operand& op) { vpsubb(x, x, op); } -void vpsubw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xF9); } +void vpsubw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xF9); } void vpsubw(const Xmm& x, const Operand& op) { vpsubw(x, x, op); } -void vpsubd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xFA); } +void vpsubd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0xFA); } void vpsubd(const Xmm& x, const Operand& op) { vpsubd(x, x, op); } -void vpsubq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xFB); } +void vpsubq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_B64, 0xFB); } void vpsubq(const Xmm& x, const Operand& op) { vpsubq(x, x, op); } -void vpsubsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE8); } +void vpsubsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xE8); } void vpsubsb(const Xmm& x, const Operand& op) { vpsubsb(x, x, op); } -void vpsubsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xE9); } +void vpsubsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xE9); } void vpsubsw(const Xmm& x, const Operand& op) { vpsubsw(x, x, op); } -void vpsubusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD8); } +void vpsubusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xD8); } void vpsubusb(const Xmm& x, const Operand& op) { vpsubusb(x, x, op); } -void vpsubusw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD9); } +void vpsubusw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xD9); } void vpsubusw(const Xmm& x, const Operand& op) { vpsubusw(x, x, op); } void vpunpckhbw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0x68); } void vpunpckhbw(const Xmm& x, const Operand& op) { vpunpckhbw(x, x, op); }