add vmovdqa32, vmovdqa64
diff --git a/gen/gen_avx512.cpp b/gen/gen_avx512.cpp
index 8ab0cc2..cdadbca 100644
--- a/gen/gen_avx512.cpp
+++ b/gen/gen_avx512.cpp
@@ -114,10 +114,47 @@
 	}
 }
 
+// XM_X
+void putX_XM()
+{
+	const struct Tbl {
+		uint8 code;
+		const char *name;
+		int type;
+	} tbl[] = {
+		{ 0x6F, "vmovdqa32", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_EW0 | T_ER_X | T_ER_Y | T_ER_Z },
+		{ 0x6F, "vmovdqa64", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_EW1 | T_ER_X | T_ER_Y | T_ER_Z },
+	};
+	for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
+		const Tbl *p = &tbl[i];
+		std::string type = type2String(p->type);
+		printf("void %s(const Xmm& x, const Operand& op) { opAVX_X_XM_IMM(x, op, %s, 0x%02X); }\n", p->name, type.c_str(), p->code);
+	}
+}
+
+void putM_X()
+{
+	const struct Tbl {
+		uint8 code;
+		const char *name;
+		int type;
+	} tbl[] = {
+		{ 0x7F, "vmovdqa32", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_EW0 | T_ER_X | T_ER_Y | T_ER_Z },
+		{ 0x7F, "vmovdqa64", T_66 | T_0F | T_EVEX | T_MUST_EVEX | T_YMM | T_EW1 | T_ER_X | T_ER_Y | T_ER_Z },
+	};
+	for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
+		const Tbl *p = &tbl[i];
+		std::string type = type2String(p->type);
+		printf("void %s(const Address& addr, const Xmm& x) { opAVX_X_XM_IMM(x, addr, %s, 0x%02X); }\n", p->name, type.c_str(), p->code);
+	}
+}
+
 int main()
 {
-	puts("#ifdef XBYAK_AVX512");
+	puts("#ifndef XBYAK_DISABLE_AVX512");
 	putOpmask();
 	putVcmp();
+	putX_XM();
+	putM_X();
 	puts("#endif");
 }
diff --git a/test/make_nm.cpp b/test/make_nm.cpp
index 22575d9..29256d5 100644
--- a/test/make_nm.cpp
+++ b/test/make_nm.cpp
@@ -2618,6 +2618,8 @@
 	{
 		const char *tbl[] = {
 			"vmovddup",
+			"vmovdqa32",
+			"vmovdqa64",
 		};
 		for (size_t i = 0; i < NUM_OF_ARRAY(tbl); i++) {
 			const char *name = tbl[i];
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index e85c3f7..299d9db 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -24,7 +24,7 @@
 #include <iostream>
 #endif
 
-// #define XBYAK_AVX512
+// #define XBYAK_DISABLE_AVX512
 
 //#define XBYAK_USE_MMAP_ALLOCATOR
 #if !defined(__GNUC__) || defined(__MINGW32__)
@@ -2424,10 +2424,10 @@
 			nop();
 		}
 	}
-#endif
-#ifdef XBYAK_AVX512
+#ifndef XBYAK_DISABLE_AVX512
 #include "xbyak_avx512.h"
 #endif
+#endif
 };
 
 namespace util {
diff --git a/xbyak/xbyak_avx512.h b/xbyak/xbyak_avx512.h
index b0b06e7..3ecd81a 100644
--- a/xbyak/xbyak_avx512.h
+++ b/xbyak/xbyak_avx512.h
@@ -1,4 +1,4 @@
-#ifdef XBYAK_AVX512
+#ifndef XBYAK_DISABLE_AVX512
 void kaddw(const Opmask& r1, const Opmask& r2, const Opmask& r3) { opVex(r1, &r2, r3, T_L1 | T_0F | T_W0, 0x4A); }
 void kaddq(const Opmask& r1, const Opmask& r2, const Opmask& r3) { opVex(r1, &r2, r3, T_L1 | T_0F | T_W1, 0x4A); }
 void kaddb(const Opmask& r1, const Opmask& r2, const Opmask& r3) { opVex(r1, &r2, r3, T_L1 | T_0F | T_66 | T_W0, 0x4A); }
@@ -68,4 +68,8 @@
 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 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 vmovdqa32(const Address& addr, const Xmm& x) { opAVX_X_XM_IMM(x, addr, T_0F | T_66 | T_EW0 | T_YMM | T_EVEX | T_ER_X | T_ER_Y | T_ER_Z | T_MUST_EVEX, 0x7F); }
+void vmovdqa64(const Address& addr, const Xmm& x) { opAVX_X_XM_IMM(x, addr, T_0F | T_66 | T_EW1 | T_YMM | T_EVEX | T_ER_X | T_ER_Y | T_ER_Z | T_MUST_EVEX, 0x7F); }
 #endif