add enum of disp8N
diff --git a/gen/avx_type.hpp b/gen/avx_type.hpp
index b205c90..a319a95 100644
--- a/gen/avx_type.hpp
+++ b/gen/avx_type.hpp
@@ -1,30 +1,35 @@
 // copy CodeGenerator::AVXtype
-enum {
-	T_66 = 1 << 1,
-	T_F3 = 1 << 2,
-	T_F2 = 1 << 3,
-	T_0F = 1 << 5,
-	T_0F38 = 1 << 6,
-	T_0F3A = 1 << 7,
-	T_L0 = 1 << 8,
-	T_L1 = 1 << 9,
-	T_WIG = 1 << 10, // default
-	T_W0 = 1 << 11,
-	T_W1 = 1 << 12,
-	T_EW0 = 1 << 13,
-	T_EW1 = 1 << 14,
-	T_YMM = 1 << 15,
-	T_EVEX = 1 << 16,
-	T_ER_X = 1 << 17, // xmm{er}
-	T_ER_Y = 1 << 18, // ymm{er}
-	T_ER_Z = 1 << 19, // zmm{er}
-	T_SAE_X = 1 << 20, // xmm{sae}
-	T_SAE_Y = 1 << 21, // ymm{sae}
-	T_SAE_Z = 1 << 22, // zmm{sae}
-	T_MUST_EVEX = 1 << 23,
-	T_B32 = 1 << 24, // m32bcst
-	T_B64 = 1 << 25, // m64bcst
-	T_M_K = 1 << 26, // mem{k}
+enum AVXtype {
+	T_66 = 1 << 0,
+	T_F3 = 1 << 1,
+	T_F2 = 1 << 2,
+	T_0F = 1 << 3,
+	T_0F38 = 1 << 4,
+	T_0F3A = 1 << 5,
+	T_L0 = 1 << 6,
+	T_L1 = 1 << 7,
+	T_W0 = 1 << 8,
+	T_W1 = 1 << 9,
+	T_EW0 = 1 << 10,
+	T_EW1 = 1 << 11,
+	T_YMM = 1 << 12, // support YMM, ZMM
+	T_EVEX = 1 << 13,
+	T_ER_X = 1 << 14, // xmm{er}
+	T_ER_Y = 1 << 15, // ymm{er}
+	T_ER_Z = 1 << 16, // zmm{er}
+	T_SAE_X = 1 << 17, // xmm{sae}
+	T_SAE_Y = 1 << 18, // ymm{sae}
+	T_SAE_Z = 1 << 19, // zmm{sae}
+	T_MUST_EVEX = 1 << 20, // contains T_EVEX
+	T_B32 = 1 << 21, // m32bcst
+	T_B64 = 1 << 22, // m64bcst
+	T_M_K = 1 << 23, // mem{k}
+	T_N2 = 1 << 24,
+	T_N4 = 1 << 25,
+	T_N8 = 1 << 26,
+	T_N16 = 1 << 27,
+	T_N_VL = 1 << 28, // N * (1, 2, 4) for VL
+	T_DUP = 1 << 29, // N = (8, 32, 64)
 	T_XXX
 };
 
@@ -33,18 +38,6 @@
 std::string type2String(int type)
 {
 	std::string str;
-	if (type & T_0F) {
-		if (!str.empty()) str += " | ";
-		str += "T_0F";
-	}
-	if (type & T_0F38) {
-		if (!str.empty()) str += " | ";
-		str = "T_0F38";
-	}
-	if (type & T_0F3A) {
-		if (!str.empty()) str += " | ";
-		str = "T_0F3A";
-	}
 	if (type & T_66) {
 		if (!str.empty()) str += " | ";
 		str += "T_66";
@@ -57,6 +50,18 @@
 		if (!str.empty()) str += " | ";
 		str += "T_F2";
 	}
+	if (type & T_0F) {
+		if (!str.empty()) str += " | ";
+		str += "T_0F";
+	}
+	if (type & T_0F38) {
+		if (!str.empty()) str += " | ";
+		str = "T_0F38";
+	}
+	if (type & T_0F3A) {
+		if (!str.empty()) str += " | ";
+		str = "T_0F3A";
+	}
 	if (type & T_L0) {
 		if (!str.empty()) str += " | ";
 		str += "VEZ_L0";
@@ -129,5 +134,29 @@
 		if (!str.empty()) str += " | ";
 		str += "T_M_K";
 	}
+	if (type & T_N2) {
+		if (!str.empty()) str += " | ";
+		str += "T_N2";
+	}
+	if (type & T_N4) {
+		if (!str.empty()) str += " | ";
+		str += "T_N4";
+	}
+	if (type & T_N8) {
+		if (!str.empty()) str += " | ";
+		str += "T_N8";
+	}
+	if (type & T_N16) {
+		if (!str.empty()) str += " | ";
+		str += "T_N16";
+	}
+	if (type & T_N_VL) {
+		if (!str.empty()) str += " | ";
+		str += "T_N_VL";
+	}
+	if (type & T_DUP) {
+		if (!str.empty()) str += " | ";
+		str += "T_DUP";
+	}
 	return str;
 }
\ No newline at end of file
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index f926736..2b18ab8 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -1351,31 +1351,36 @@
 		if (rex) db(rex);
 	}
 	enum AVXtype {
-		T_66 = 1 << 1,
-		T_F3 = 1 << 2,
-		T_F2 = 1 << 3,
-		T_0F = 1 << 5,
-		T_0F38 = 1 << 6,
-		T_0F3A = 1 << 7,
-		T_L0 = 1 << 8,
-		T_L1 = 1 << 9,
-		T_WIG = 1 << 10, // default
-		T_W0 = 1 << 11,
-		T_W1 = 1 << 12,
-		T_EW0 = 1 << 13,
-		T_EW1 = 1 << 14,
-		T_YMM = 1 << 15, // support YMM, ZMM
-		T_EVEX = 1 << 16,
-		T_ER_X = 1 << 17, // xmm{er}
-		T_ER_Y = 1 << 18, // ymm{er}
-		T_ER_Z = 1 << 19, // zmm{er}
-		T_SAE_X = 1 << 20, // xmm{sae}
-		T_SAE_Y = 1 << 21, // ymm{sae}
-		T_SAE_Z = 1 << 22, // zmm{sae}
-		T_MUST_EVEX = 1 << 23, // contains T_EVEX
-		T_B32 = 1 << 24, // m32bcst
-		T_B64 = 1 << 25, // m64bcst
-		T_M_K = 1 << 26, // mem{k}
+		T_66 = 1 << 0,
+		T_F3 = 1 << 1,
+		T_F2 = 1 << 2,
+		T_0F = 1 << 3,
+		T_0F38 = 1 << 4,
+		T_0F3A = 1 << 5,
+		T_L0 = 1 << 6,
+		T_L1 = 1 << 7,
+		T_W0 = 1 << 8,
+		T_W1 = 1 << 9,
+		T_EW0 = 1 << 10,
+		T_EW1 = 1 << 11,
+		T_YMM = 1 << 12, // support YMM, ZMM
+		T_EVEX = 1 << 13,
+		T_ER_X = 1 << 14, // xmm{er}
+		T_ER_Y = 1 << 15, // ymm{er}
+		T_ER_Z = 1 << 16, // zmm{er}
+		T_SAE_X = 1 << 17, // xmm{sae}
+		T_SAE_Y = 1 << 18, // ymm{sae}
+		T_SAE_Z = 1 << 19, // zmm{sae}
+		T_MUST_EVEX = 1 << 20, // contains T_EVEX
+		T_B32 = 1 << 21, // m32bcst
+		T_B64 = 1 << 22, // m64bcst
+		T_M_K = 1 << 23, // mem{k}
+		T_N2 = 1 << 24,
+		T_N4 = 1 << 25,
+		T_N8 = 1 << 26,
+		T_N16 = 1 << 27,
+		T_N_VL = 1 << 28, // N * (1, 2, 4) for VL
+		T_DUP = 1 << 29, // N = (8, 32, 64)
 		T_XXX
 	};
 	void vex(const Reg& reg, const Reg& base, const Operand *v, int type, int code, bool x = false)