> > > > > > @@ -7674,13 +7682,21 @@ static bool x86_cpu_filter_features(X86CPU 
> > > > > > *cpu, bool verbose)
> > > > > >                                      &eax_0, &ebx_0, &ecx_0, 
> > > > > > &edx_0);
> > > > > >          uint8_t version = ebx_0 & 0xff;
> > > > > > 
> > > > > > -        if (version < env->avx10_version) {
> > > > > > +        if (!env->avx10_version) {
> > > > > > +            env->avx10_version = version;
> > > > > 
> > > > > x86_cpu_filter_features() is not a good place to assign 
> > > > > avx10_version, I
> > > > > still tend to set it in max_x86_cpu_realize().
> > > > 
> > > > It's not proper to get the host's version when AVX10 cannot be enabled,
> > > > even maybe host doesn't support AVX10.
> > > > 
> > > > As you found out earlier, max_x86_cpu_realize doesn't know if AVX10 can
> > > > be enabled or not.
> > > > 
> > > 
> > > How about moving to x86_cpu_expand_features()? We can set when checking
> > > cpu->max_features.
> > 
> > The feature bit set in x86_cpu_expand_features() is unstable since it
> > may be masked later in x86_cpu_filter_features(). :)
> > 
> 
> A lot of feature bits are set in x86_cpu_expand_features() with reported
> value, so I think avx10_version can also be set to reported value there.
> 
> I mainly want to let avx10_version be assigned only when -cpu host or max,
> so that it can be distinguished from the cpu model. This should also be
> Paolo's original intention in v2.

OK. In this case, extend avx10-version is also consistent with the
semantics of this function. Even if host doesn't support avx10, then in
principle it's ok to read unimplemented avx10-version as 0.

Pls go ahead. :)

Thanks,
Zhao


Reply via email to