@@ -135,13 +135,9 @@ enum ProcessorFeatures {
135135 FEATURE_AVX512BW ,
136136 FEATURE_AVX512DQ ,
137137 FEATURE_AVX512CD ,
138- FEATURE_AVX512ER ,
139- FEATURE_AVX512PF ,
140- FEATURE_AVX512VBMI ,
138+ FEATURE_AVX512VBMI = 26 ,
141139 FEATURE_AVX512IFMA ,
142- FEATURE_AVX5124VNNIW ,
143- FEATURE_AVX5124FMAPS ,
144- FEATURE_AVX512VPOPCNTDQ ,
140+ FEATURE_AVX512VPOPCNTDQ = 30 ,
145141 FEATURE_AVX512VBMI2 ,
146142 FEATURE_GFNI ,
147143 FEATURE_VPCLMULQDQ ,
@@ -181,8 +177,7 @@ enum ProcessorFeatures {
181177 // FEATURE_OSXSAVE,
182178 FEATURE_PCONFIG = 63 ,
183179 FEATURE_PKU ,
184- FEATURE_PREFETCHWT1 ,
185- FEATURE_PRFCHW ,
180+ FEATURE_PRFCHW = 66 ,
186181 FEATURE_PTWRITE ,
187182 FEATURE_RDPID ,
188183 FEATURE_RDRND ,
@@ -231,7 +226,11 @@ enum ProcessorFeatures {
231226 FEATURE_USERMSR ,
232227 FEATURE_AVX10_1 = 114 ,
233228 FEATURE_AVX10_2 = 116 ,
229+ FEATURE_AMX_AVX512 ,
230+ FEATURE_AMX_TF32 ,
231+ FEATURE_AMX_FP8 = 120 ,
234232 FEATURE_MOVRS ,
233+ FEATURE_AMX_MOVRS ,
235234 CPU_FEATURE_MAX
236235};
237236
@@ -961,10 +960,6 @@ static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
961960 setFeature (FEATURE_AVX512IFMA );
962961 if (HasLeaf7 && ((EBX >> 24 ) & 1 ))
963962 setFeature (FEATURE_CLWB );
964- if (HasLeaf7 && ((EBX >> 26 ) & 1 ) && HasAVX512Save )
965- setFeature (FEATURE_AVX512PF );
966- if (HasLeaf7 && ((EBX >> 27 ) & 1 ) && HasAVX512Save )
967- setFeature (FEATURE_AVX512ER );
968963 if (HasLeaf7 && ((EBX >> 28 ) & 1 ) && HasAVX512Save )
969964 setFeature (FEATURE_AVX512CD );
970965 if (HasLeaf7 && ((EBX >> 29 ) & 1 ))
@@ -974,8 +969,6 @@ static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
974969 if (HasLeaf7 && ((EBX >> 31 ) & 1 ) && HasAVX512Save )
975970 setFeature (FEATURE_AVX512VL );
976971
977- if (HasLeaf7 && ((ECX >> 0 ) & 1 ))
978- setFeature (FEATURE_PREFETCHWT1 );
979972 if (HasLeaf7 && ((ECX >> 1 ) & 1 ) && HasAVX512Save )
980973 setFeature (FEATURE_AVX512VBMI );
981974 if (HasLeaf7 && ((ECX >> 4 ) & 1 ))
@@ -1011,10 +1004,6 @@ static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
10111004 if (HasLeaf7 && ((ECX >> 29 ) & 1 ))
10121005 setFeature (FEATURE_ENQCMD );
10131006
1014- if (HasLeaf7 && ((EDX >> 2 ) & 1 ) && HasAVX512Save )
1015- setFeature (FEATURE_AVX5124VNNIW );
1016- if (HasLeaf7 && ((EDX >> 3 ) & 1 ) && HasAVX512Save )
1017- setFeature (FEATURE_AVX5124FMAPS );
10181007 if (HasLeaf7 && ((EDX >> 5 ) & 1 ))
10191008 setFeature (FEATURE_UINTR );
10201009 if (HasLeaf7 && ((EDX >> 8 ) & 1 ) && HasAVX512Save )
@@ -1088,6 +1077,17 @@ static void getAvailableFeatures(unsigned ECX, unsigned EDX, unsigned MaxLeaf,
10881077 if (HasLeafD && ((EAX >> 3 ) & 1 ) && HasAVXSave )
10891078 setFeature (FEATURE_XSAVES );
10901079
1080+ bool HasLeaf1E = MaxLevel >= 0x1e &&
1081+ !getX86CpuIDAndInfoEx (0x1e , 0x1 , & EAX , & EBX , & ECX , & EDX );
1082+ if (HasLeaf1E && (EAX & 0x10 ))
1083+ setFeature (FEATURE_AMX_FP8 );
1084+ if (HasLeaf1E && (EAX & 0x40 ))
1085+ setFeature (FEATURE_AMX_TF32 );
1086+ if (HasLeaf1E && (EAX & 0x80 ))
1087+ setFeature (FEATURE_AMX_AVX512 );
1088+ if (HasLeaf1E && (EAX & 0x100 ))
1089+ setFeature (FEATURE_AMX_MOVRS );
1090+
10911091 bool HasLeaf24 =
10921092 MaxLevel >= 0x24 && !getX86CpuIDAndInfo (0x24 , & EAX , & EBX , & ECX , & EDX );
10931093 if (HasLeaf7Subleaf1 && ((EDX >> 19 ) & 1 ) && HasLeaf24 ) {
0 commit comments