Message ID | 20230824184851.3204976-1-goldstein.w.n@gmail.com |
---|---|
State | New |
Headers | show |
Series | [v1] x86: Add support for AVX10 version and vec size in cpu-features | expand |
On Thu, Aug 24, 2023 at 11:48 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > This commit add support for the new AVX10 cpu features: > https://cdrdv2-public.intel.com/784267/355989-intel-avx10-spec.pdf > > We add checks for: > - `AVX10`: Check if AVX10 is present. > - `AVX10_V{1..255}`: Check if a given version is active. > - `AVX10_{X,Y,Z}MM`: Check if a given vec class has AVX10 support. > > The version checks are not ideal, the reason for the reason for this > is the version information in AVX10 is encoded as complete a byte > value, but the `CPU_FEATURES` interface is only able to query bools. > > To get around this, we add a feature for each possible version value > (starting at 1 as there is no AVX10 version 0). > > `make check` passes and cpuid output was checked against GNR/DMR on an > emulator. > --- > manual/platform.texi | 28 +++ > sysdeps/x86/bits/platform/x86.h | 281 ++++++++++++++++++++++++++++- > sysdeps/x86/cpu-features.c | 25 +++ > sysdeps/x86/include/cpu-features.h | 27 ++- > sysdeps/x86/sys/platform/x86.h | 40 ++++ > sysdeps/x86/tst-get-cpu-features.c | 263 +++++++++++++++++++++++++++ > 6 files changed, 661 insertions(+), 3 deletions(-) > > diff --git a/manual/platform.texi b/manual/platform.texi > index 2a2d557067..99dc57b568 100644 > --- a/manual/platform.texi > +++ b/manual/platform.texi > @@ -222,6 +222,22 @@ Leaf (EAX = 23H). > @item > @code{AVX} -- The AVX instruction extensions. > > +@item > +@code{AVX10} -- The AVX10 instruction extensions. > + > +@item > +@code{AVX10_XMM} -- Whether AVX10 includes xmm registers. > + > +@item > +@code{AVX10_YMM} -- Whether AVX10 includes ymm registers. > + > +@item > +@code{AVX10_ZMM} -- Whether AVX10 includes zmm registers. > + > +@item > +@code{AVX10_V1}..@code{AVX10_V255} -- Whether AVX10 supports a given > +version. > + > @item > @code{AVX2} -- The AVX2 instruction extensions. > > @@ -760,3 +776,15 @@ avx_active (void) > return CPU_FEATURE_ACTIVE (AVX); > @} > @end smallexample > + > +You could query @code{AVX10} version number with: > + > +@smallexample > +#include <sys/platform/x86.h> > + > +int > +has_avx10_version1 (void) > +@{ > + return CPU_FEATURE_ACTIVE (AVX10_V1); // Up to AVX10_V255 > +@} > +@end smallexample > diff --git a/sysdeps/x86/bits/platform/x86.h b/sysdeps/x86/bits/platform/x86.h > index 88ca071aa7..777fb6ce18 100644 > --- a/sysdeps/x86/bits/platform/x86.h > +++ b/sysdeps/x86/bits/platform/x86.h > @@ -30,7 +30,8 @@ enum > CPUID_INDEX_80000008, > CPUID_INDEX_7_ECX_1, > CPUID_INDEX_19, > - CPUID_INDEX_14_ECX_0 > + CPUID_INDEX_14_ECX_0, > + CPUID_INDEX_24_ECX_0 > }; > > struct cpuid_feature > @@ -312,6 +313,7 @@ enum > x86_cpu_AVX_NE_CONVERT = x86_cpu_index_7_ecx_1_edx + 5, > x86_cpu_AMX_COMPLEX = x86_cpu_index_7_ecx_1_edx + 8, > x86_cpu_PREFETCHI = x86_cpu_index_7_ecx_1_edx + 14, > + x86_cpu_AVX10 = x86_cpu_index_7_ecx_1_edx + 19, > x86_cpu_APX_F = x86_cpu_index_7_ecx_1_edx + 21, > > x86_cpu_index_19_ebx > @@ -325,5 +327,280 @@ enum > = (CPUID_INDEX_14_ECX_0 * 8 * 4 * sizeof (unsigned int) > + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), > > - x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4 > + x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4, > + > + x86_cpu_index_24_ecx_0_ebx > + = (CPUID_INDEX_24_ECX_0 * 8 * 4 * sizeof (unsigned int) > + + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), > + > + x86_cpu_AVX10_XMM = x86_cpu_index_24_ecx_0_ebx + 16, > + x86_cpu_AVX10_YMM = x86_cpu_index_24_ecx_0_ebx + 17, > + x86_cpu_AVX10_ZMM = x86_cpu_index_24_ecx_0_ebx + 18, > + > +/* AVX10 version information is handled differently from all other CPUID > + related logic. Rather than being encoded in cpuid as discrete booleans, the > + AVX10 version is encoded is a full byte that represents the version number > + (greater than or equal to 1). Since the CPUID API is only able to handle > + boolean returns, we enumerate `x86_cpu_AVX10_V{1..255}` which can be queried > + by the user and have special logic in `x86_cpu_{present,active}`. This is > + unpleasant on our end, but is the only way to make the existing API also > + support version queries. */ > + > + /* All 1s should never be a value feature index. */ > + x86_cpu_AVX10_V255 = ~0, > + x86_cpu_AVX10_V254 = x86_cpu_AVX10_V255 - 1, > + x86_cpu_AVX10_V253 = x86_cpu_AVX10_V254 - 1, > + x86_cpu_AVX10_V252 = x86_cpu_AVX10_V253 - 1, > + x86_cpu_AVX10_V251 = x86_cpu_AVX10_V252 - 1, > + x86_cpu_AVX10_V250 = x86_cpu_AVX10_V251 - 1, > + x86_cpu_AVX10_V249 = x86_cpu_AVX10_V250 - 1, > + x86_cpu_AVX10_V248 = x86_cpu_AVX10_V249 - 1, > + x86_cpu_AVX10_V247 = x86_cpu_AVX10_V248 - 1, > + x86_cpu_AVX10_V246 = x86_cpu_AVX10_V247 - 1, > + x86_cpu_AVX10_V245 = x86_cpu_AVX10_V246 - 1, > + x86_cpu_AVX10_V244 = x86_cpu_AVX10_V245 - 1, > + x86_cpu_AVX10_V243 = x86_cpu_AVX10_V244 - 1, > + x86_cpu_AVX10_V242 = x86_cpu_AVX10_V243 - 1, > + x86_cpu_AVX10_V241 = x86_cpu_AVX10_V242 - 1, > + x86_cpu_AVX10_V240 = x86_cpu_AVX10_V241 - 1, > + x86_cpu_AVX10_V239 = x86_cpu_AVX10_V240 - 1, > + x86_cpu_AVX10_V238 = x86_cpu_AVX10_V239 - 1, > + x86_cpu_AVX10_V237 = x86_cpu_AVX10_V238 - 1, > + x86_cpu_AVX10_V236 = x86_cpu_AVX10_V237 - 1, > + x86_cpu_AVX10_V235 = x86_cpu_AVX10_V236 - 1, > + x86_cpu_AVX10_V234 = x86_cpu_AVX10_V235 - 1, > + x86_cpu_AVX10_V233 = x86_cpu_AVX10_V234 - 1, > + x86_cpu_AVX10_V232 = x86_cpu_AVX10_V233 - 1, > + x86_cpu_AVX10_V231 = x86_cpu_AVX10_V232 - 1, > + x86_cpu_AVX10_V230 = x86_cpu_AVX10_V231 - 1, > + x86_cpu_AVX10_V229 = x86_cpu_AVX10_V230 - 1, > + x86_cpu_AVX10_V228 = x86_cpu_AVX10_V229 - 1, > + x86_cpu_AVX10_V227 = x86_cpu_AVX10_V228 - 1, > + x86_cpu_AVX10_V226 = x86_cpu_AVX10_V227 - 1, > + x86_cpu_AVX10_V225 = x86_cpu_AVX10_V226 - 1, > + x86_cpu_AVX10_V224 = x86_cpu_AVX10_V225 - 1, > + x86_cpu_AVX10_V223 = x86_cpu_AVX10_V224 - 1, > + x86_cpu_AVX10_V222 = x86_cpu_AVX10_V223 - 1, > + x86_cpu_AVX10_V221 = x86_cpu_AVX10_V222 - 1, > + x86_cpu_AVX10_V220 = x86_cpu_AVX10_V221 - 1, > + x86_cpu_AVX10_V219 = x86_cpu_AVX10_V220 - 1, > + x86_cpu_AVX10_V218 = x86_cpu_AVX10_V219 - 1, > + x86_cpu_AVX10_V217 = x86_cpu_AVX10_V218 - 1, > + x86_cpu_AVX10_V216 = x86_cpu_AVX10_V217 - 1, > + x86_cpu_AVX10_V215 = x86_cpu_AVX10_V216 - 1, > + x86_cpu_AVX10_V214 = x86_cpu_AVX10_V215 - 1, > + x86_cpu_AVX10_V213 = x86_cpu_AVX10_V214 - 1, > + x86_cpu_AVX10_V212 = x86_cpu_AVX10_V213 - 1, > + x86_cpu_AVX10_V211 = x86_cpu_AVX10_V212 - 1, > + x86_cpu_AVX10_V210 = x86_cpu_AVX10_V211 - 1, > + x86_cpu_AVX10_V209 = x86_cpu_AVX10_V210 - 1, > + x86_cpu_AVX10_V208 = x86_cpu_AVX10_V209 - 1, > + x86_cpu_AVX10_V207 = x86_cpu_AVX10_V208 - 1, > + x86_cpu_AVX10_V206 = x86_cpu_AVX10_V207 - 1, > + x86_cpu_AVX10_V205 = x86_cpu_AVX10_V206 - 1, > + x86_cpu_AVX10_V204 = x86_cpu_AVX10_V205 - 1, > + x86_cpu_AVX10_V203 = x86_cpu_AVX10_V204 - 1, > + x86_cpu_AVX10_V202 = x86_cpu_AVX10_V203 - 1, > + x86_cpu_AVX10_V201 = x86_cpu_AVX10_V202 - 1, > + x86_cpu_AVX10_V200 = x86_cpu_AVX10_V201 - 1, > + x86_cpu_AVX10_V199 = x86_cpu_AVX10_V200 - 1, > + x86_cpu_AVX10_V198 = x86_cpu_AVX10_V199 - 1, > + x86_cpu_AVX10_V197 = x86_cpu_AVX10_V198 - 1, > + x86_cpu_AVX10_V196 = x86_cpu_AVX10_V197 - 1, > + x86_cpu_AVX10_V195 = x86_cpu_AVX10_V196 - 1, > + x86_cpu_AVX10_V194 = x86_cpu_AVX10_V195 - 1, > + x86_cpu_AVX10_V193 = x86_cpu_AVX10_V194 - 1, > + x86_cpu_AVX10_V192 = x86_cpu_AVX10_V193 - 1, > + x86_cpu_AVX10_V191 = x86_cpu_AVX10_V192 - 1, > + x86_cpu_AVX10_V190 = x86_cpu_AVX10_V191 - 1, > + x86_cpu_AVX10_V189 = x86_cpu_AVX10_V190 - 1, > + x86_cpu_AVX10_V188 = x86_cpu_AVX10_V189 - 1, > + x86_cpu_AVX10_V187 = x86_cpu_AVX10_V188 - 1, > + x86_cpu_AVX10_V186 = x86_cpu_AVX10_V187 - 1, > + x86_cpu_AVX10_V185 = x86_cpu_AVX10_V186 - 1, > + x86_cpu_AVX10_V184 = x86_cpu_AVX10_V185 - 1, > + x86_cpu_AVX10_V183 = x86_cpu_AVX10_V184 - 1, > + x86_cpu_AVX10_V182 = x86_cpu_AVX10_V183 - 1, > + x86_cpu_AVX10_V181 = x86_cpu_AVX10_V182 - 1, > + x86_cpu_AVX10_V180 = x86_cpu_AVX10_V181 - 1, > + x86_cpu_AVX10_V179 = x86_cpu_AVX10_V180 - 1, > + x86_cpu_AVX10_V178 = x86_cpu_AVX10_V179 - 1, > + x86_cpu_AVX10_V177 = x86_cpu_AVX10_V178 - 1, > + x86_cpu_AVX10_V176 = x86_cpu_AVX10_V177 - 1, > + x86_cpu_AVX10_V175 = x86_cpu_AVX10_V176 - 1, > + x86_cpu_AVX10_V174 = x86_cpu_AVX10_V175 - 1, > + x86_cpu_AVX10_V173 = x86_cpu_AVX10_V174 - 1, > + x86_cpu_AVX10_V172 = x86_cpu_AVX10_V173 - 1, > + x86_cpu_AVX10_V171 = x86_cpu_AVX10_V172 - 1, > + x86_cpu_AVX10_V170 = x86_cpu_AVX10_V171 - 1, > + x86_cpu_AVX10_V169 = x86_cpu_AVX10_V170 - 1, > + x86_cpu_AVX10_V168 = x86_cpu_AVX10_V169 - 1, > + x86_cpu_AVX10_V167 = x86_cpu_AVX10_V168 - 1, > + x86_cpu_AVX10_V166 = x86_cpu_AVX10_V167 - 1, > + x86_cpu_AVX10_V165 = x86_cpu_AVX10_V166 - 1, > + x86_cpu_AVX10_V164 = x86_cpu_AVX10_V165 - 1, > + x86_cpu_AVX10_V163 = x86_cpu_AVX10_V164 - 1, > + x86_cpu_AVX10_V162 = x86_cpu_AVX10_V163 - 1, > + x86_cpu_AVX10_V161 = x86_cpu_AVX10_V162 - 1, > + x86_cpu_AVX10_V160 = x86_cpu_AVX10_V161 - 1, > + x86_cpu_AVX10_V159 = x86_cpu_AVX10_V160 - 1, > + x86_cpu_AVX10_V158 = x86_cpu_AVX10_V159 - 1, > + x86_cpu_AVX10_V157 = x86_cpu_AVX10_V158 - 1, > + x86_cpu_AVX10_V156 = x86_cpu_AVX10_V157 - 1, > + x86_cpu_AVX10_V155 = x86_cpu_AVX10_V156 - 1, > + x86_cpu_AVX10_V154 = x86_cpu_AVX10_V155 - 1, > + x86_cpu_AVX10_V153 = x86_cpu_AVX10_V154 - 1, > + x86_cpu_AVX10_V152 = x86_cpu_AVX10_V153 - 1, > + x86_cpu_AVX10_V151 = x86_cpu_AVX10_V152 - 1, > + x86_cpu_AVX10_V150 = x86_cpu_AVX10_V151 - 1, > + x86_cpu_AVX10_V149 = x86_cpu_AVX10_V150 - 1, > + x86_cpu_AVX10_V148 = x86_cpu_AVX10_V149 - 1, > + x86_cpu_AVX10_V147 = x86_cpu_AVX10_V148 - 1, > + x86_cpu_AVX10_V146 = x86_cpu_AVX10_V147 - 1, > + x86_cpu_AVX10_V145 = x86_cpu_AVX10_V146 - 1, > + x86_cpu_AVX10_V144 = x86_cpu_AVX10_V145 - 1, > + x86_cpu_AVX10_V143 = x86_cpu_AVX10_V144 - 1, > + x86_cpu_AVX10_V142 = x86_cpu_AVX10_V143 - 1, > + x86_cpu_AVX10_V141 = x86_cpu_AVX10_V142 - 1, > + x86_cpu_AVX10_V140 = x86_cpu_AVX10_V141 - 1, > + x86_cpu_AVX10_V139 = x86_cpu_AVX10_V140 - 1, > + x86_cpu_AVX10_V138 = x86_cpu_AVX10_V139 - 1, > + x86_cpu_AVX10_V137 = x86_cpu_AVX10_V138 - 1, > + x86_cpu_AVX10_V136 = x86_cpu_AVX10_V137 - 1, > + x86_cpu_AVX10_V135 = x86_cpu_AVX10_V136 - 1, > + x86_cpu_AVX10_V134 = x86_cpu_AVX10_V135 - 1, > + x86_cpu_AVX10_V133 = x86_cpu_AVX10_V134 - 1, > + x86_cpu_AVX10_V132 = x86_cpu_AVX10_V133 - 1, > + x86_cpu_AVX10_V131 = x86_cpu_AVX10_V132 - 1, > + x86_cpu_AVX10_V130 = x86_cpu_AVX10_V131 - 1, > + x86_cpu_AVX10_V129 = x86_cpu_AVX10_V130 - 1, > + x86_cpu_AVX10_V128 = x86_cpu_AVX10_V129 - 1, > + x86_cpu_AVX10_V127 = x86_cpu_AVX10_V128 - 1, > + x86_cpu_AVX10_V126 = x86_cpu_AVX10_V127 - 1, > + x86_cpu_AVX10_V125 = x86_cpu_AVX10_V126 - 1, > + x86_cpu_AVX10_V124 = x86_cpu_AVX10_V125 - 1, > + x86_cpu_AVX10_V123 = x86_cpu_AVX10_V124 - 1, > + x86_cpu_AVX10_V122 = x86_cpu_AVX10_V123 - 1, > + x86_cpu_AVX10_V121 = x86_cpu_AVX10_V122 - 1, > + x86_cpu_AVX10_V120 = x86_cpu_AVX10_V121 - 1, > + x86_cpu_AVX10_V119 = x86_cpu_AVX10_V120 - 1, > + x86_cpu_AVX10_V118 = x86_cpu_AVX10_V119 - 1, > + x86_cpu_AVX10_V117 = x86_cpu_AVX10_V118 - 1, > + x86_cpu_AVX10_V116 = x86_cpu_AVX10_V117 - 1, > + x86_cpu_AVX10_V115 = x86_cpu_AVX10_V116 - 1, > + x86_cpu_AVX10_V114 = x86_cpu_AVX10_V115 - 1, > + x86_cpu_AVX10_V113 = x86_cpu_AVX10_V114 - 1, > + x86_cpu_AVX10_V112 = x86_cpu_AVX10_V113 - 1, > + x86_cpu_AVX10_V111 = x86_cpu_AVX10_V112 - 1, > + x86_cpu_AVX10_V110 = x86_cpu_AVX10_V111 - 1, > + x86_cpu_AVX10_V109 = x86_cpu_AVX10_V110 - 1, > + x86_cpu_AVX10_V108 = x86_cpu_AVX10_V109 - 1, > + x86_cpu_AVX10_V107 = x86_cpu_AVX10_V108 - 1, > + x86_cpu_AVX10_V106 = x86_cpu_AVX10_V107 - 1, > + x86_cpu_AVX10_V105 = x86_cpu_AVX10_V106 - 1, > + x86_cpu_AVX10_V104 = x86_cpu_AVX10_V105 - 1, > + x86_cpu_AVX10_V103 = x86_cpu_AVX10_V104 - 1, > + x86_cpu_AVX10_V102 = x86_cpu_AVX10_V103 - 1, > + x86_cpu_AVX10_V101 = x86_cpu_AVX10_V102 - 1, > + x86_cpu_AVX10_V100 = x86_cpu_AVX10_V101 - 1, > + x86_cpu_AVX10_V99 = x86_cpu_AVX10_V100 - 1, > + x86_cpu_AVX10_V98 = x86_cpu_AVX10_V99 - 1, > + x86_cpu_AVX10_V97 = x86_cpu_AVX10_V98 - 1, > + x86_cpu_AVX10_V96 = x86_cpu_AVX10_V97 - 1, > + x86_cpu_AVX10_V95 = x86_cpu_AVX10_V96 - 1, > + x86_cpu_AVX10_V94 = x86_cpu_AVX10_V95 - 1, > + x86_cpu_AVX10_V93 = x86_cpu_AVX10_V94 - 1, > + x86_cpu_AVX10_V92 = x86_cpu_AVX10_V93 - 1, > + x86_cpu_AVX10_V91 = x86_cpu_AVX10_V92 - 1, > + x86_cpu_AVX10_V90 = x86_cpu_AVX10_V91 - 1, > + x86_cpu_AVX10_V89 = x86_cpu_AVX10_V90 - 1, > + x86_cpu_AVX10_V88 = x86_cpu_AVX10_V89 - 1, > + x86_cpu_AVX10_V87 = x86_cpu_AVX10_V88 - 1, > + x86_cpu_AVX10_V86 = x86_cpu_AVX10_V87 - 1, > + x86_cpu_AVX10_V85 = x86_cpu_AVX10_V86 - 1, > + x86_cpu_AVX10_V84 = x86_cpu_AVX10_V85 - 1, > + x86_cpu_AVX10_V83 = x86_cpu_AVX10_V84 - 1, > + x86_cpu_AVX10_V82 = x86_cpu_AVX10_V83 - 1, > + x86_cpu_AVX10_V81 = x86_cpu_AVX10_V82 - 1, > + x86_cpu_AVX10_V80 = x86_cpu_AVX10_V81 - 1, > + x86_cpu_AVX10_V79 = x86_cpu_AVX10_V80 - 1, > + x86_cpu_AVX10_V78 = x86_cpu_AVX10_V79 - 1, > + x86_cpu_AVX10_V77 = x86_cpu_AVX10_V78 - 1, > + x86_cpu_AVX10_V76 = x86_cpu_AVX10_V77 - 1, > + x86_cpu_AVX10_V75 = x86_cpu_AVX10_V76 - 1, > + x86_cpu_AVX10_V74 = x86_cpu_AVX10_V75 - 1, > + x86_cpu_AVX10_V73 = x86_cpu_AVX10_V74 - 1, > + x86_cpu_AVX10_V72 = x86_cpu_AVX10_V73 - 1, > + x86_cpu_AVX10_V71 = x86_cpu_AVX10_V72 - 1, > + x86_cpu_AVX10_V70 = x86_cpu_AVX10_V71 - 1, > + x86_cpu_AVX10_V69 = x86_cpu_AVX10_V70 - 1, > + x86_cpu_AVX10_V68 = x86_cpu_AVX10_V69 - 1, > + x86_cpu_AVX10_V67 = x86_cpu_AVX10_V68 - 1, > + x86_cpu_AVX10_V66 = x86_cpu_AVX10_V67 - 1, > + x86_cpu_AVX10_V65 = x86_cpu_AVX10_V66 - 1, > + x86_cpu_AVX10_V64 = x86_cpu_AVX10_V65 - 1, > + x86_cpu_AVX10_V63 = x86_cpu_AVX10_V64 - 1, > + x86_cpu_AVX10_V62 = x86_cpu_AVX10_V63 - 1, > + x86_cpu_AVX10_V61 = x86_cpu_AVX10_V62 - 1, > + x86_cpu_AVX10_V60 = x86_cpu_AVX10_V61 - 1, > + x86_cpu_AVX10_V59 = x86_cpu_AVX10_V60 - 1, > + x86_cpu_AVX10_V58 = x86_cpu_AVX10_V59 - 1, > + x86_cpu_AVX10_V57 = x86_cpu_AVX10_V58 - 1, > + x86_cpu_AVX10_V56 = x86_cpu_AVX10_V57 - 1, > + x86_cpu_AVX10_V55 = x86_cpu_AVX10_V56 - 1, > + x86_cpu_AVX10_V54 = x86_cpu_AVX10_V55 - 1, > + x86_cpu_AVX10_V53 = x86_cpu_AVX10_V54 - 1, > + x86_cpu_AVX10_V52 = x86_cpu_AVX10_V53 - 1, > + x86_cpu_AVX10_V51 = x86_cpu_AVX10_V52 - 1, > + x86_cpu_AVX10_V50 = x86_cpu_AVX10_V51 - 1, > + x86_cpu_AVX10_V49 = x86_cpu_AVX10_V50 - 1, > + x86_cpu_AVX10_V48 = x86_cpu_AVX10_V49 - 1, > + x86_cpu_AVX10_V47 = x86_cpu_AVX10_V48 - 1, > + x86_cpu_AVX10_V46 = x86_cpu_AVX10_V47 - 1, > + x86_cpu_AVX10_V45 = x86_cpu_AVX10_V46 - 1, > + x86_cpu_AVX10_V44 = x86_cpu_AVX10_V45 - 1, > + x86_cpu_AVX10_V43 = x86_cpu_AVX10_V44 - 1, > + x86_cpu_AVX10_V42 = x86_cpu_AVX10_V43 - 1, > + x86_cpu_AVX10_V41 = x86_cpu_AVX10_V42 - 1, > + x86_cpu_AVX10_V40 = x86_cpu_AVX10_V41 - 1, > + x86_cpu_AVX10_V39 = x86_cpu_AVX10_V40 - 1, > + x86_cpu_AVX10_V38 = x86_cpu_AVX10_V39 - 1, > + x86_cpu_AVX10_V37 = x86_cpu_AVX10_V38 - 1, > + x86_cpu_AVX10_V36 = x86_cpu_AVX10_V37 - 1, > + x86_cpu_AVX10_V35 = x86_cpu_AVX10_V36 - 1, > + x86_cpu_AVX10_V34 = x86_cpu_AVX10_V35 - 1, > + x86_cpu_AVX10_V33 = x86_cpu_AVX10_V34 - 1, > + x86_cpu_AVX10_V32 = x86_cpu_AVX10_V33 - 1, > + x86_cpu_AVX10_V31 = x86_cpu_AVX10_V32 - 1, > + x86_cpu_AVX10_V30 = x86_cpu_AVX10_V31 - 1, > + x86_cpu_AVX10_V29 = x86_cpu_AVX10_V30 - 1, > + x86_cpu_AVX10_V28 = x86_cpu_AVX10_V29 - 1, > + x86_cpu_AVX10_V27 = x86_cpu_AVX10_V28 - 1, > + x86_cpu_AVX10_V26 = x86_cpu_AVX10_V27 - 1, > + x86_cpu_AVX10_V25 = x86_cpu_AVX10_V26 - 1, > + x86_cpu_AVX10_V24 = x86_cpu_AVX10_V25 - 1, > + x86_cpu_AVX10_V23 = x86_cpu_AVX10_V24 - 1, > + x86_cpu_AVX10_V22 = x86_cpu_AVX10_V23 - 1, > + x86_cpu_AVX10_V21 = x86_cpu_AVX10_V22 - 1, > + x86_cpu_AVX10_V20 = x86_cpu_AVX10_V21 - 1, > + x86_cpu_AVX10_V19 = x86_cpu_AVX10_V20 - 1, > + x86_cpu_AVX10_V18 = x86_cpu_AVX10_V19 - 1, > + x86_cpu_AVX10_V17 = x86_cpu_AVX10_V18 - 1, > + x86_cpu_AVX10_V16 = x86_cpu_AVX10_V17 - 1, > + x86_cpu_AVX10_V15 = x86_cpu_AVX10_V16 - 1, > + x86_cpu_AVX10_V14 = x86_cpu_AVX10_V15 - 1, > + x86_cpu_AVX10_V13 = x86_cpu_AVX10_V14 - 1, > + x86_cpu_AVX10_V12 = x86_cpu_AVX10_V13 - 1, > + x86_cpu_AVX10_V11 = x86_cpu_AVX10_V12 - 1, > + x86_cpu_AVX10_V10 = x86_cpu_AVX10_V11 - 1, > + x86_cpu_AVX10_V9 = x86_cpu_AVX10_V10 - 1, > + x86_cpu_AVX10_V8 = x86_cpu_AVX10_V9 - 1, > + x86_cpu_AVX10_V7 = x86_cpu_AVX10_V8 - 1, > + x86_cpu_AVX10_V6 = x86_cpu_AVX10_V7 - 1, > + x86_cpu_AVX10_V5 = x86_cpu_AVX10_V6 - 1, > + x86_cpu_AVX10_V4 = x86_cpu_AVX10_V5 - 1, > + x86_cpu_AVX10_V3 = x86_cpu_AVX10_V4 - 1, > + x86_cpu_AVX10_V2 = x86_cpu_AVX10_V3 - 1, > + x86_cpu_AVX10_V1 = x86_cpu_AVX10_V2 - 1 > +/* x86_cpu_AVX10_V0 is invalid. */ > }; > diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c > index badf088874..b5846bc211 100644 > --- a/sysdeps/x86/cpu-features.c > +++ b/sysdeps/x86/cpu-features.c > @@ -115,11 +115,18 @@ update_active (struct cpu_features *cpu_features) > CPU_FEATURE_SET_ACTIVE (cpu_features, SHSTK); > #endif > > + enum > + { > + os_xmm = 1, > + os_ymm = 2, > + os_zmm = 4 > + } os_vector_size = os_xmm; > /* Can we call xgetbv? */ > if (CPU_FEATURES_CPU_P (cpu_features, OSXSAVE)) > { > unsigned int xcrlow; > unsigned int xcrhigh; > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10); > asm ("xgetbv" : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0)); > /* Is YMM and XMM state usable? */ > if ((xcrlow & (bit_YMM_state | bit_XMM_state)) > @@ -128,6 +135,7 @@ update_active (struct cpu_features *cpu_features) > /* Determine if AVX is usable. */ > if (CPU_FEATURES_CPU_P (cpu_features, AVX)) > { > + os_vector_size |= os_ymm; Wrong indentation. > CPU_FEATURE_SET (cpu_features, AVX); > /* The following features depend on AVX being usable. */ > /* Determine if AVX2 is usable. */ > @@ -166,6 +174,7 @@ update_active (struct cpu_features *cpu_features) > | bit_ZMM16_31_state)) > == (bit_Opmask_state | bit_ZMM0_15_state | bit_ZMM16_31_state)) > { > + os_vector_size |= os_zmm; > /* Determine if AVX512F is usable. */ > if (CPU_FEATURES_CPU_P (cpu_features, AVX512F)) > { > @@ -210,6 +219,22 @@ update_active (struct cpu_features *cpu_features) > } > } > > + if (CPU_FEATURES_CPU_P (cpu_features, AVX10) > + && cpu_features->basic.max_cpuid >= 0x24) > + { > + __cpuid_count ( > + 0x24, 0, cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.eax, > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ebx, > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ecx, > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.edx); > + if (os_vector_size & os_xmm) > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_XMM); > + if (os_vector_size & os_ymm) > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_YMM); > + if (os_vector_size & os_zmm) > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_ZMM); > + } > + > /* Are XTILECFG and XTILEDATA states usable? */ > if ((xcrlow & (bit_XTILECFG_state | bit_XTILEDATA_state)) > == (bit_XTILECFG_state | bit_XTILEDATA_state)) > diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h > index eb30d342a6..2d7427a6c0 100644 > --- a/sysdeps/x86/include/cpu-features.h > +++ b/sysdeps/x86/include/cpu-features.h > @@ -29,7 +29,7 @@ > > enum > { > - CPUID_INDEX_MAX = CPUID_INDEX_14_ECX_0 + 1 > + CPUID_INDEX_MAX = CPUID_INDEX_24_ECX_0 + 1 > }; > > enum > @@ -319,6 +319,7 @@ enum > #define bit_cpu_AVX_NE_CONVERT (1u << 5) > #define bit_cpu_AMX_COMPLEX (1u << 8) > #define bit_cpu_PREFETCHI (1u << 14) > +#define bit_cpu_AVX10 (1u << 19) > #define bit_cpu_APX_F (1u << 21) > > /* CPUID_INDEX_19. */ > @@ -332,6 +333,13 @@ enum > /* EBX. */ > #define bit_cpu_PTWRITE (1u << 4) > > +/* CPUID_INDEX_24_ECX_0. */ > + > +/* EBX. */ > +#define bit_cpu_AVX10_XMM (1u << 16) > +#define bit_cpu_AVX10_YMM (1u << 17) > +#define bit_cpu_AVX10_ZMM (1u << 18) > + > /* CPUID_INDEX_1. */ > > /* ECX. */ > @@ -563,6 +571,7 @@ enum > #define index_cpu_AVX_NE_CONVERT CPUID_INDEX_7_ECX_1 > #define index_cpu_AMX_COMPLEX CPUID_INDEX_7_ECX_1 > #define index_cpu_PREFETCHI CPUID_INDEX_7_ECX_1 > +#define index_cpu_AVX10 CPUID_INDEX_7_ECX_1 > #define index_cpu_APX_F CPUID_INDEX_7_ECX_1 > > /* CPUID_INDEX_19. */ > @@ -576,6 +585,13 @@ enum > /* EBX. */ > #define index_cpu_PTWRITE CPUID_INDEX_14_ECX_0 > > +/* CPUID_INDEX_24_ECX_0. */ > + > +/* EBX. */ > +#define index_cpu_AVX10_XMM CPUID_INDEX_24_ECX_0 > +#define index_cpu_AVX10_YMM CPUID_INDEX_24_ECX_0 > +#define index_cpu_AVX10_ZMM CPUID_INDEX_24_ECX_0 > + > /* CPUID_INDEX_1. */ > > /* ECX. */ > @@ -809,6 +825,7 @@ enum > #define reg_AVX_NE_CONVERT edx > #define reg_AMX_COMPLEX edx > #define reg_PREFETCHI edx > +#define reg_AVX10 edx > #define reg_APX_F edx > > /* CPUID_INDEX_19. */ > @@ -822,6 +839,14 @@ enum > /* EBX. */ > #define reg_PTWRITE ebx > > +/* CPUID_INDEX_24_ECX_0. */ > + > +/* EBX. */ > +#define reg_AVX10_XMM ebx > +#define reg_AVX10_YMM ebx > +#define reg_AVX10_ZMM ebx > + > + > /* PREFERRED_FEATURE_INDEX_1. First define the bitindex values > sequentially, then define the bit_arch* and index_arch_* lookup > constants. */ > diff --git a/sysdeps/x86/sys/platform/x86.h b/sysdeps/x86/sys/platform/x86.h > index 1ea2c5fc0b..fa8c7e158d 100644 > --- a/sysdeps/x86/sys/platform/x86.h > +++ b/sysdeps/x86/sys/platform/x86.h > @@ -29,9 +29,45 @@ __BEGIN_DECLS > extern const struct cpuid_feature *__x86_get_cpuid_feature_leaf (unsigned int) > __attribute__ ((pure)); > > +static __inline__ unsigned int > +x86_cpu_get_avx10_version_number_from_enum (unsigned int __enum) > +{ > + return __enum - x86_cpu_AVX10_V1 + 1; > +} > + > +static __inline__ _Bool > +x86_cpu_is_index_avx10_version_number (unsigned int __index) > +{ > + return __index >= (unsigned int) x86_cpu_AVX10_V1 > + && __index <= (unsigned int) x86_cpu_AVX10_V255; > +} > + > +static __inline__ unsigned int > +x86_cpu_get_avx10_info (unsigned int __index) > +{ > + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf ( > + __index / (8 * sizeof (unsigned int) * 4)); > + unsigned int __reg = __index & (8 * sizeof (unsigned int) * 4 - 1); > + __reg /= 8 * sizeof (unsigned int); > + > + return __ptr->cpuid_array[__reg]; > +} > + > +/* Get AVX10 version number in byte form. Must check AVX10 active first. Value > + is in range [1, 255]. */ > +static __inline__ unsigned int > +x86_cpu_get_avx10_version_number (void) > +{ > + return x86_cpu_get_avx10_info (x86_cpu_index_24_ecx_0_ebx) & 0xff; > +} > + > static __inline__ _Bool > x86_cpu_present (unsigned int __index) > { > + if (x86_cpu_is_index_avx10_version_number (__index)) > + return x86_cpu_get_avx10_version_number () > + >= x86_cpu_get_avx10_version_number_from_enum (__index); > + > const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf > (__index / (8 * sizeof (unsigned int) * 4)); > unsigned int __reg > @@ -45,6 +81,10 @@ x86_cpu_present (unsigned int __index) > static __inline__ _Bool > x86_cpu_active (unsigned int __index) > { > + if (x86_cpu_is_index_avx10_version_number (__index)) > + return x86_cpu_get_avx10_version_number () > + >= x86_cpu_get_avx10_version_number_from_enum (__index); > + > const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf > (__index / (8 * sizeof (unsigned int) * 4)); > unsigned int __reg > diff --git a/sysdeps/x86/tst-get-cpu-features.c b/sysdeps/x86/tst-get-cpu-features.c > index b27fa7324a..53e68431f1 100644 > --- a/sysdeps/x86/tst-get-cpu-features.c > +++ b/sysdeps/x86/tst-get-cpu-features.c > @@ -219,6 +219,7 @@ do_test (void) > CHECK_CPU_FEATURE_PRESENT (AVX_NE_CONVERT); > CHECK_CPU_FEATURE_PRESENT (AMX_COMPLEX); > CHECK_CPU_FEATURE_PRESENT (PREFETCHI); > + CHECK_CPU_FEATURE_PRESENT (AVX10); > CHECK_CPU_FEATURE_PRESENT (APX_F); > CHECK_CPU_FEATURE_PRESENT (AESKLE); > CHECK_CPU_FEATURE_PRESENT (WIDE_KL); > @@ -391,11 +392,273 @@ do_test (void) > CHECK_CPU_FEATURE_ACTIVE (AVX_NE_CONVERT); > CHECK_CPU_FEATURE_ACTIVE (AMX_COMPLEX); > CHECK_CPU_FEATURE_ACTIVE (PREFETCHI); > + CHECK_CPU_FEATURE_ACTIVE (AVX10); > CHECK_CPU_FEATURE_ACTIVE (APX_F); > CHECK_CPU_FEATURE_ACTIVE (AESKLE); > CHECK_CPU_FEATURE_ACTIVE (WIDE_KL); > CHECK_CPU_FEATURE_ACTIVE (PTWRITE); > > + if (CPU_FEATURE_ACTIVE (AVX10)) > + { > + CHECK_CPU_FEATURE_ACTIVE (AVX10_XMM); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_YMM); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_ZMM); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V1); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V2); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V3); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V4); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V5); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V6); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V7); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V8); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V9); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V10); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V11); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V12); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V13); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V14); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V15); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V16); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V17); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V18); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V19); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V20); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V21); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V22); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V23); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V24); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V25); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V26); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V27); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V28); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V29); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V30); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V31); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V32); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V33); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V34); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V35); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V36); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V37); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V38); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V39); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V40); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V41); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V42); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V43); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V44); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V45); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V46); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V47); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V48); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V49); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V50); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V51); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V52); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V53); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V54); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V55); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V56); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V57); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V58); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V59); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V60); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V61); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V62); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V63); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V64); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V65); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V66); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V67); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V68); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V69); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V70); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V71); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V72); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V73); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V74); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V75); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V76); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V77); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V78); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V79); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V80); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V81); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V82); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V83); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V84); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V85); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V86); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V87); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V88); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V89); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V90); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V91); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V92); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V93); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V94); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V95); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V96); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V97); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V98); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V99); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V100); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V101); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V102); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V103); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V104); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V105); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V106); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V107); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V108); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V109); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V110); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V111); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V112); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V113); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V114); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V115); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V116); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V117); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V118); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V119); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V120); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V121); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V122); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V123); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V124); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V125); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V126); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V127); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V128); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V129); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V130); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V131); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V132); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V133); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V134); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V135); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V136); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V137); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V138); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V139); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V140); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V141); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V142); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V143); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V144); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V145); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V146); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V147); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V148); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V149); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V150); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V151); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V152); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V153); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V154); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V155); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V156); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V157); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V158); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V159); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V160); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V161); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V162); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V163); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V164); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V165); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V166); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V167); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V168); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V169); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V170); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V171); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V172); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V173); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V174); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V175); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V176); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V177); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V178); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V179); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V180); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V181); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V182); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V183); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V184); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V185); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V186); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V187); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V188); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V189); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V190); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V191); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V192); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V193); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V194); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V195); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V196); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V197); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V198); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V199); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V200); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V201); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V202); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V203); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V204); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V205); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V206); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V207); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V208); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V209); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V210); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V211); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V212); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V213); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V214); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V215); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V216); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V217); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V218); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V219); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V220); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V221); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V222); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V223); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V224); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V225); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V226); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V227); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V228); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V229); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V230); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V231); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V232); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V233); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V234); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V235); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V236); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V237); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V238); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V239); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V240); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V241); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V242); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V243); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V244); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V245); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V246); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V247); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V248); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V249); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V250); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V251); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V252); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V253); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V254); > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V255); > + } > return 0; > } > > -- > 2.34.1 >
On Thu, Aug 24, 2023 at 2:01 PM H.J. Lu <hjl.tools@gmail.com> wrote: > > On Thu, Aug 24, 2023 at 11:48 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote: > > > > This commit add support for the new AVX10 cpu features: > > https://cdrdv2-public.intel.com/784267/355989-intel-avx10-spec.pdf > > > > We add checks for: > > - `AVX10`: Check if AVX10 is present. > > - `AVX10_V{1..255}`: Check if a given version is active. > > - `AVX10_{X,Y,Z}MM`: Check if a given vec class has AVX10 support. > > > > The version checks are not ideal, the reason for the reason for this > > is the version information in AVX10 is encoded as complete a byte > > value, but the `CPU_FEATURES` interface is only able to query bools. > > > > To get around this, we add a feature for each possible version value > > (starting at 1 as there is no AVX10 version 0). > > > > `make check` passes and cpuid output was checked against GNR/DMR on an > > emulator. > > --- > > manual/platform.texi | 28 +++ > > sysdeps/x86/bits/platform/x86.h | 281 ++++++++++++++++++++++++++++- > > sysdeps/x86/cpu-features.c | 25 +++ > > sysdeps/x86/include/cpu-features.h | 27 ++- > > sysdeps/x86/sys/platform/x86.h | 40 ++++ > > sysdeps/x86/tst-get-cpu-features.c | 263 +++++++++++++++++++++++++++ > > 6 files changed, 661 insertions(+), 3 deletions(-) > > > > diff --git a/manual/platform.texi b/manual/platform.texi > > index 2a2d557067..99dc57b568 100644 > > --- a/manual/platform.texi > > +++ b/manual/platform.texi > > @@ -222,6 +222,22 @@ Leaf (EAX = 23H). > > @item > > @code{AVX} -- The AVX instruction extensions. > > > > +@item > > +@code{AVX10} -- The AVX10 instruction extensions. > > + > > +@item > > +@code{AVX10_XMM} -- Whether AVX10 includes xmm registers. > > + > > +@item > > +@code{AVX10_YMM} -- Whether AVX10 includes ymm registers. > > + > > +@item > > +@code{AVX10_ZMM} -- Whether AVX10 includes zmm registers. > > + > > +@item > > +@code{AVX10_V1}..@code{AVX10_V255} -- Whether AVX10 supports a given > > +version. > > + > > @item > > @code{AVX2} -- The AVX2 instruction extensions. > > > > @@ -760,3 +776,15 @@ avx_active (void) > > return CPU_FEATURE_ACTIVE (AVX); > > @} > > @end smallexample > > + > > +You could query @code{AVX10} version number with: > > + > > +@smallexample > > +#include <sys/platform/x86.h> > > + > > +int > > +has_avx10_version1 (void) > > +@{ > > + return CPU_FEATURE_ACTIVE (AVX10_V1); // Up to AVX10_V255 > > +@} > > +@end smallexample > > diff --git a/sysdeps/x86/bits/platform/x86.h b/sysdeps/x86/bits/platform/x86.h > > index 88ca071aa7..777fb6ce18 100644 > > --- a/sysdeps/x86/bits/platform/x86.h > > +++ b/sysdeps/x86/bits/platform/x86.h > > @@ -30,7 +30,8 @@ enum > > CPUID_INDEX_80000008, > > CPUID_INDEX_7_ECX_1, > > CPUID_INDEX_19, > > - CPUID_INDEX_14_ECX_0 > > + CPUID_INDEX_14_ECX_0, > > + CPUID_INDEX_24_ECX_0 > > }; > > > > struct cpuid_feature > > @@ -312,6 +313,7 @@ enum > > x86_cpu_AVX_NE_CONVERT = x86_cpu_index_7_ecx_1_edx + 5, > > x86_cpu_AMX_COMPLEX = x86_cpu_index_7_ecx_1_edx + 8, > > x86_cpu_PREFETCHI = x86_cpu_index_7_ecx_1_edx + 14, > > + x86_cpu_AVX10 = x86_cpu_index_7_ecx_1_edx + 19, > > x86_cpu_APX_F = x86_cpu_index_7_ecx_1_edx + 21, > > > > x86_cpu_index_19_ebx > > @@ -325,5 +327,280 @@ enum > > = (CPUID_INDEX_14_ECX_0 * 8 * 4 * sizeof (unsigned int) > > + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), > > > > - x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4 > > + x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4, > > + > > + x86_cpu_index_24_ecx_0_ebx > > + = (CPUID_INDEX_24_ECX_0 * 8 * 4 * sizeof (unsigned int) > > + + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), > > + > > + x86_cpu_AVX10_XMM = x86_cpu_index_24_ecx_0_ebx + 16, > > + x86_cpu_AVX10_YMM = x86_cpu_index_24_ecx_0_ebx + 17, > > + x86_cpu_AVX10_ZMM = x86_cpu_index_24_ecx_0_ebx + 18, > > + > > +/* AVX10 version information is handled differently from all other CPUID > > + related logic. Rather than being encoded in cpuid as discrete booleans, the > > + AVX10 version is encoded is a full byte that represents the version number > > + (greater than or equal to 1). Since the CPUID API is only able to handle > > + boolean returns, we enumerate `x86_cpu_AVX10_V{1..255}` which can be queried > > + by the user and have special logic in `x86_cpu_{present,active}`. This is > > + unpleasant on our end, but is the only way to make the existing API also > > + support version queries. */ > > + > > + /* All 1s should never be a value feature index. */ > > + x86_cpu_AVX10_V255 = ~0, > > + x86_cpu_AVX10_V254 = x86_cpu_AVX10_V255 - 1, > > + x86_cpu_AVX10_V253 = x86_cpu_AVX10_V254 - 1, > > + x86_cpu_AVX10_V252 = x86_cpu_AVX10_V253 - 1, > > + x86_cpu_AVX10_V251 = x86_cpu_AVX10_V252 - 1, > > + x86_cpu_AVX10_V250 = x86_cpu_AVX10_V251 - 1, > > + x86_cpu_AVX10_V249 = x86_cpu_AVX10_V250 - 1, > > + x86_cpu_AVX10_V248 = x86_cpu_AVX10_V249 - 1, > > + x86_cpu_AVX10_V247 = x86_cpu_AVX10_V248 - 1, > > + x86_cpu_AVX10_V246 = x86_cpu_AVX10_V247 - 1, > > + x86_cpu_AVX10_V245 = x86_cpu_AVX10_V246 - 1, > > + x86_cpu_AVX10_V244 = x86_cpu_AVX10_V245 - 1, > > + x86_cpu_AVX10_V243 = x86_cpu_AVX10_V244 - 1, > > + x86_cpu_AVX10_V242 = x86_cpu_AVX10_V243 - 1, > > + x86_cpu_AVX10_V241 = x86_cpu_AVX10_V242 - 1, > > + x86_cpu_AVX10_V240 = x86_cpu_AVX10_V241 - 1, > > + x86_cpu_AVX10_V239 = x86_cpu_AVX10_V240 - 1, > > + x86_cpu_AVX10_V238 = x86_cpu_AVX10_V239 - 1, > > + x86_cpu_AVX10_V237 = x86_cpu_AVX10_V238 - 1, > > + x86_cpu_AVX10_V236 = x86_cpu_AVX10_V237 - 1, > > + x86_cpu_AVX10_V235 = x86_cpu_AVX10_V236 - 1, > > + x86_cpu_AVX10_V234 = x86_cpu_AVX10_V235 - 1, > > + x86_cpu_AVX10_V233 = x86_cpu_AVX10_V234 - 1, > > + x86_cpu_AVX10_V232 = x86_cpu_AVX10_V233 - 1, > > + x86_cpu_AVX10_V231 = x86_cpu_AVX10_V232 - 1, > > + x86_cpu_AVX10_V230 = x86_cpu_AVX10_V231 - 1, > > + x86_cpu_AVX10_V229 = x86_cpu_AVX10_V230 - 1, > > + x86_cpu_AVX10_V228 = x86_cpu_AVX10_V229 - 1, > > + x86_cpu_AVX10_V227 = x86_cpu_AVX10_V228 - 1, > > + x86_cpu_AVX10_V226 = x86_cpu_AVX10_V227 - 1, > > + x86_cpu_AVX10_V225 = x86_cpu_AVX10_V226 - 1, > > + x86_cpu_AVX10_V224 = x86_cpu_AVX10_V225 - 1, > > + x86_cpu_AVX10_V223 = x86_cpu_AVX10_V224 - 1, > > + x86_cpu_AVX10_V222 = x86_cpu_AVX10_V223 - 1, > > + x86_cpu_AVX10_V221 = x86_cpu_AVX10_V222 - 1, > > + x86_cpu_AVX10_V220 = x86_cpu_AVX10_V221 - 1, > > + x86_cpu_AVX10_V219 = x86_cpu_AVX10_V220 - 1, > > + x86_cpu_AVX10_V218 = x86_cpu_AVX10_V219 - 1, > > + x86_cpu_AVX10_V217 = x86_cpu_AVX10_V218 - 1, > > + x86_cpu_AVX10_V216 = x86_cpu_AVX10_V217 - 1, > > + x86_cpu_AVX10_V215 = x86_cpu_AVX10_V216 - 1, > > + x86_cpu_AVX10_V214 = x86_cpu_AVX10_V215 - 1, > > + x86_cpu_AVX10_V213 = x86_cpu_AVX10_V214 - 1, > > + x86_cpu_AVX10_V212 = x86_cpu_AVX10_V213 - 1, > > + x86_cpu_AVX10_V211 = x86_cpu_AVX10_V212 - 1, > > + x86_cpu_AVX10_V210 = x86_cpu_AVX10_V211 - 1, > > + x86_cpu_AVX10_V209 = x86_cpu_AVX10_V210 - 1, > > + x86_cpu_AVX10_V208 = x86_cpu_AVX10_V209 - 1, > > + x86_cpu_AVX10_V207 = x86_cpu_AVX10_V208 - 1, > > + x86_cpu_AVX10_V206 = x86_cpu_AVX10_V207 - 1, > > + x86_cpu_AVX10_V205 = x86_cpu_AVX10_V206 - 1, > > + x86_cpu_AVX10_V204 = x86_cpu_AVX10_V205 - 1, > > + x86_cpu_AVX10_V203 = x86_cpu_AVX10_V204 - 1, > > + x86_cpu_AVX10_V202 = x86_cpu_AVX10_V203 - 1, > > + x86_cpu_AVX10_V201 = x86_cpu_AVX10_V202 - 1, > > + x86_cpu_AVX10_V200 = x86_cpu_AVX10_V201 - 1, > > + x86_cpu_AVX10_V199 = x86_cpu_AVX10_V200 - 1, > > + x86_cpu_AVX10_V198 = x86_cpu_AVX10_V199 - 1, > > + x86_cpu_AVX10_V197 = x86_cpu_AVX10_V198 - 1, > > + x86_cpu_AVX10_V196 = x86_cpu_AVX10_V197 - 1, > > + x86_cpu_AVX10_V195 = x86_cpu_AVX10_V196 - 1, > > + x86_cpu_AVX10_V194 = x86_cpu_AVX10_V195 - 1, > > + x86_cpu_AVX10_V193 = x86_cpu_AVX10_V194 - 1, > > + x86_cpu_AVX10_V192 = x86_cpu_AVX10_V193 - 1, > > + x86_cpu_AVX10_V191 = x86_cpu_AVX10_V192 - 1, > > + x86_cpu_AVX10_V190 = x86_cpu_AVX10_V191 - 1, > > + x86_cpu_AVX10_V189 = x86_cpu_AVX10_V190 - 1, > > + x86_cpu_AVX10_V188 = x86_cpu_AVX10_V189 - 1, > > + x86_cpu_AVX10_V187 = x86_cpu_AVX10_V188 - 1, > > + x86_cpu_AVX10_V186 = x86_cpu_AVX10_V187 - 1, > > + x86_cpu_AVX10_V185 = x86_cpu_AVX10_V186 - 1, > > + x86_cpu_AVX10_V184 = x86_cpu_AVX10_V185 - 1, > > + x86_cpu_AVX10_V183 = x86_cpu_AVX10_V184 - 1, > > + x86_cpu_AVX10_V182 = x86_cpu_AVX10_V183 - 1, > > + x86_cpu_AVX10_V181 = x86_cpu_AVX10_V182 - 1, > > + x86_cpu_AVX10_V180 = x86_cpu_AVX10_V181 - 1, > > + x86_cpu_AVX10_V179 = x86_cpu_AVX10_V180 - 1, > > + x86_cpu_AVX10_V178 = x86_cpu_AVX10_V179 - 1, > > + x86_cpu_AVX10_V177 = x86_cpu_AVX10_V178 - 1, > > + x86_cpu_AVX10_V176 = x86_cpu_AVX10_V177 - 1, > > + x86_cpu_AVX10_V175 = x86_cpu_AVX10_V176 - 1, > > + x86_cpu_AVX10_V174 = x86_cpu_AVX10_V175 - 1, > > + x86_cpu_AVX10_V173 = x86_cpu_AVX10_V174 - 1, > > + x86_cpu_AVX10_V172 = x86_cpu_AVX10_V173 - 1, > > + x86_cpu_AVX10_V171 = x86_cpu_AVX10_V172 - 1, > > + x86_cpu_AVX10_V170 = x86_cpu_AVX10_V171 - 1, > > + x86_cpu_AVX10_V169 = x86_cpu_AVX10_V170 - 1, > > + x86_cpu_AVX10_V168 = x86_cpu_AVX10_V169 - 1, > > + x86_cpu_AVX10_V167 = x86_cpu_AVX10_V168 - 1, > > + x86_cpu_AVX10_V166 = x86_cpu_AVX10_V167 - 1, > > + x86_cpu_AVX10_V165 = x86_cpu_AVX10_V166 - 1, > > + x86_cpu_AVX10_V164 = x86_cpu_AVX10_V165 - 1, > > + x86_cpu_AVX10_V163 = x86_cpu_AVX10_V164 - 1, > > + x86_cpu_AVX10_V162 = x86_cpu_AVX10_V163 - 1, > > + x86_cpu_AVX10_V161 = x86_cpu_AVX10_V162 - 1, > > + x86_cpu_AVX10_V160 = x86_cpu_AVX10_V161 - 1, > > + x86_cpu_AVX10_V159 = x86_cpu_AVX10_V160 - 1, > > + x86_cpu_AVX10_V158 = x86_cpu_AVX10_V159 - 1, > > + x86_cpu_AVX10_V157 = x86_cpu_AVX10_V158 - 1, > > + x86_cpu_AVX10_V156 = x86_cpu_AVX10_V157 - 1, > > + x86_cpu_AVX10_V155 = x86_cpu_AVX10_V156 - 1, > > + x86_cpu_AVX10_V154 = x86_cpu_AVX10_V155 - 1, > > + x86_cpu_AVX10_V153 = x86_cpu_AVX10_V154 - 1, > > + x86_cpu_AVX10_V152 = x86_cpu_AVX10_V153 - 1, > > + x86_cpu_AVX10_V151 = x86_cpu_AVX10_V152 - 1, > > + x86_cpu_AVX10_V150 = x86_cpu_AVX10_V151 - 1, > > + x86_cpu_AVX10_V149 = x86_cpu_AVX10_V150 - 1, > > + x86_cpu_AVX10_V148 = x86_cpu_AVX10_V149 - 1, > > + x86_cpu_AVX10_V147 = x86_cpu_AVX10_V148 - 1, > > + x86_cpu_AVX10_V146 = x86_cpu_AVX10_V147 - 1, > > + x86_cpu_AVX10_V145 = x86_cpu_AVX10_V146 - 1, > > + x86_cpu_AVX10_V144 = x86_cpu_AVX10_V145 - 1, > > + x86_cpu_AVX10_V143 = x86_cpu_AVX10_V144 - 1, > > + x86_cpu_AVX10_V142 = x86_cpu_AVX10_V143 - 1, > > + x86_cpu_AVX10_V141 = x86_cpu_AVX10_V142 - 1, > > + x86_cpu_AVX10_V140 = x86_cpu_AVX10_V141 - 1, > > + x86_cpu_AVX10_V139 = x86_cpu_AVX10_V140 - 1, > > + x86_cpu_AVX10_V138 = x86_cpu_AVX10_V139 - 1, > > + x86_cpu_AVX10_V137 = x86_cpu_AVX10_V138 - 1, > > + x86_cpu_AVX10_V136 = x86_cpu_AVX10_V137 - 1, > > + x86_cpu_AVX10_V135 = x86_cpu_AVX10_V136 - 1, > > + x86_cpu_AVX10_V134 = x86_cpu_AVX10_V135 - 1, > > + x86_cpu_AVX10_V133 = x86_cpu_AVX10_V134 - 1, > > + x86_cpu_AVX10_V132 = x86_cpu_AVX10_V133 - 1, > > + x86_cpu_AVX10_V131 = x86_cpu_AVX10_V132 - 1, > > + x86_cpu_AVX10_V130 = x86_cpu_AVX10_V131 - 1, > > + x86_cpu_AVX10_V129 = x86_cpu_AVX10_V130 - 1, > > + x86_cpu_AVX10_V128 = x86_cpu_AVX10_V129 - 1, > > + x86_cpu_AVX10_V127 = x86_cpu_AVX10_V128 - 1, > > + x86_cpu_AVX10_V126 = x86_cpu_AVX10_V127 - 1, > > + x86_cpu_AVX10_V125 = x86_cpu_AVX10_V126 - 1, > > + x86_cpu_AVX10_V124 = x86_cpu_AVX10_V125 - 1, > > + x86_cpu_AVX10_V123 = x86_cpu_AVX10_V124 - 1, > > + x86_cpu_AVX10_V122 = x86_cpu_AVX10_V123 - 1, > > + x86_cpu_AVX10_V121 = x86_cpu_AVX10_V122 - 1, > > + x86_cpu_AVX10_V120 = x86_cpu_AVX10_V121 - 1, > > + x86_cpu_AVX10_V119 = x86_cpu_AVX10_V120 - 1, > > + x86_cpu_AVX10_V118 = x86_cpu_AVX10_V119 - 1, > > + x86_cpu_AVX10_V117 = x86_cpu_AVX10_V118 - 1, > > + x86_cpu_AVX10_V116 = x86_cpu_AVX10_V117 - 1, > > + x86_cpu_AVX10_V115 = x86_cpu_AVX10_V116 - 1, > > + x86_cpu_AVX10_V114 = x86_cpu_AVX10_V115 - 1, > > + x86_cpu_AVX10_V113 = x86_cpu_AVX10_V114 - 1, > > + x86_cpu_AVX10_V112 = x86_cpu_AVX10_V113 - 1, > > + x86_cpu_AVX10_V111 = x86_cpu_AVX10_V112 - 1, > > + x86_cpu_AVX10_V110 = x86_cpu_AVX10_V111 - 1, > > + x86_cpu_AVX10_V109 = x86_cpu_AVX10_V110 - 1, > > + x86_cpu_AVX10_V108 = x86_cpu_AVX10_V109 - 1, > > + x86_cpu_AVX10_V107 = x86_cpu_AVX10_V108 - 1, > > + x86_cpu_AVX10_V106 = x86_cpu_AVX10_V107 - 1, > > + x86_cpu_AVX10_V105 = x86_cpu_AVX10_V106 - 1, > > + x86_cpu_AVX10_V104 = x86_cpu_AVX10_V105 - 1, > > + x86_cpu_AVX10_V103 = x86_cpu_AVX10_V104 - 1, > > + x86_cpu_AVX10_V102 = x86_cpu_AVX10_V103 - 1, > > + x86_cpu_AVX10_V101 = x86_cpu_AVX10_V102 - 1, > > + x86_cpu_AVX10_V100 = x86_cpu_AVX10_V101 - 1, > > + x86_cpu_AVX10_V99 = x86_cpu_AVX10_V100 - 1, > > + x86_cpu_AVX10_V98 = x86_cpu_AVX10_V99 - 1, > > + x86_cpu_AVX10_V97 = x86_cpu_AVX10_V98 - 1, > > + x86_cpu_AVX10_V96 = x86_cpu_AVX10_V97 - 1, > > + x86_cpu_AVX10_V95 = x86_cpu_AVX10_V96 - 1, > > + x86_cpu_AVX10_V94 = x86_cpu_AVX10_V95 - 1, > > + x86_cpu_AVX10_V93 = x86_cpu_AVX10_V94 - 1, > > + x86_cpu_AVX10_V92 = x86_cpu_AVX10_V93 - 1, > > + x86_cpu_AVX10_V91 = x86_cpu_AVX10_V92 - 1, > > + x86_cpu_AVX10_V90 = x86_cpu_AVX10_V91 - 1, > > + x86_cpu_AVX10_V89 = x86_cpu_AVX10_V90 - 1, > > + x86_cpu_AVX10_V88 = x86_cpu_AVX10_V89 - 1, > > + x86_cpu_AVX10_V87 = x86_cpu_AVX10_V88 - 1, > > + x86_cpu_AVX10_V86 = x86_cpu_AVX10_V87 - 1, > > + x86_cpu_AVX10_V85 = x86_cpu_AVX10_V86 - 1, > > + x86_cpu_AVX10_V84 = x86_cpu_AVX10_V85 - 1, > > + x86_cpu_AVX10_V83 = x86_cpu_AVX10_V84 - 1, > > + x86_cpu_AVX10_V82 = x86_cpu_AVX10_V83 - 1, > > + x86_cpu_AVX10_V81 = x86_cpu_AVX10_V82 - 1, > > + x86_cpu_AVX10_V80 = x86_cpu_AVX10_V81 - 1, > > + x86_cpu_AVX10_V79 = x86_cpu_AVX10_V80 - 1, > > + x86_cpu_AVX10_V78 = x86_cpu_AVX10_V79 - 1, > > + x86_cpu_AVX10_V77 = x86_cpu_AVX10_V78 - 1, > > + x86_cpu_AVX10_V76 = x86_cpu_AVX10_V77 - 1, > > + x86_cpu_AVX10_V75 = x86_cpu_AVX10_V76 - 1, > > + x86_cpu_AVX10_V74 = x86_cpu_AVX10_V75 - 1, > > + x86_cpu_AVX10_V73 = x86_cpu_AVX10_V74 - 1, > > + x86_cpu_AVX10_V72 = x86_cpu_AVX10_V73 - 1, > > + x86_cpu_AVX10_V71 = x86_cpu_AVX10_V72 - 1, > > + x86_cpu_AVX10_V70 = x86_cpu_AVX10_V71 - 1, > > + x86_cpu_AVX10_V69 = x86_cpu_AVX10_V70 - 1, > > + x86_cpu_AVX10_V68 = x86_cpu_AVX10_V69 - 1, > > + x86_cpu_AVX10_V67 = x86_cpu_AVX10_V68 - 1, > > + x86_cpu_AVX10_V66 = x86_cpu_AVX10_V67 - 1, > > + x86_cpu_AVX10_V65 = x86_cpu_AVX10_V66 - 1, > > + x86_cpu_AVX10_V64 = x86_cpu_AVX10_V65 - 1, > > + x86_cpu_AVX10_V63 = x86_cpu_AVX10_V64 - 1, > > + x86_cpu_AVX10_V62 = x86_cpu_AVX10_V63 - 1, > > + x86_cpu_AVX10_V61 = x86_cpu_AVX10_V62 - 1, > > + x86_cpu_AVX10_V60 = x86_cpu_AVX10_V61 - 1, > > + x86_cpu_AVX10_V59 = x86_cpu_AVX10_V60 - 1, > > + x86_cpu_AVX10_V58 = x86_cpu_AVX10_V59 - 1, > > + x86_cpu_AVX10_V57 = x86_cpu_AVX10_V58 - 1, > > + x86_cpu_AVX10_V56 = x86_cpu_AVX10_V57 - 1, > > + x86_cpu_AVX10_V55 = x86_cpu_AVX10_V56 - 1, > > + x86_cpu_AVX10_V54 = x86_cpu_AVX10_V55 - 1, > > + x86_cpu_AVX10_V53 = x86_cpu_AVX10_V54 - 1, > > + x86_cpu_AVX10_V52 = x86_cpu_AVX10_V53 - 1, > > + x86_cpu_AVX10_V51 = x86_cpu_AVX10_V52 - 1, > > + x86_cpu_AVX10_V50 = x86_cpu_AVX10_V51 - 1, > > + x86_cpu_AVX10_V49 = x86_cpu_AVX10_V50 - 1, > > + x86_cpu_AVX10_V48 = x86_cpu_AVX10_V49 - 1, > > + x86_cpu_AVX10_V47 = x86_cpu_AVX10_V48 - 1, > > + x86_cpu_AVX10_V46 = x86_cpu_AVX10_V47 - 1, > > + x86_cpu_AVX10_V45 = x86_cpu_AVX10_V46 - 1, > > + x86_cpu_AVX10_V44 = x86_cpu_AVX10_V45 - 1, > > + x86_cpu_AVX10_V43 = x86_cpu_AVX10_V44 - 1, > > + x86_cpu_AVX10_V42 = x86_cpu_AVX10_V43 - 1, > > + x86_cpu_AVX10_V41 = x86_cpu_AVX10_V42 - 1, > > + x86_cpu_AVX10_V40 = x86_cpu_AVX10_V41 - 1, > > + x86_cpu_AVX10_V39 = x86_cpu_AVX10_V40 - 1, > > + x86_cpu_AVX10_V38 = x86_cpu_AVX10_V39 - 1, > > + x86_cpu_AVX10_V37 = x86_cpu_AVX10_V38 - 1, > > + x86_cpu_AVX10_V36 = x86_cpu_AVX10_V37 - 1, > > + x86_cpu_AVX10_V35 = x86_cpu_AVX10_V36 - 1, > > + x86_cpu_AVX10_V34 = x86_cpu_AVX10_V35 - 1, > > + x86_cpu_AVX10_V33 = x86_cpu_AVX10_V34 - 1, > > + x86_cpu_AVX10_V32 = x86_cpu_AVX10_V33 - 1, > > + x86_cpu_AVX10_V31 = x86_cpu_AVX10_V32 - 1, > > + x86_cpu_AVX10_V30 = x86_cpu_AVX10_V31 - 1, > > + x86_cpu_AVX10_V29 = x86_cpu_AVX10_V30 - 1, > > + x86_cpu_AVX10_V28 = x86_cpu_AVX10_V29 - 1, > > + x86_cpu_AVX10_V27 = x86_cpu_AVX10_V28 - 1, > > + x86_cpu_AVX10_V26 = x86_cpu_AVX10_V27 - 1, > > + x86_cpu_AVX10_V25 = x86_cpu_AVX10_V26 - 1, > > + x86_cpu_AVX10_V24 = x86_cpu_AVX10_V25 - 1, > > + x86_cpu_AVX10_V23 = x86_cpu_AVX10_V24 - 1, > > + x86_cpu_AVX10_V22 = x86_cpu_AVX10_V23 - 1, > > + x86_cpu_AVX10_V21 = x86_cpu_AVX10_V22 - 1, > > + x86_cpu_AVX10_V20 = x86_cpu_AVX10_V21 - 1, > > + x86_cpu_AVX10_V19 = x86_cpu_AVX10_V20 - 1, > > + x86_cpu_AVX10_V18 = x86_cpu_AVX10_V19 - 1, > > + x86_cpu_AVX10_V17 = x86_cpu_AVX10_V18 - 1, > > + x86_cpu_AVX10_V16 = x86_cpu_AVX10_V17 - 1, > > + x86_cpu_AVX10_V15 = x86_cpu_AVX10_V16 - 1, > > + x86_cpu_AVX10_V14 = x86_cpu_AVX10_V15 - 1, > > + x86_cpu_AVX10_V13 = x86_cpu_AVX10_V14 - 1, > > + x86_cpu_AVX10_V12 = x86_cpu_AVX10_V13 - 1, > > + x86_cpu_AVX10_V11 = x86_cpu_AVX10_V12 - 1, > > + x86_cpu_AVX10_V10 = x86_cpu_AVX10_V11 - 1, > > + x86_cpu_AVX10_V9 = x86_cpu_AVX10_V10 - 1, > > + x86_cpu_AVX10_V8 = x86_cpu_AVX10_V9 - 1, > > + x86_cpu_AVX10_V7 = x86_cpu_AVX10_V8 - 1, > > + x86_cpu_AVX10_V6 = x86_cpu_AVX10_V7 - 1, > > + x86_cpu_AVX10_V5 = x86_cpu_AVX10_V6 - 1, > > + x86_cpu_AVX10_V4 = x86_cpu_AVX10_V5 - 1, > > + x86_cpu_AVX10_V3 = x86_cpu_AVX10_V4 - 1, > > + x86_cpu_AVX10_V2 = x86_cpu_AVX10_V3 - 1, > > + x86_cpu_AVX10_V1 = x86_cpu_AVX10_V2 - 1 > > +/* x86_cpu_AVX10_V0 is invalid. */ > > }; > > diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c > > index badf088874..b5846bc211 100644 > > --- a/sysdeps/x86/cpu-features.c > > +++ b/sysdeps/x86/cpu-features.c > > @@ -115,11 +115,18 @@ update_active (struct cpu_features *cpu_features) > > CPU_FEATURE_SET_ACTIVE (cpu_features, SHSTK); > > #endif > > > > + enum > > + { > > + os_xmm = 1, > > + os_ymm = 2, > > + os_zmm = 4 > > + } os_vector_size = os_xmm; > > /* Can we call xgetbv? */ > > if (CPU_FEATURES_CPU_P (cpu_features, OSXSAVE)) > > { > > unsigned int xcrlow; > > unsigned int xcrhigh; > > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10); > > asm ("xgetbv" : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0)); > > /* Is YMM and XMM state usable? */ > > if ((xcrlow & (bit_YMM_state | bit_XMM_state)) > > @@ -128,6 +135,7 @@ update_active (struct cpu_features *cpu_features) > > /* Determine if AVX is usable. */ > > if (CPU_FEATURES_CPU_P (cpu_features, AVX)) > > { > > + os_vector_size |= os_ymm; > > Wrong indentation. > Fixed. > > CPU_FEATURE_SET (cpu_features, AVX); > > /* The following features depend on AVX being usable. */ > > /* Determine if AVX2 is usable. */ > > @@ -166,6 +174,7 @@ update_active (struct cpu_features *cpu_features) > > | bit_ZMM16_31_state)) > > == (bit_Opmask_state | bit_ZMM0_15_state | bit_ZMM16_31_state)) > > { > > + os_vector_size |= os_zmm; > > /* Determine if AVX512F is usable. */ > > if (CPU_FEATURES_CPU_P (cpu_features, AVX512F)) > > { > > @@ -210,6 +219,22 @@ update_active (struct cpu_features *cpu_features) > > } > > } > > > > + if (CPU_FEATURES_CPU_P (cpu_features, AVX10) > > + && cpu_features->basic.max_cpuid >= 0x24) > > + { > > + __cpuid_count ( > > + 0x24, 0, cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.eax, > > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ebx, > > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ecx, > > + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.edx); > > + if (os_vector_size & os_xmm) > > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_XMM); > > + if (os_vector_size & os_ymm) > > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_YMM); > > + if (os_vector_size & os_zmm) > > + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_ZMM); > > + } > > + > > /* Are XTILECFG and XTILEDATA states usable? */ > > if ((xcrlow & (bit_XTILECFG_state | bit_XTILEDATA_state)) > > == (bit_XTILECFG_state | bit_XTILEDATA_state)) > > diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h > > index eb30d342a6..2d7427a6c0 100644 > > --- a/sysdeps/x86/include/cpu-features.h > > +++ b/sysdeps/x86/include/cpu-features.h > > @@ -29,7 +29,7 @@ > > > > enum > > { > > - CPUID_INDEX_MAX = CPUID_INDEX_14_ECX_0 + 1 > > + CPUID_INDEX_MAX = CPUID_INDEX_24_ECX_0 + 1 > > }; > > > > enum > > @@ -319,6 +319,7 @@ enum > > #define bit_cpu_AVX_NE_CONVERT (1u << 5) > > #define bit_cpu_AMX_COMPLEX (1u << 8) > > #define bit_cpu_PREFETCHI (1u << 14) > > +#define bit_cpu_AVX10 (1u << 19) > > #define bit_cpu_APX_F (1u << 21) > > > > /* CPUID_INDEX_19. */ > > @@ -332,6 +333,13 @@ enum > > /* EBX. */ > > #define bit_cpu_PTWRITE (1u << 4) > > > > +/* CPUID_INDEX_24_ECX_0. */ > > + > > +/* EBX. */ > > +#define bit_cpu_AVX10_XMM (1u << 16) > > +#define bit_cpu_AVX10_YMM (1u << 17) > > +#define bit_cpu_AVX10_ZMM (1u << 18) > > + > > /* CPUID_INDEX_1. */ > > > > /* ECX. */ > > @@ -563,6 +571,7 @@ enum > > #define index_cpu_AVX_NE_CONVERT CPUID_INDEX_7_ECX_1 > > #define index_cpu_AMX_COMPLEX CPUID_INDEX_7_ECX_1 > > #define index_cpu_PREFETCHI CPUID_INDEX_7_ECX_1 > > +#define index_cpu_AVX10 CPUID_INDEX_7_ECX_1 > > #define index_cpu_APX_F CPUID_INDEX_7_ECX_1 > > > > /* CPUID_INDEX_19. */ > > @@ -576,6 +585,13 @@ enum > > /* EBX. */ > > #define index_cpu_PTWRITE CPUID_INDEX_14_ECX_0 > > > > +/* CPUID_INDEX_24_ECX_0. */ > > + > > +/* EBX. */ > > +#define index_cpu_AVX10_XMM CPUID_INDEX_24_ECX_0 > > +#define index_cpu_AVX10_YMM CPUID_INDEX_24_ECX_0 > > +#define index_cpu_AVX10_ZMM CPUID_INDEX_24_ECX_0 > > + > > /* CPUID_INDEX_1. */ > > > > /* ECX. */ > > @@ -809,6 +825,7 @@ enum > > #define reg_AVX_NE_CONVERT edx > > #define reg_AMX_COMPLEX edx > > #define reg_PREFETCHI edx > > +#define reg_AVX10 edx > > #define reg_APX_F edx > > > > /* CPUID_INDEX_19. */ > > @@ -822,6 +839,14 @@ enum > > /* EBX. */ > > #define reg_PTWRITE ebx > > > > +/* CPUID_INDEX_24_ECX_0. */ > > + > > +/* EBX. */ > > +#define reg_AVX10_XMM ebx > > +#define reg_AVX10_YMM ebx > > +#define reg_AVX10_ZMM ebx > > + > > + > > /* PREFERRED_FEATURE_INDEX_1. First define the bitindex values > > sequentially, then define the bit_arch* and index_arch_* lookup > > constants. */ > > diff --git a/sysdeps/x86/sys/platform/x86.h b/sysdeps/x86/sys/platform/x86.h > > index 1ea2c5fc0b..fa8c7e158d 100644 > > --- a/sysdeps/x86/sys/platform/x86.h > > +++ b/sysdeps/x86/sys/platform/x86.h > > @@ -29,9 +29,45 @@ __BEGIN_DECLS > > extern const struct cpuid_feature *__x86_get_cpuid_feature_leaf (unsigned int) > > __attribute__ ((pure)); > > > > +static __inline__ unsigned int > > +x86_cpu_get_avx10_version_number_from_enum (unsigned int __enum) > > +{ > > + return __enum - x86_cpu_AVX10_V1 + 1; > > +} > > + > > +static __inline__ _Bool > > +x86_cpu_is_index_avx10_version_number (unsigned int __index) > > +{ > > + return __index >= (unsigned int) x86_cpu_AVX10_V1 > > + && __index <= (unsigned int) x86_cpu_AVX10_V255; > > +} > > + > > +static __inline__ unsigned int > > +x86_cpu_get_avx10_info (unsigned int __index) > > +{ > > + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf ( > > + __index / (8 * sizeof (unsigned int) * 4)); > > + unsigned int __reg = __index & (8 * sizeof (unsigned int) * 4 - 1); > > + __reg /= 8 * sizeof (unsigned int); > > + > > + return __ptr->cpuid_array[__reg]; > > +} > > + > > +/* Get AVX10 version number in byte form. Must check AVX10 active first. Value > > + is in range [1, 255]. */ > > +static __inline__ unsigned int > > +x86_cpu_get_avx10_version_number (void) > > +{ > > + return x86_cpu_get_avx10_info (x86_cpu_index_24_ecx_0_ebx) & 0xff; > > +} > > + > > static __inline__ _Bool > > x86_cpu_present (unsigned int __index) > > { > > + if (x86_cpu_is_index_avx10_version_number (__index)) > > + return x86_cpu_get_avx10_version_number () > > + >= x86_cpu_get_avx10_version_number_from_enum (__index); > > + > > const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf > > (__index / (8 * sizeof (unsigned int) * 4)); > > unsigned int __reg > > @@ -45,6 +81,10 @@ x86_cpu_present (unsigned int __index) > > static __inline__ _Bool > > x86_cpu_active (unsigned int __index) > > { > > + if (x86_cpu_is_index_avx10_version_number (__index)) > > + return x86_cpu_get_avx10_version_number () > > + >= x86_cpu_get_avx10_version_number_from_enum (__index); > > + > > const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf > > (__index / (8 * sizeof (unsigned int) * 4)); > > unsigned int __reg > > diff --git a/sysdeps/x86/tst-get-cpu-features.c b/sysdeps/x86/tst-get-cpu-features.c > > index b27fa7324a..53e68431f1 100644 > > --- a/sysdeps/x86/tst-get-cpu-features.c > > +++ b/sysdeps/x86/tst-get-cpu-features.c > > @@ -219,6 +219,7 @@ do_test (void) > > CHECK_CPU_FEATURE_PRESENT (AVX_NE_CONVERT); > > CHECK_CPU_FEATURE_PRESENT (AMX_COMPLEX); > > CHECK_CPU_FEATURE_PRESENT (PREFETCHI); > > + CHECK_CPU_FEATURE_PRESENT (AVX10); > > CHECK_CPU_FEATURE_PRESENT (APX_F); > > CHECK_CPU_FEATURE_PRESENT (AESKLE); > > CHECK_CPU_FEATURE_PRESENT (WIDE_KL); > > @@ -391,11 +392,273 @@ do_test (void) > > CHECK_CPU_FEATURE_ACTIVE (AVX_NE_CONVERT); > > CHECK_CPU_FEATURE_ACTIVE (AMX_COMPLEX); > > CHECK_CPU_FEATURE_ACTIVE (PREFETCHI); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10); > > CHECK_CPU_FEATURE_ACTIVE (APX_F); > > CHECK_CPU_FEATURE_ACTIVE (AESKLE); > > CHECK_CPU_FEATURE_ACTIVE (WIDE_KL); > > CHECK_CPU_FEATURE_ACTIVE (PTWRITE); > > > > + if (CPU_FEATURE_ACTIVE (AVX10)) > > + { > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_XMM); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_YMM); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_ZMM); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V1); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V2); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V3); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V4); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V5); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V6); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V7); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V8); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V9); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V10); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V11); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V12); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V13); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V14); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V15); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V16); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V17); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V18); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V19); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V20); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V21); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V22); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V23); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V24); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V25); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V26); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V27); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V28); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V29); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V30); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V31); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V32); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V33); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V34); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V35); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V36); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V37); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V38); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V39); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V40); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V41); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V42); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V43); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V44); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V45); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V46); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V47); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V48); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V49); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V50); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V51); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V52); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V53); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V54); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V55); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V56); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V57); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V58); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V59); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V60); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V61); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V62); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V63); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V64); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V65); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V66); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V67); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V68); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V69); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V70); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V71); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V72); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V73); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V74); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V75); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V76); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V77); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V78); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V79); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V80); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V81); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V82); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V83); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V84); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V85); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V86); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V87); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V88); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V89); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V90); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V91); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V92); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V93); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V94); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V95); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V96); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V97); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V98); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V99); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V100); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V101); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V102); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V103); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V104); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V105); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V106); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V107); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V108); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V109); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V110); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V111); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V112); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V113); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V114); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V115); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V116); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V117); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V118); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V119); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V120); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V121); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V122); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V123); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V124); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V125); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V126); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V127); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V128); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V129); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V130); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V131); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V132); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V133); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V134); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V135); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V136); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V137); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V138); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V139); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V140); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V141); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V142); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V143); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V144); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V145); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V146); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V147); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V148); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V149); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V150); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V151); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V152); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V153); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V154); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V155); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V156); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V157); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V158); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V159); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V160); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V161); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V162); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V163); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V164); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V165); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V166); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V167); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V168); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V169); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V170); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V171); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V172); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V173); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V174); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V175); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V176); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V177); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V178); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V179); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V180); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V181); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V182); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V183); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V184); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V185); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V186); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V187); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V188); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V189); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V190); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V191); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V192); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V193); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V194); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V195); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V196); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V197); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V198); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V199); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V200); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V201); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V202); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V203); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V204); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V205); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V206); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V207); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V208); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V209); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V210); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V211); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V212); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V213); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V214); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V215); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V216); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V217); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V218); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V219); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V220); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V221); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V222); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V223); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V224); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V225); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V226); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V227); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V228); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V229); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V230); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V231); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V232); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V233); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V234); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V235); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V236); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V237); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V238); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V239); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V240); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V241); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V242); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V243); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V244); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V245); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V246); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V247); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V248); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V249); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V250); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V251); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V252); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V253); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V254); > > + CHECK_CPU_FEATURE_ACTIVE (AVX10_V255); > > + } > > return 0; > > } > > > > -- > > 2.34.1 > > > > > -- > H.J.
diff --git a/manual/platform.texi b/manual/platform.texi index 2a2d557067..99dc57b568 100644 --- a/manual/platform.texi +++ b/manual/platform.texi @@ -222,6 +222,22 @@ Leaf (EAX = 23H). @item @code{AVX} -- The AVX instruction extensions. +@item +@code{AVX10} -- The AVX10 instruction extensions. + +@item +@code{AVX10_XMM} -- Whether AVX10 includes xmm registers. + +@item +@code{AVX10_YMM} -- Whether AVX10 includes ymm registers. + +@item +@code{AVX10_ZMM} -- Whether AVX10 includes zmm registers. + +@item +@code{AVX10_V1}..@code{AVX10_V255} -- Whether AVX10 supports a given +version. + @item @code{AVX2} -- The AVX2 instruction extensions. @@ -760,3 +776,15 @@ avx_active (void) return CPU_FEATURE_ACTIVE (AVX); @} @end smallexample + +You could query @code{AVX10} version number with: + +@smallexample +#include <sys/platform/x86.h> + +int +has_avx10_version1 (void) +@{ + return CPU_FEATURE_ACTIVE (AVX10_V1); // Up to AVX10_V255 +@} +@end smallexample diff --git a/sysdeps/x86/bits/platform/x86.h b/sysdeps/x86/bits/platform/x86.h index 88ca071aa7..777fb6ce18 100644 --- a/sysdeps/x86/bits/platform/x86.h +++ b/sysdeps/x86/bits/platform/x86.h @@ -30,7 +30,8 @@ enum CPUID_INDEX_80000008, CPUID_INDEX_7_ECX_1, CPUID_INDEX_19, - CPUID_INDEX_14_ECX_0 + CPUID_INDEX_14_ECX_0, + CPUID_INDEX_24_ECX_0 }; struct cpuid_feature @@ -312,6 +313,7 @@ enum x86_cpu_AVX_NE_CONVERT = x86_cpu_index_7_ecx_1_edx + 5, x86_cpu_AMX_COMPLEX = x86_cpu_index_7_ecx_1_edx + 8, x86_cpu_PREFETCHI = x86_cpu_index_7_ecx_1_edx + 14, + x86_cpu_AVX10 = x86_cpu_index_7_ecx_1_edx + 19, x86_cpu_APX_F = x86_cpu_index_7_ecx_1_edx + 21, x86_cpu_index_19_ebx @@ -325,5 +327,280 @@ enum = (CPUID_INDEX_14_ECX_0 * 8 * 4 * sizeof (unsigned int) + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), - x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4 + x86_cpu_PTWRITE = x86_cpu_index_14_ecx_0_ebx + 4, + + x86_cpu_index_24_ecx_0_ebx + = (CPUID_INDEX_24_ECX_0 * 8 * 4 * sizeof (unsigned int) + + cpuid_register_index_ebx * 8 * sizeof (unsigned int)), + + x86_cpu_AVX10_XMM = x86_cpu_index_24_ecx_0_ebx + 16, + x86_cpu_AVX10_YMM = x86_cpu_index_24_ecx_0_ebx + 17, + x86_cpu_AVX10_ZMM = x86_cpu_index_24_ecx_0_ebx + 18, + +/* AVX10 version information is handled differently from all other CPUID + related logic. Rather than being encoded in cpuid as discrete booleans, the + AVX10 version is encoded is a full byte that represents the version number + (greater than or equal to 1). Since the CPUID API is only able to handle + boolean returns, we enumerate `x86_cpu_AVX10_V{1..255}` which can be queried + by the user and have special logic in `x86_cpu_{present,active}`. This is + unpleasant on our end, but is the only way to make the existing API also + support version queries. */ + + /* All 1s should never be a value feature index. */ + x86_cpu_AVX10_V255 = ~0, + x86_cpu_AVX10_V254 = x86_cpu_AVX10_V255 - 1, + x86_cpu_AVX10_V253 = x86_cpu_AVX10_V254 - 1, + x86_cpu_AVX10_V252 = x86_cpu_AVX10_V253 - 1, + x86_cpu_AVX10_V251 = x86_cpu_AVX10_V252 - 1, + x86_cpu_AVX10_V250 = x86_cpu_AVX10_V251 - 1, + x86_cpu_AVX10_V249 = x86_cpu_AVX10_V250 - 1, + x86_cpu_AVX10_V248 = x86_cpu_AVX10_V249 - 1, + x86_cpu_AVX10_V247 = x86_cpu_AVX10_V248 - 1, + x86_cpu_AVX10_V246 = x86_cpu_AVX10_V247 - 1, + x86_cpu_AVX10_V245 = x86_cpu_AVX10_V246 - 1, + x86_cpu_AVX10_V244 = x86_cpu_AVX10_V245 - 1, + x86_cpu_AVX10_V243 = x86_cpu_AVX10_V244 - 1, + x86_cpu_AVX10_V242 = x86_cpu_AVX10_V243 - 1, + x86_cpu_AVX10_V241 = x86_cpu_AVX10_V242 - 1, + x86_cpu_AVX10_V240 = x86_cpu_AVX10_V241 - 1, + x86_cpu_AVX10_V239 = x86_cpu_AVX10_V240 - 1, + x86_cpu_AVX10_V238 = x86_cpu_AVX10_V239 - 1, + x86_cpu_AVX10_V237 = x86_cpu_AVX10_V238 - 1, + x86_cpu_AVX10_V236 = x86_cpu_AVX10_V237 - 1, + x86_cpu_AVX10_V235 = x86_cpu_AVX10_V236 - 1, + x86_cpu_AVX10_V234 = x86_cpu_AVX10_V235 - 1, + x86_cpu_AVX10_V233 = x86_cpu_AVX10_V234 - 1, + x86_cpu_AVX10_V232 = x86_cpu_AVX10_V233 - 1, + x86_cpu_AVX10_V231 = x86_cpu_AVX10_V232 - 1, + x86_cpu_AVX10_V230 = x86_cpu_AVX10_V231 - 1, + x86_cpu_AVX10_V229 = x86_cpu_AVX10_V230 - 1, + x86_cpu_AVX10_V228 = x86_cpu_AVX10_V229 - 1, + x86_cpu_AVX10_V227 = x86_cpu_AVX10_V228 - 1, + x86_cpu_AVX10_V226 = x86_cpu_AVX10_V227 - 1, + x86_cpu_AVX10_V225 = x86_cpu_AVX10_V226 - 1, + x86_cpu_AVX10_V224 = x86_cpu_AVX10_V225 - 1, + x86_cpu_AVX10_V223 = x86_cpu_AVX10_V224 - 1, + x86_cpu_AVX10_V222 = x86_cpu_AVX10_V223 - 1, + x86_cpu_AVX10_V221 = x86_cpu_AVX10_V222 - 1, + x86_cpu_AVX10_V220 = x86_cpu_AVX10_V221 - 1, + x86_cpu_AVX10_V219 = x86_cpu_AVX10_V220 - 1, + x86_cpu_AVX10_V218 = x86_cpu_AVX10_V219 - 1, + x86_cpu_AVX10_V217 = x86_cpu_AVX10_V218 - 1, + x86_cpu_AVX10_V216 = x86_cpu_AVX10_V217 - 1, + x86_cpu_AVX10_V215 = x86_cpu_AVX10_V216 - 1, + x86_cpu_AVX10_V214 = x86_cpu_AVX10_V215 - 1, + x86_cpu_AVX10_V213 = x86_cpu_AVX10_V214 - 1, + x86_cpu_AVX10_V212 = x86_cpu_AVX10_V213 - 1, + x86_cpu_AVX10_V211 = x86_cpu_AVX10_V212 - 1, + x86_cpu_AVX10_V210 = x86_cpu_AVX10_V211 - 1, + x86_cpu_AVX10_V209 = x86_cpu_AVX10_V210 - 1, + x86_cpu_AVX10_V208 = x86_cpu_AVX10_V209 - 1, + x86_cpu_AVX10_V207 = x86_cpu_AVX10_V208 - 1, + x86_cpu_AVX10_V206 = x86_cpu_AVX10_V207 - 1, + x86_cpu_AVX10_V205 = x86_cpu_AVX10_V206 - 1, + x86_cpu_AVX10_V204 = x86_cpu_AVX10_V205 - 1, + x86_cpu_AVX10_V203 = x86_cpu_AVX10_V204 - 1, + x86_cpu_AVX10_V202 = x86_cpu_AVX10_V203 - 1, + x86_cpu_AVX10_V201 = x86_cpu_AVX10_V202 - 1, + x86_cpu_AVX10_V200 = x86_cpu_AVX10_V201 - 1, + x86_cpu_AVX10_V199 = x86_cpu_AVX10_V200 - 1, + x86_cpu_AVX10_V198 = x86_cpu_AVX10_V199 - 1, + x86_cpu_AVX10_V197 = x86_cpu_AVX10_V198 - 1, + x86_cpu_AVX10_V196 = x86_cpu_AVX10_V197 - 1, + x86_cpu_AVX10_V195 = x86_cpu_AVX10_V196 - 1, + x86_cpu_AVX10_V194 = x86_cpu_AVX10_V195 - 1, + x86_cpu_AVX10_V193 = x86_cpu_AVX10_V194 - 1, + x86_cpu_AVX10_V192 = x86_cpu_AVX10_V193 - 1, + x86_cpu_AVX10_V191 = x86_cpu_AVX10_V192 - 1, + x86_cpu_AVX10_V190 = x86_cpu_AVX10_V191 - 1, + x86_cpu_AVX10_V189 = x86_cpu_AVX10_V190 - 1, + x86_cpu_AVX10_V188 = x86_cpu_AVX10_V189 - 1, + x86_cpu_AVX10_V187 = x86_cpu_AVX10_V188 - 1, + x86_cpu_AVX10_V186 = x86_cpu_AVX10_V187 - 1, + x86_cpu_AVX10_V185 = x86_cpu_AVX10_V186 - 1, + x86_cpu_AVX10_V184 = x86_cpu_AVX10_V185 - 1, + x86_cpu_AVX10_V183 = x86_cpu_AVX10_V184 - 1, + x86_cpu_AVX10_V182 = x86_cpu_AVX10_V183 - 1, + x86_cpu_AVX10_V181 = x86_cpu_AVX10_V182 - 1, + x86_cpu_AVX10_V180 = x86_cpu_AVX10_V181 - 1, + x86_cpu_AVX10_V179 = x86_cpu_AVX10_V180 - 1, + x86_cpu_AVX10_V178 = x86_cpu_AVX10_V179 - 1, + x86_cpu_AVX10_V177 = x86_cpu_AVX10_V178 - 1, + x86_cpu_AVX10_V176 = x86_cpu_AVX10_V177 - 1, + x86_cpu_AVX10_V175 = x86_cpu_AVX10_V176 - 1, + x86_cpu_AVX10_V174 = x86_cpu_AVX10_V175 - 1, + x86_cpu_AVX10_V173 = x86_cpu_AVX10_V174 - 1, + x86_cpu_AVX10_V172 = x86_cpu_AVX10_V173 - 1, + x86_cpu_AVX10_V171 = x86_cpu_AVX10_V172 - 1, + x86_cpu_AVX10_V170 = x86_cpu_AVX10_V171 - 1, + x86_cpu_AVX10_V169 = x86_cpu_AVX10_V170 - 1, + x86_cpu_AVX10_V168 = x86_cpu_AVX10_V169 - 1, + x86_cpu_AVX10_V167 = x86_cpu_AVX10_V168 - 1, + x86_cpu_AVX10_V166 = x86_cpu_AVX10_V167 - 1, + x86_cpu_AVX10_V165 = x86_cpu_AVX10_V166 - 1, + x86_cpu_AVX10_V164 = x86_cpu_AVX10_V165 - 1, + x86_cpu_AVX10_V163 = x86_cpu_AVX10_V164 - 1, + x86_cpu_AVX10_V162 = x86_cpu_AVX10_V163 - 1, + x86_cpu_AVX10_V161 = x86_cpu_AVX10_V162 - 1, + x86_cpu_AVX10_V160 = x86_cpu_AVX10_V161 - 1, + x86_cpu_AVX10_V159 = x86_cpu_AVX10_V160 - 1, + x86_cpu_AVX10_V158 = x86_cpu_AVX10_V159 - 1, + x86_cpu_AVX10_V157 = x86_cpu_AVX10_V158 - 1, + x86_cpu_AVX10_V156 = x86_cpu_AVX10_V157 - 1, + x86_cpu_AVX10_V155 = x86_cpu_AVX10_V156 - 1, + x86_cpu_AVX10_V154 = x86_cpu_AVX10_V155 - 1, + x86_cpu_AVX10_V153 = x86_cpu_AVX10_V154 - 1, + x86_cpu_AVX10_V152 = x86_cpu_AVX10_V153 - 1, + x86_cpu_AVX10_V151 = x86_cpu_AVX10_V152 - 1, + x86_cpu_AVX10_V150 = x86_cpu_AVX10_V151 - 1, + x86_cpu_AVX10_V149 = x86_cpu_AVX10_V150 - 1, + x86_cpu_AVX10_V148 = x86_cpu_AVX10_V149 - 1, + x86_cpu_AVX10_V147 = x86_cpu_AVX10_V148 - 1, + x86_cpu_AVX10_V146 = x86_cpu_AVX10_V147 - 1, + x86_cpu_AVX10_V145 = x86_cpu_AVX10_V146 - 1, + x86_cpu_AVX10_V144 = x86_cpu_AVX10_V145 - 1, + x86_cpu_AVX10_V143 = x86_cpu_AVX10_V144 - 1, + x86_cpu_AVX10_V142 = x86_cpu_AVX10_V143 - 1, + x86_cpu_AVX10_V141 = x86_cpu_AVX10_V142 - 1, + x86_cpu_AVX10_V140 = x86_cpu_AVX10_V141 - 1, + x86_cpu_AVX10_V139 = x86_cpu_AVX10_V140 - 1, + x86_cpu_AVX10_V138 = x86_cpu_AVX10_V139 - 1, + x86_cpu_AVX10_V137 = x86_cpu_AVX10_V138 - 1, + x86_cpu_AVX10_V136 = x86_cpu_AVX10_V137 - 1, + x86_cpu_AVX10_V135 = x86_cpu_AVX10_V136 - 1, + x86_cpu_AVX10_V134 = x86_cpu_AVX10_V135 - 1, + x86_cpu_AVX10_V133 = x86_cpu_AVX10_V134 - 1, + x86_cpu_AVX10_V132 = x86_cpu_AVX10_V133 - 1, + x86_cpu_AVX10_V131 = x86_cpu_AVX10_V132 - 1, + x86_cpu_AVX10_V130 = x86_cpu_AVX10_V131 - 1, + x86_cpu_AVX10_V129 = x86_cpu_AVX10_V130 - 1, + x86_cpu_AVX10_V128 = x86_cpu_AVX10_V129 - 1, + x86_cpu_AVX10_V127 = x86_cpu_AVX10_V128 - 1, + x86_cpu_AVX10_V126 = x86_cpu_AVX10_V127 - 1, + x86_cpu_AVX10_V125 = x86_cpu_AVX10_V126 - 1, + x86_cpu_AVX10_V124 = x86_cpu_AVX10_V125 - 1, + x86_cpu_AVX10_V123 = x86_cpu_AVX10_V124 - 1, + x86_cpu_AVX10_V122 = x86_cpu_AVX10_V123 - 1, + x86_cpu_AVX10_V121 = x86_cpu_AVX10_V122 - 1, + x86_cpu_AVX10_V120 = x86_cpu_AVX10_V121 - 1, + x86_cpu_AVX10_V119 = x86_cpu_AVX10_V120 - 1, + x86_cpu_AVX10_V118 = x86_cpu_AVX10_V119 - 1, + x86_cpu_AVX10_V117 = x86_cpu_AVX10_V118 - 1, + x86_cpu_AVX10_V116 = x86_cpu_AVX10_V117 - 1, + x86_cpu_AVX10_V115 = x86_cpu_AVX10_V116 - 1, + x86_cpu_AVX10_V114 = x86_cpu_AVX10_V115 - 1, + x86_cpu_AVX10_V113 = x86_cpu_AVX10_V114 - 1, + x86_cpu_AVX10_V112 = x86_cpu_AVX10_V113 - 1, + x86_cpu_AVX10_V111 = x86_cpu_AVX10_V112 - 1, + x86_cpu_AVX10_V110 = x86_cpu_AVX10_V111 - 1, + x86_cpu_AVX10_V109 = x86_cpu_AVX10_V110 - 1, + x86_cpu_AVX10_V108 = x86_cpu_AVX10_V109 - 1, + x86_cpu_AVX10_V107 = x86_cpu_AVX10_V108 - 1, + x86_cpu_AVX10_V106 = x86_cpu_AVX10_V107 - 1, + x86_cpu_AVX10_V105 = x86_cpu_AVX10_V106 - 1, + x86_cpu_AVX10_V104 = x86_cpu_AVX10_V105 - 1, + x86_cpu_AVX10_V103 = x86_cpu_AVX10_V104 - 1, + x86_cpu_AVX10_V102 = x86_cpu_AVX10_V103 - 1, + x86_cpu_AVX10_V101 = x86_cpu_AVX10_V102 - 1, + x86_cpu_AVX10_V100 = x86_cpu_AVX10_V101 - 1, + x86_cpu_AVX10_V99 = x86_cpu_AVX10_V100 - 1, + x86_cpu_AVX10_V98 = x86_cpu_AVX10_V99 - 1, + x86_cpu_AVX10_V97 = x86_cpu_AVX10_V98 - 1, + x86_cpu_AVX10_V96 = x86_cpu_AVX10_V97 - 1, + x86_cpu_AVX10_V95 = x86_cpu_AVX10_V96 - 1, + x86_cpu_AVX10_V94 = x86_cpu_AVX10_V95 - 1, + x86_cpu_AVX10_V93 = x86_cpu_AVX10_V94 - 1, + x86_cpu_AVX10_V92 = x86_cpu_AVX10_V93 - 1, + x86_cpu_AVX10_V91 = x86_cpu_AVX10_V92 - 1, + x86_cpu_AVX10_V90 = x86_cpu_AVX10_V91 - 1, + x86_cpu_AVX10_V89 = x86_cpu_AVX10_V90 - 1, + x86_cpu_AVX10_V88 = x86_cpu_AVX10_V89 - 1, + x86_cpu_AVX10_V87 = x86_cpu_AVX10_V88 - 1, + x86_cpu_AVX10_V86 = x86_cpu_AVX10_V87 - 1, + x86_cpu_AVX10_V85 = x86_cpu_AVX10_V86 - 1, + x86_cpu_AVX10_V84 = x86_cpu_AVX10_V85 - 1, + x86_cpu_AVX10_V83 = x86_cpu_AVX10_V84 - 1, + x86_cpu_AVX10_V82 = x86_cpu_AVX10_V83 - 1, + x86_cpu_AVX10_V81 = x86_cpu_AVX10_V82 - 1, + x86_cpu_AVX10_V80 = x86_cpu_AVX10_V81 - 1, + x86_cpu_AVX10_V79 = x86_cpu_AVX10_V80 - 1, + x86_cpu_AVX10_V78 = x86_cpu_AVX10_V79 - 1, + x86_cpu_AVX10_V77 = x86_cpu_AVX10_V78 - 1, + x86_cpu_AVX10_V76 = x86_cpu_AVX10_V77 - 1, + x86_cpu_AVX10_V75 = x86_cpu_AVX10_V76 - 1, + x86_cpu_AVX10_V74 = x86_cpu_AVX10_V75 - 1, + x86_cpu_AVX10_V73 = x86_cpu_AVX10_V74 - 1, + x86_cpu_AVX10_V72 = x86_cpu_AVX10_V73 - 1, + x86_cpu_AVX10_V71 = x86_cpu_AVX10_V72 - 1, + x86_cpu_AVX10_V70 = x86_cpu_AVX10_V71 - 1, + x86_cpu_AVX10_V69 = x86_cpu_AVX10_V70 - 1, + x86_cpu_AVX10_V68 = x86_cpu_AVX10_V69 - 1, + x86_cpu_AVX10_V67 = x86_cpu_AVX10_V68 - 1, + x86_cpu_AVX10_V66 = x86_cpu_AVX10_V67 - 1, + x86_cpu_AVX10_V65 = x86_cpu_AVX10_V66 - 1, + x86_cpu_AVX10_V64 = x86_cpu_AVX10_V65 - 1, + x86_cpu_AVX10_V63 = x86_cpu_AVX10_V64 - 1, + x86_cpu_AVX10_V62 = x86_cpu_AVX10_V63 - 1, + x86_cpu_AVX10_V61 = x86_cpu_AVX10_V62 - 1, + x86_cpu_AVX10_V60 = x86_cpu_AVX10_V61 - 1, + x86_cpu_AVX10_V59 = x86_cpu_AVX10_V60 - 1, + x86_cpu_AVX10_V58 = x86_cpu_AVX10_V59 - 1, + x86_cpu_AVX10_V57 = x86_cpu_AVX10_V58 - 1, + x86_cpu_AVX10_V56 = x86_cpu_AVX10_V57 - 1, + x86_cpu_AVX10_V55 = x86_cpu_AVX10_V56 - 1, + x86_cpu_AVX10_V54 = x86_cpu_AVX10_V55 - 1, + x86_cpu_AVX10_V53 = x86_cpu_AVX10_V54 - 1, + x86_cpu_AVX10_V52 = x86_cpu_AVX10_V53 - 1, + x86_cpu_AVX10_V51 = x86_cpu_AVX10_V52 - 1, + x86_cpu_AVX10_V50 = x86_cpu_AVX10_V51 - 1, + x86_cpu_AVX10_V49 = x86_cpu_AVX10_V50 - 1, + x86_cpu_AVX10_V48 = x86_cpu_AVX10_V49 - 1, + x86_cpu_AVX10_V47 = x86_cpu_AVX10_V48 - 1, + x86_cpu_AVX10_V46 = x86_cpu_AVX10_V47 - 1, + x86_cpu_AVX10_V45 = x86_cpu_AVX10_V46 - 1, + x86_cpu_AVX10_V44 = x86_cpu_AVX10_V45 - 1, + x86_cpu_AVX10_V43 = x86_cpu_AVX10_V44 - 1, + x86_cpu_AVX10_V42 = x86_cpu_AVX10_V43 - 1, + x86_cpu_AVX10_V41 = x86_cpu_AVX10_V42 - 1, + x86_cpu_AVX10_V40 = x86_cpu_AVX10_V41 - 1, + x86_cpu_AVX10_V39 = x86_cpu_AVX10_V40 - 1, + x86_cpu_AVX10_V38 = x86_cpu_AVX10_V39 - 1, + x86_cpu_AVX10_V37 = x86_cpu_AVX10_V38 - 1, + x86_cpu_AVX10_V36 = x86_cpu_AVX10_V37 - 1, + x86_cpu_AVX10_V35 = x86_cpu_AVX10_V36 - 1, + x86_cpu_AVX10_V34 = x86_cpu_AVX10_V35 - 1, + x86_cpu_AVX10_V33 = x86_cpu_AVX10_V34 - 1, + x86_cpu_AVX10_V32 = x86_cpu_AVX10_V33 - 1, + x86_cpu_AVX10_V31 = x86_cpu_AVX10_V32 - 1, + x86_cpu_AVX10_V30 = x86_cpu_AVX10_V31 - 1, + x86_cpu_AVX10_V29 = x86_cpu_AVX10_V30 - 1, + x86_cpu_AVX10_V28 = x86_cpu_AVX10_V29 - 1, + x86_cpu_AVX10_V27 = x86_cpu_AVX10_V28 - 1, + x86_cpu_AVX10_V26 = x86_cpu_AVX10_V27 - 1, + x86_cpu_AVX10_V25 = x86_cpu_AVX10_V26 - 1, + x86_cpu_AVX10_V24 = x86_cpu_AVX10_V25 - 1, + x86_cpu_AVX10_V23 = x86_cpu_AVX10_V24 - 1, + x86_cpu_AVX10_V22 = x86_cpu_AVX10_V23 - 1, + x86_cpu_AVX10_V21 = x86_cpu_AVX10_V22 - 1, + x86_cpu_AVX10_V20 = x86_cpu_AVX10_V21 - 1, + x86_cpu_AVX10_V19 = x86_cpu_AVX10_V20 - 1, + x86_cpu_AVX10_V18 = x86_cpu_AVX10_V19 - 1, + x86_cpu_AVX10_V17 = x86_cpu_AVX10_V18 - 1, + x86_cpu_AVX10_V16 = x86_cpu_AVX10_V17 - 1, + x86_cpu_AVX10_V15 = x86_cpu_AVX10_V16 - 1, + x86_cpu_AVX10_V14 = x86_cpu_AVX10_V15 - 1, + x86_cpu_AVX10_V13 = x86_cpu_AVX10_V14 - 1, + x86_cpu_AVX10_V12 = x86_cpu_AVX10_V13 - 1, + x86_cpu_AVX10_V11 = x86_cpu_AVX10_V12 - 1, + x86_cpu_AVX10_V10 = x86_cpu_AVX10_V11 - 1, + x86_cpu_AVX10_V9 = x86_cpu_AVX10_V10 - 1, + x86_cpu_AVX10_V8 = x86_cpu_AVX10_V9 - 1, + x86_cpu_AVX10_V7 = x86_cpu_AVX10_V8 - 1, + x86_cpu_AVX10_V6 = x86_cpu_AVX10_V7 - 1, + x86_cpu_AVX10_V5 = x86_cpu_AVX10_V6 - 1, + x86_cpu_AVX10_V4 = x86_cpu_AVX10_V5 - 1, + x86_cpu_AVX10_V3 = x86_cpu_AVX10_V4 - 1, + x86_cpu_AVX10_V2 = x86_cpu_AVX10_V3 - 1, + x86_cpu_AVX10_V1 = x86_cpu_AVX10_V2 - 1 +/* x86_cpu_AVX10_V0 is invalid. */ }; diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c index badf088874..b5846bc211 100644 --- a/sysdeps/x86/cpu-features.c +++ b/sysdeps/x86/cpu-features.c @@ -115,11 +115,18 @@ update_active (struct cpu_features *cpu_features) CPU_FEATURE_SET_ACTIVE (cpu_features, SHSTK); #endif + enum + { + os_xmm = 1, + os_ymm = 2, + os_zmm = 4 + } os_vector_size = os_xmm; /* Can we call xgetbv? */ if (CPU_FEATURES_CPU_P (cpu_features, OSXSAVE)) { unsigned int xcrlow; unsigned int xcrhigh; + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10); asm ("xgetbv" : "=a" (xcrlow), "=d" (xcrhigh) : "c" (0)); /* Is YMM and XMM state usable? */ if ((xcrlow & (bit_YMM_state | bit_XMM_state)) @@ -128,6 +135,7 @@ update_active (struct cpu_features *cpu_features) /* Determine if AVX is usable. */ if (CPU_FEATURES_CPU_P (cpu_features, AVX)) { + os_vector_size |= os_ymm; CPU_FEATURE_SET (cpu_features, AVX); /* The following features depend on AVX being usable. */ /* Determine if AVX2 is usable. */ @@ -166,6 +174,7 @@ update_active (struct cpu_features *cpu_features) | bit_ZMM16_31_state)) == (bit_Opmask_state | bit_ZMM0_15_state | bit_ZMM16_31_state)) { + os_vector_size |= os_zmm; /* Determine if AVX512F is usable. */ if (CPU_FEATURES_CPU_P (cpu_features, AVX512F)) { @@ -210,6 +219,22 @@ update_active (struct cpu_features *cpu_features) } } + if (CPU_FEATURES_CPU_P (cpu_features, AVX10) + && cpu_features->basic.max_cpuid >= 0x24) + { + __cpuid_count ( + 0x24, 0, cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.eax, + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ebx, + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.ecx, + cpu_features->features[CPUID_INDEX_24_ECX_0].cpuid.edx); + if (os_vector_size & os_xmm) + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_XMM); + if (os_vector_size & os_ymm) + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_YMM); + if (os_vector_size & os_zmm) + CPU_FEATURE_SET_ACTIVE (cpu_features, AVX10_ZMM); + } + /* Are XTILECFG and XTILEDATA states usable? */ if ((xcrlow & (bit_XTILECFG_state | bit_XTILEDATA_state)) == (bit_XTILECFG_state | bit_XTILEDATA_state)) diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h index eb30d342a6..2d7427a6c0 100644 --- a/sysdeps/x86/include/cpu-features.h +++ b/sysdeps/x86/include/cpu-features.h @@ -29,7 +29,7 @@ enum { - CPUID_INDEX_MAX = CPUID_INDEX_14_ECX_0 + 1 + CPUID_INDEX_MAX = CPUID_INDEX_24_ECX_0 + 1 }; enum @@ -319,6 +319,7 @@ enum #define bit_cpu_AVX_NE_CONVERT (1u << 5) #define bit_cpu_AMX_COMPLEX (1u << 8) #define bit_cpu_PREFETCHI (1u << 14) +#define bit_cpu_AVX10 (1u << 19) #define bit_cpu_APX_F (1u << 21) /* CPUID_INDEX_19. */ @@ -332,6 +333,13 @@ enum /* EBX. */ #define bit_cpu_PTWRITE (1u << 4) +/* CPUID_INDEX_24_ECX_0. */ + +/* EBX. */ +#define bit_cpu_AVX10_XMM (1u << 16) +#define bit_cpu_AVX10_YMM (1u << 17) +#define bit_cpu_AVX10_ZMM (1u << 18) + /* CPUID_INDEX_1. */ /* ECX. */ @@ -563,6 +571,7 @@ enum #define index_cpu_AVX_NE_CONVERT CPUID_INDEX_7_ECX_1 #define index_cpu_AMX_COMPLEX CPUID_INDEX_7_ECX_1 #define index_cpu_PREFETCHI CPUID_INDEX_7_ECX_1 +#define index_cpu_AVX10 CPUID_INDEX_7_ECX_1 #define index_cpu_APX_F CPUID_INDEX_7_ECX_1 /* CPUID_INDEX_19. */ @@ -576,6 +585,13 @@ enum /* EBX. */ #define index_cpu_PTWRITE CPUID_INDEX_14_ECX_0 +/* CPUID_INDEX_24_ECX_0. */ + +/* EBX. */ +#define index_cpu_AVX10_XMM CPUID_INDEX_24_ECX_0 +#define index_cpu_AVX10_YMM CPUID_INDEX_24_ECX_0 +#define index_cpu_AVX10_ZMM CPUID_INDEX_24_ECX_0 + /* CPUID_INDEX_1. */ /* ECX. */ @@ -809,6 +825,7 @@ enum #define reg_AVX_NE_CONVERT edx #define reg_AMX_COMPLEX edx #define reg_PREFETCHI edx +#define reg_AVX10 edx #define reg_APX_F edx /* CPUID_INDEX_19. */ @@ -822,6 +839,14 @@ enum /* EBX. */ #define reg_PTWRITE ebx +/* CPUID_INDEX_24_ECX_0. */ + +/* EBX. */ +#define reg_AVX10_XMM ebx +#define reg_AVX10_YMM ebx +#define reg_AVX10_ZMM ebx + + /* PREFERRED_FEATURE_INDEX_1. First define the bitindex values sequentially, then define the bit_arch* and index_arch_* lookup constants. */ diff --git a/sysdeps/x86/sys/platform/x86.h b/sysdeps/x86/sys/platform/x86.h index 1ea2c5fc0b..fa8c7e158d 100644 --- a/sysdeps/x86/sys/platform/x86.h +++ b/sysdeps/x86/sys/platform/x86.h @@ -29,9 +29,45 @@ __BEGIN_DECLS extern const struct cpuid_feature *__x86_get_cpuid_feature_leaf (unsigned int) __attribute__ ((pure)); +static __inline__ unsigned int +x86_cpu_get_avx10_version_number_from_enum (unsigned int __enum) +{ + return __enum - x86_cpu_AVX10_V1 + 1; +} + +static __inline__ _Bool +x86_cpu_is_index_avx10_version_number (unsigned int __index) +{ + return __index >= (unsigned int) x86_cpu_AVX10_V1 + && __index <= (unsigned int) x86_cpu_AVX10_V255; +} + +static __inline__ unsigned int +x86_cpu_get_avx10_info (unsigned int __index) +{ + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf ( + __index / (8 * sizeof (unsigned int) * 4)); + unsigned int __reg = __index & (8 * sizeof (unsigned int) * 4 - 1); + __reg /= 8 * sizeof (unsigned int); + + return __ptr->cpuid_array[__reg]; +} + +/* Get AVX10 version number in byte form. Must check AVX10 active first. Value + is in range [1, 255]. */ +static __inline__ unsigned int +x86_cpu_get_avx10_version_number (void) +{ + return x86_cpu_get_avx10_info (x86_cpu_index_24_ecx_0_ebx) & 0xff; +} + static __inline__ _Bool x86_cpu_present (unsigned int __index) { + if (x86_cpu_is_index_avx10_version_number (__index)) + return x86_cpu_get_avx10_version_number () + >= x86_cpu_get_avx10_version_number_from_enum (__index); + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf (__index / (8 * sizeof (unsigned int) * 4)); unsigned int __reg @@ -45,6 +81,10 @@ x86_cpu_present (unsigned int __index) static __inline__ _Bool x86_cpu_active (unsigned int __index) { + if (x86_cpu_is_index_avx10_version_number (__index)) + return x86_cpu_get_avx10_version_number () + >= x86_cpu_get_avx10_version_number_from_enum (__index); + const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf (__index / (8 * sizeof (unsigned int) * 4)); unsigned int __reg diff --git a/sysdeps/x86/tst-get-cpu-features.c b/sysdeps/x86/tst-get-cpu-features.c index b27fa7324a..53e68431f1 100644 --- a/sysdeps/x86/tst-get-cpu-features.c +++ b/sysdeps/x86/tst-get-cpu-features.c @@ -219,6 +219,7 @@ do_test (void) CHECK_CPU_FEATURE_PRESENT (AVX_NE_CONVERT); CHECK_CPU_FEATURE_PRESENT (AMX_COMPLEX); CHECK_CPU_FEATURE_PRESENT (PREFETCHI); + CHECK_CPU_FEATURE_PRESENT (AVX10); CHECK_CPU_FEATURE_PRESENT (APX_F); CHECK_CPU_FEATURE_PRESENT (AESKLE); CHECK_CPU_FEATURE_PRESENT (WIDE_KL); @@ -391,11 +392,273 @@ do_test (void) CHECK_CPU_FEATURE_ACTIVE (AVX_NE_CONVERT); CHECK_CPU_FEATURE_ACTIVE (AMX_COMPLEX); CHECK_CPU_FEATURE_ACTIVE (PREFETCHI); + CHECK_CPU_FEATURE_ACTIVE (AVX10); CHECK_CPU_FEATURE_ACTIVE (APX_F); CHECK_CPU_FEATURE_ACTIVE (AESKLE); CHECK_CPU_FEATURE_ACTIVE (WIDE_KL); CHECK_CPU_FEATURE_ACTIVE (PTWRITE); + if (CPU_FEATURE_ACTIVE (AVX10)) + { + CHECK_CPU_FEATURE_ACTIVE (AVX10_XMM); + CHECK_CPU_FEATURE_ACTIVE (AVX10_YMM); + CHECK_CPU_FEATURE_ACTIVE (AVX10_ZMM); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V1); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V2); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V3); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V4); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V5); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V6); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V7); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V8); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V9); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V10); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V11); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V12); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V13); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V14); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V15); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V16); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V17); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V18); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V19); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V20); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V21); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V22); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V23); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V24); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V25); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V26); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V27); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V28); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V29); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V30); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V31); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V32); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V33); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V34); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V35); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V36); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V37); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V38); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V39); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V40); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V41); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V42); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V43); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V44); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V45); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V46); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V47); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V48); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V49); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V50); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V51); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V52); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V53); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V54); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V55); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V56); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V57); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V58); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V59); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V60); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V61); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V62); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V63); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V64); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V65); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V66); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V67); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V68); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V69); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V70); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V71); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V72); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V73); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V74); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V75); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V76); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V77); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V78); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V79); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V80); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V81); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V82); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V83); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V84); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V85); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V86); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V87); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V88); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V89); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V90); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V91); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V92); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V93); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V94); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V95); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V96); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V97); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V98); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V99); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V100); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V101); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V102); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V103); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V104); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V105); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V106); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V107); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V108); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V109); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V110); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V111); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V112); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V113); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V114); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V115); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V116); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V117); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V118); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V119); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V120); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V121); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V122); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V123); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V124); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V125); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V126); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V127); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V128); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V129); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V130); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V131); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V132); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V133); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V134); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V135); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V136); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V137); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V138); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V139); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V140); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V141); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V142); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V143); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V144); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V145); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V146); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V147); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V148); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V149); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V150); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V151); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V152); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V153); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V154); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V155); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V156); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V157); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V158); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V159); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V160); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V161); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V162); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V163); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V164); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V165); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V166); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V167); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V168); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V169); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V170); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V171); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V172); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V173); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V174); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V175); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V176); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V177); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V178); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V179); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V180); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V181); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V182); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V183); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V184); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V185); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V186); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V187); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V188); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V189); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V190); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V191); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V192); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V193); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V194); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V195); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V196); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V197); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V198); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V199); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V200); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V201); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V202); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V203); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V204); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V205); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V206); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V207); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V208); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V209); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V210); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V211); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V212); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V213); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V214); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V215); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V216); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V217); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V218); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V219); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V220); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V221); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V222); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V223); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V224); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V225); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V226); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V227); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V228); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V229); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V230); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V231); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V232); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V233); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V234); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V235); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V236); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V237); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V238); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V239); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V240); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V241); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V242); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V243); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V244); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V245); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V246); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V247); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V248); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V249); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V250); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V251); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V252); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V253); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V254); + CHECK_CPU_FEATURE_ACTIVE (AVX10_V255); + } return 0; }