PING: V7: [PATCH 2/2] x86: Install <sys/platform/x86.h> [BZ #26124]
H.J. Lu
hjl.tools@gmail.com
Wed Jul 15 14:55:57 GMT 2020
On Mon, Jun 29, 2020 at 9:35 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> Install <sys/platform/x86.h> so that programmers can do
>
> #if __has_include(<sys/platform/x86.h>)
> #include <sys/platform/x86.h>
> #endif
> ...
>
> if (CPU_FEATURE_USABLE (SSE2))
> ...
> if (CPU_FEATURE_USABLE (AVX2))
> ...
>
> <sys/platform/x86.h> exports only:
>
> enum
> {
> COMMON_CPUID_INDEX_1 = 0,
> COMMON_CPUID_INDEX_7,
> COMMON_CPUID_INDEX_80000001,
> COMMON_CPUID_INDEX_D_ECX_1,
> COMMON_CPUID_INDEX_80000007,
> COMMON_CPUID_INDEX_80000008,
> COMMON_CPUID_INDEX_7_ECX_1,
> /* Keep the following line at the end. */
> COMMON_CPUID_INDEX_MAX
> };
>
> struct cpuid_features
> {
> struct cpuid_registers cpuid;
> struct cpuid_registers usable;
> };
>
> struct cpu_features
> {
> struct cpu_features_basic basic;
> struct cpuid_features features[COMMON_CPUID_INDEX_MAX];
> };
>
> /* Get a pointer to the CPU features structure. */
> extern const struct cpu_features *__x86_get_cpu_features
> (unsigned int max) __attribute__ ((const));
>
> Since all feature checks are done through macros, programs compiled with
> a newer <sys/platform/x86.h> are compatible with the older glibc binaries
> as long as the layout of struct cpu_features is identical. The features
> array can be expanded with backward binary compatibility for both .o and
> .so files. When COMMON_CPUID_INDEX_MAX is increased to support new
> processor features, __x86_get_cpu_features in the older glibc binaries
> returns NULL and HAS_CPU_FEATURE/CPU_FEATURE_USABLE return falses on the
> new processor feature. No new symbol version is neeeded.
>
> Both CPU_FEATURE_USABLE and HAS_CPU_FEATURE are provided. HAS_CPU_FEATURE
> can be used to identify processor features.
>
> Note: Although GCC has __builtin_cpu_supports, it only supports a subset
> of <sys/platform/x86.h> and it is equivalent to CPU_FEATURE_USABLE. It
> doesn't support HAS_CPU_FEATURE.
https://sourceware.org/pipermail/libc-alpha/2020-June/115546.html
--
H.J.
More information about the Libc-alpha
mailing list