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); }