add vpadd{b,w,d,q,sb,sw,usb,usw}
diff --git a/gen/gen_code.cpp b/gen/gen_code.cpp
index 08f36a5..e462d94 100644
--- a/gen/gen_code.cpp
+++ b/gen/gen_code.cpp
@@ -1050,16 +1050,16 @@
{ 0x67, "packuswb", T_0F | T_66 | T_YMM | T_EVEX, false, true },
{ 0x2B, "packusdw", T_0F38 | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true },
- { 0xFC, "paddb", T_0F | T_66 | T_YMM, false, true },
- { 0xFD, "paddw", T_0F | T_66 | T_YMM, false, true },
- { 0xFE, "paddd", T_0F | T_66 | T_YMM, false, true },
- { 0xD4, "paddq", T_0F | T_66 | T_YMM, false, true },
+ { 0xFC, "paddb", T_0F | T_66 | T_YMM | T_EVEX, false, true },
+ { 0xFD, "paddw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
+ { 0xFE, "paddd", T_0F | T_66 | T_YMM | T_EVEX | T_EW0 | T_B32, false, true },
+ { 0xD4, "paddq", T_0F | T_66 | T_YMM | T_EVEX | T_EW1 | T_B64, false, true },
- { 0xEC, "paddsb", T_0F | T_66 | T_YMM, false, true },
- { 0xED, "paddsw", T_0F | T_66 | T_YMM, false, true },
+ { 0xEC, "paddsb", T_0F | T_66 | T_YMM | T_EVEX, false, true },
+ { 0xED, "paddsw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
- { 0xDC, "paddusb", T_0F | T_66 | T_YMM, false, true },
- { 0xDD, "paddusw", T_0F | T_66 | T_YMM, false, true },
+ { 0xDC, "paddusb", T_0F | T_66 | T_YMM | T_EVEX, false, true },
+ { 0xDD, "paddusw", T_0F | T_66 | T_YMM | T_EVEX, false, true },
{ 0x0F, "palignr", T_0F3A | T_66 | T_YMM | T_EVEX, true, true },
diff --git a/test/make_nm.cpp b/test/make_nm.cpp
index 9fa919c..ab15a6d 100644
--- a/test/make_nm.cpp
+++ b/test/make_nm.cpp
@@ -2750,6 +2750,22 @@
{ "vpackuswb", XMM_KZ, _XMM, _XMM | _MEM },
{ "vpackuswb", YMM_KZ, _YMM, _YMM | _MEM },
{ "vpackuswb", ZMM_KZ, _ZMM, _ZMM | _MEM },
+
+ { "vpaddb", XMM_KZ, _XMM, _XMM | _MEM },
+ { "vpaddw", XMM_KZ, _XMM, _XMM | _MEM },
+ { "vpaddd", XMM_KZ, _XMM, _XMM | M_1to4 },
+
+ { "vpaddsb", XMM_KZ, _XMM, _XMM | _MEM },
+ { "vpaddsb", ZMM_KZ, _ZMM, _ZMM | _MEM },
+
+ { "vpaddsw", XMM_KZ, _XMM, _XMM | _MEM },
+ { "vpaddsw", ZMM_KZ, _ZMM, _ZMM | _MEM },
+
+ { "vpaddusb", XMM_KZ, _XMM, _XMM | MEM },
+ { "vpaddusb", ZMM_KZ, _ZMM, _ZMM | MEM },
+
+ { "vpaddusw", XMM_KZ, _XMM, _XMM | MEM },
+ { "vpaddusw", ZMM_KZ, _ZMM, _ZMM | MEM },
};
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 55a221f..90a9bcd 100644
--- a/xbyak/xbyak_mnemonic.h
+++ b/xbyak/xbyak_mnemonic.h
@@ -785,21 +785,21 @@
void vpackuswb(const Xmm& x, const Operand& op) { vpackuswb(x, x, op); }
void vpackusdw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F38 | T_66 | T_EW0 | T_YMM | T_EVEX | T_B32, 0x2B); }
void vpackusdw(const Xmm& x, const Operand& op) { vpackusdw(x, x, op); }
-void vpaddb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xFC); }
+void vpaddb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xFC); }
void vpaddb(const Xmm& x, const Operand& op) { vpaddb(x, x, op); }
-void vpaddw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xFD); }
+void vpaddw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xFD); }
void vpaddw(const Xmm& x, const Operand& op) { vpaddw(x, x, op); }
-void vpaddd(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xFE); }
+void vpaddd(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, 0xFE); }
void vpaddd(const Xmm& x, const Operand& op) { vpaddd(x, x, op); }
-void vpaddq(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xD4); }
+void vpaddq(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, 0xD4); }
void vpaddq(const Xmm& x, const Operand& op) { vpaddq(x, x, op); }
-void vpaddsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xEC); }
+void vpaddsb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xEC); }
void vpaddsb(const Xmm& x, const Operand& op) { vpaddsb(x, x, op); }
-void vpaddsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xED); }
+void vpaddsw(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xED); }
void vpaddsw(const Xmm& x, const Operand& op) { vpaddsw(x, x, op); }
-void vpaddusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM, 0xDC); }
+void vpaddusb(const Xmm& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 0xDC); }
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& x1, const Xmm& x2, const Operand& op) { opAVX_X_X_XM(x1, x2, op, T_0F | T_66 | T_YMM | T_EVEX, 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 | T_EVEX, 0x0F, imm); }
void vpalignr(const Xmm& x, const Operand& op, uint8 imm) { vpalignr(x, x, op, imm); }