On Fri, Mar 29, 2024 at 02:13:12PM -0500, Nathan Bossart wrote: > * If the compiler understands AVX512 intrinsics, we assume that it also > knows about the required CPUID and XGETBV intrinsics, and we assume that > the conditions for TRY_POPCNT_FAST are true.
Bleh, cfbot's 32-bit build is unhappy with this [0]. It looks like it's trying to build the AVX512 stuff, but TRY_POPCNT_FAST isn't set. [19:39:11.306] ../src/port/pg_popcount_avx512.c:39:18: warning: implicit declaration of function ‘pg_popcount_fast’; did you mean ‘pg_popcount’? [-Wimplicit-function-declaration] [19:39:11.306] 39 | return popcnt + pg_popcount_fast(buf, bytes); [19:39:11.306] | ^~~~~~~~~~~~~~~~ [19:39:11.306] | pg_popcount There's also a complaint about the inline assembly: [19:39:11.443] ../src/port/pg_popcount_avx512_choose.c:55:1: error: inconsistent operand constraints in an ‘asm’ [19:39:11.443] 55 | __asm__ __volatile__(" xgetbv\n":"=a"(low), "=d"(high):"c"(xcr)); [19:39:11.443] | ^~~~~~~ I'm looking into this... > +#if defined(HAVE__GET_CPUID) > + __get_cpuid_count(7, 0, &exx[0], &exx[1], &exx[2], &exx[3]); > +#elif defined(HAVE__CPUID) > + __cpuidex(exx, 7, 0); Is there any reason we can't use __get_cpuid() and __cpuid() here, given the sub-leaf is 0? [0] https://cirrus-ci.com/task/5475113447981056 -- Nathan Bossart Amazon Web Services: https://aws.amazon.com