cpuid - check that GRT CPUID leaf 7 subleaf 0 should return EAX=1
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h
index e6c2181..649bb4c 100644
--- a/xbyak/xbyak_util.h
+++ b/xbyak/xbyak_util.h
@@ -385,6 +385,7 @@
 		const unsigned int& EDX = data[3];
 		getCpuid(0, data);
 		const unsigned int maxNum = EAX;
+		unsigned int maxLeaf7Subleafs;
 		static const char intel[] = "ntel";
 		static const char amd[] = "cAMD";
 		if (ECX == get32bitAsBE(amd)) {
@@ -449,6 +450,7 @@
 #endif
 				{
 					getCpuidEx(7, 0, data);
+					maxLeaf7Subleafs = EAX;
 					if (EBX & (1U << 16)) type_ |= tAVX512F;
 					if (type_ & tAVX512F) {
 						if (EBX & (1U << 17)) type_ |= tAVX512DQ;
@@ -470,18 +472,18 @@
 						if (EDX & (1U << 3)) type_ |= tAVX512_4FMAPS;
 						if (EDX & (1U << 8)) type_ |= tAVX512_VP2INTERSECT;
 					}
-					// EAX=07H, ECX=1
-					getCpuidEx(7, 1, data);
-					if (type_ & tAVX512F) {
-						if (EAX & (1U << 5)) type_ |= tAVX512_BF16;
+					if (maxLeaf7Subleafs >= 1) {
+						getCpuidEx(7, 1, data); // EAX=07H, ECX=1
+						if (type_ & tAVX512F) {
+							if (EAX & (1U << 5)) type_ |= tAVX512_BF16;
+						}
 					}
 				}
-				getCpuidEx(7, 1, data);
-				if (EAX & (1U << 4)) type_ |= tAVX_VNNI;
 			}
 		}
 		if (maxNum >= 7) {
 			getCpuidEx(7, 0, data);
+			maxLeaf7Subleafs = EAX;
 			if (type_ & tAVX && (EBX & (1U << 5))) type_ |= tAVX2;
 			if (EBX & (1U << 3)) type_ |= tBMI1;
 			if (EBX & (1U << 8)) type_ |= tBMI2;
@@ -497,6 +499,10 @@
 			if (EDX & (1U << 24)) type_ |= tAMX_TILE;
 			if (EDX & (1U << 25)) type_ |= tAMX_INT8;
 			if (EDX & (1U << 22)) type_ |= tAMX_BF16;
+			if (maxLeaf7Subleafs >= 1) {
+				getCpuidEx(7, 1, data);
+				if (EAX & (1U << 4)) type_ |= tAVX_VNNI;
+			}
 		}
 		setFamily();
 		setNumCores();