strict check of TMUL info main leaf
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h index 1c9118f..191ab4f 100644 --- a/xbyak/xbyak_util.h +++ b/xbyak/xbyak_util.h
@@ -750,12 +750,16 @@ if (edx & (1U << 21)) type_ |= tAPX_F; } if (maxNum >= 0x1e) { - getCpuidEx(0x1e, 1, data); - if (eax & (1U << 4)) type_ |= tAMX_FP8; -// if (eax & (1U << 5)) type_ |= tAMX_TRANSPOSE; // removed at 319433-059 - if (eax & (1U << 6)) type_ |= tAMX_TF32; - if (eax & (1U << 7)) type_ |= tAMX_AVX512; - if (eax & (1U << 8)) type_ |= tAMX_MOVRS; + getCpuidEx(0x1e, 0, data); + if (eax /* maxNumSubLeaves */ >= 1) { // 0 on SPR/EMR + getCpuidEx(0x1e, 1, data); + // eax bits 0-3 (AMX-INT8/BF16/COMPLEX/FP16) mirror the leaf 7 bits, so use leaf 7 + if (eax & (1U << 4)) type_ |= tAMX_FP8; +// if (eax & (1U << 5)) type_ |= tAMX_TRANSPOSE; // removed at 319433-059 + if (eax & (1U << 6)) type_ |= tAMX_TF32; + if (eax & (1U << 7)) type_ |= tAMX_AVX512; + if (eax & (1U << 8)) type_ |= tAMX_MOVRS; + } } } if (maxNum >= 0x19) {