add vpcmpgt{b,w,d,q}
diff --git a/gen/gen_avx512.cpp b/gen/gen_avx512.cpp
index d3a7bdf..217eb00 100644
--- a/gen/gen_avx512.cpp
+++ b/gen/gen_avx512.cpp
@@ -105,10 +105,16 @@
{ 0xC2, "vcmpps", T_0F | T_EVEX | T_MUST_EVEX | T_EW0 | T_SAE_Z | T_YMM, true },
{ 0xC2, "vcmpsd", T_0F | T_EVEX | T_MUST_EVEX | T_EW1 | T_SAE_Z | T_F2, true },
{ 0xC2, "vcmpss", T_0F | T_EVEX | T_MUST_EVEX | T_EW0 | T_SAE_Z | T_F3, true },
- { 0x76, "vpcmpeqd", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_B32, false },
- { 0x29, "vpcmpeqq", T_66 | T_0F38 | T_EVEX | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
+
{ 0x74, "vpcmpeqb", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM, false },
{ 0x75, "vpcmpeqw", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM, false },
+ { 0x76, "vpcmpeqd", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_B32, false },
+ { 0x29, "vpcmpeqq", T_66 | T_0F38 | T_EVEX | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
+
+ { 0x64, "vpcmpgtb", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM, false },
+ { 0x65, "vpcmpgtw", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM, false },
+ { 0x66, "vpcmpgtd", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_EW0 | T_B32, false },
+ { 0x37, "vpcmpgtq", T_66 | T_0F38 | T_EVEX | T_MUST_EVEX | T_YMM | T_EW1 | T_B64, false },
};
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
const Tbl *p = &tbl[i];
diff --git a/test/make_nm.cpp b/test/make_nm.cpp
index de6368d..a776bf1 100644
--- a/test/make_nm.cpp
+++ b/test/make_nm.cpp
@@ -2781,6 +2781,10 @@
{ "vpcmpeqd", K2, _ZMM, _ZMM | M_1to16 },
{ "vpcmpeqq", K2, _ZMM, _ZMM | M_1to8 },
+ { "vpcmpgtb", K2, _ZMM, _ZMM | _MEM },
+ { "vpcmpgtw", K2, _ZMM, _ZMM | _MEM },
+ { "vpcmpgtd", K2, _ZMM, _ZMM | M_1to16 },
+ { "vpcmpgtq", K2, _ZMM, _ZMM | M_1to8 },
};
for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
const Tbl& p = tbl[i];
diff --git a/xbyak/xbyak_avx512.h b/xbyak/xbyak_avx512.h
index 273168b..c7aed05 100644
--- a/xbyak/xbyak_avx512.h
+++ b/xbyak/xbyak_avx512.h
@@ -68,10 +68,14 @@
void vcmpps(const Opmask& k, const Xmm& x, const Operand& op, uint8 imm) { opAVX_K_X_XM(k, x, op, T_0F | T_EW0 | T_YMM | T_EVEX | T_SAE_Z | T_MUST_EVEX, 0xC2, imm); }
void vcmpsd(const Opmask& k, const Xmm& x, const Operand& op, uint8 imm) { opAVX_K_X_XM(k, x, op, T_0F | T_F2 | T_EW1 | T_EVEX | T_SAE_Z | T_MUST_EVEX, 0xC2, imm); }
void vcmpss(const Opmask& k, const Xmm& x, const Operand& op, uint8 imm) { opAVX_K_X_XM(k, x, op, T_0F | T_F3 | T_EW0 | T_EVEX | T_SAE_Z | T_MUST_EVEX, 0xC2, imm); }
-void vpcmpeqd(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX | T_B32, 0x76); }
-void vpcmpeqq(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F38 | T_66 | T_EW1 | T_YMM | T_EVEX | T_MUST_EVEX | T_B64, 0x29); }
void vpcmpeqb(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX, 0x74); }
void vpcmpeqw(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX, 0x75); }
+void vpcmpeqd(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX | T_B32, 0x76); }
+void vpcmpeqq(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F38 | T_66 | T_EW1 | T_YMM | T_EVEX | T_MUST_EVEX | T_B64, 0x29); }
+void vpcmpgtb(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX, 0x64); }
+void vpcmpgtw(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_YMM | T_EVEX | T_MUST_EVEX, 0x65); }
+void vpcmpgtd(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_MUST_EVEX | T_B32, 0x66); }
+void vpcmpgtq(const Opmask& k, const Xmm& x, const Operand& op) { opAVX_K_X_XM(k, x, op, T_0F38 | T_66 | T_EW1 | T_YMM | T_EVEX | T_MUST_EVEX | T_B64, 0x37); }
void vmovdqa32(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_ER_X | T_ER_Y | T_ER_Z | T_MUST_EVEX, 0x6F); }
void vmovdqa64(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_ER_X | T_ER_Y | T_ER_Z | T_MUST_EVEX, 0x6F); }
void vmovdqu8(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, T_0F | T_F2 | T_EW0 | T_YMM | T_EVEX | T_ER_X | T_ER_Y | T_ER_Z | T_MUST_EVEX, 0x6F); }