Richard Henderson <richard.hender...@linaro.org> writes:
> Use cpuinfo_init() during init_accel(), and the variable cpuinfo > during test_buffer_is_zero_next_accel(). Adjust the logic that > cycles through the set of accelerators for testing. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > --- > util/bufferiszero.c | 126 ++++++++++++++++---------------------------- > 1 file changed, 45 insertions(+), 81 deletions(-) > > diff --git a/util/bufferiszero.c b/util/bufferiszero.c > index 1886bc5ba4..d3c14320ef 100644 > --- a/util/bufferiszero.c > +++ b/util/bufferiszero.c <snip> > +static unsigned __attribute__((noinline)) > +select_accel_cpuinfo(unsigned info) > { > - bool (*fn)(const void *, size_t) = buffer_zero_int; > - if (cache & CACHE_SSE2) { > - fn = buffer_zero_sse2; > - length_to_accel = 64; > - } > -#ifdef CONFIG_AVX2_OPT > - if (cache & CACHE_SSE4) { > - fn = buffer_zero_sse4; > - length_to_accel = 64; > - } > - if (cache & CACHE_AVX2) { > - fn = buffer_zero_avx2; > - length_to_accel = 128; > - } > -#endif > + static const struct { > + unsigned bit; > + unsigned len; > + bool (*fn)(const void *, size_t); > + } all[] = { > #ifdef CONFIG_AVX512F_OPT > - if (cache & CACHE_AVX512F) { > - fn = buffer_zero_avx512; > - length_to_accel = 256; > - } > + { CPUINFO_AVX512F, 256, buffer_zero_avx512 }, > #endif > - buffer_accel = fn; > +#ifdef CONFIG_AVX2_OPT > + { CPUINFO_AVX2, 128, buffer_zero_avx2 }, > + { CPUINFO_SSE4, 64, buffer_zero_sse4 }, > +#endif > + { CPUINFO_SSE2, 64, buffer_zero_sse2 }, > + { CPUINFO_ALWAYS, 0, buffer_zero_int }, > + }; > + Arguably we could have a brief one liner saying table in order of preference. Anyway: Reviewed-by: Alex Bennée <alex.ben...@linaro.org> -- Alex Bennée Virtualisation Tech Lead @ Linaro