introduce avx10.2 based isa
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index a158871..a7879e7 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -1881,10 +1881,11 @@
static const uint64_t T_SENTRY = (1ull << 38)-1; // attribute(>=T_SENTRY) is for error check
static const uint64_t T_ALLOW_DIFF_SIZE = 1ull << 38; // allow difference reg size
static const uint64_t T_ALLOW_ABCDH = 1ull << 39; // allow [abcd]h reg
+ static const uint64_t T_FP8 = 1ull << 40; // amx bf8 and hf8
// T_66 = 1, T_F3 = 2, T_F2 = 3
static inline uint32_t getPP(uint64_t type) { return (type & T_66) ? 1 : (type & T_F3) ? 2 : (type & T_F2) ? 3 : 0; }
// @@@end of avx_type_def.h
- static inline uint32_t getMap(uint64_t type) { return (type & T_0F) ? 1 : (type & T_0F38) ? 2 : (type & T_0F3A) ? 3 : 0; }
+ static inline uint32_t getMap(uint64_t type) { return (type & T_0F) ? 1 : (type & T_0F38) ? 2 : (type & T_0F3A) ? 3 : (type & T_FP8) ? 5 : 0; }
void vex(const Reg& reg, const Reg& base, const Operand *v, uint64_t type, int code, bool x = false)
{
int w = (type & T_W1) ? 1 : 0;
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h
index 6f06665..b851d66 100644
--- a/xbyak/xbyak_util.h
+++ b/xbyak/xbyak_util.h
@@ -548,6 +548,11 @@
XBYAK_DEFINE_TYPE(88, tSSE4a);
XBYAK_DEFINE_TYPE(89, tCLWB);
XBYAK_DEFINE_TYPE(90, tTSXLDTRK);
+ XBYAK_DEFINE_TYPE(91, tAMX_TRANSPOSE);
+ XBYAK_DEFINE_TYPE(92, tAMX_TF32);
+ XBYAK_DEFINE_TYPE(93, tAMX_AVX512);
+ XBYAK_DEFINE_TYPE(94, tAMX_MOVRS);
+ XBYAK_DEFINE_TYPE(95, tAMX_FP8);
#undef XBYAK_SPLIT_ID
#undef XBYAK_DEFINE_TYPE
@@ -708,6 +713,13 @@
if (EDX & (1U << 14)) type_ |= tPREFETCHITI;
if (EDX & (1U << 19)) type_ |= tAVX10;
if (EDX & (1U << 21)) type_ |= tAPX_F;
+
+ getCpuidEx(0x1e, 1, data);
+ if (EAX & (1U << 4)) type_ |= tAMX_FP8;
+ if (EAX & (1U << 5)) type_ |= tAMX_TRANSPOSE;
+ if (EAX & (1U << 6)) type_ |= tAMX_TF32;
+ if (EAX & (1U << 7)) type_ |= tAMX_AVX512;
+ if (EAX & (1U << 8)) type_ |= tAMX_MOVRS;
}
}
if (maxNum >= 0x19) {