mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-31 14:01:18 +08:00
x86: Install <bits/platform/x86.h> [BZ #27958]
1. Install <bits/platform/x86.h> for <sys/platform/x86.h> which includes <bits/platform/x86.h>. 2. Rename HAS_CPU_FEATURE to CPU_FEATURE_PRESENT which checks if the processor has the feature. 3. Rename CPU_FEATURE_USABLE to CPU_FEATURE_ACTIVE which checks if the feature is active. There may be other preconditions, like sufficient stack space or further setup for AMX, which must be satisfied before the feature can be used. This fixes BZ #27958. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
5b8d271571
commit
7c124e3714
@ -148,14 +148,16 @@ Return a pointer to x86 CPU feature structure used by query macros for x86
|
||||
CPU feature @var{leaf}.
|
||||
@end deftypefun
|
||||
|
||||
@deftypefn Macro int HAS_CPU_FEATURE (@var{name})
|
||||
@deftypefn Macro int CPU_FEATURE_PRESENT (@var{name})
|
||||
This macro returns a nonzero value (true) if the processor has the feature
|
||||
@var{name}.
|
||||
@end deftypefn
|
||||
|
||||
@deftypefn Macro int CPU_FEATURE_USABLE (@var{name})
|
||||
@deftypefn Macro int CPU_FEATURE_ACTIVE (@var{name})
|
||||
This macro returns a nonzero value (true) if the processor has the feature
|
||||
@var{name} and the feature is supported by the operating system.
|
||||
@var{name} and the feature is active. There may be other preconditions,
|
||||
like sufficient stack space or further setup for AMX, which must be
|
||||
satisfied before the feature can be used.
|
||||
@end deftypefn
|
||||
|
||||
The supported processor features are:
|
||||
@ -685,20 +687,20 @@ You could query if a processor supports @code{AVX} with:
|
||||
#include <sys/platform/x86.h>
|
||||
|
||||
int
|
||||
support_avx (void)
|
||||
avx_present (void)
|
||||
@{
|
||||
return HAS_CPU_FEATURE (AVX);
|
||||
return CPU_FEATURE_PRESENT (AVX);
|
||||
@}
|
||||
@end smallexample
|
||||
|
||||
and if @code{AVX} is usable with:
|
||||
and if @code{AVX} is active and may be used with:
|
||||
|
||||
@smallexample
|
||||
#include <sys/platform/x86.h>
|
||||
|
||||
int
|
||||
usable_avx (void)
|
||||
avx_active (void)
|
||||
@{
|
||||
return CPU_FEATURE_USABLE (AVX);
|
||||
return CPU_FEATURE_ACTIVE (AVX);
|
||||
@}
|
||||
@end smallexample
|
||||
|
@ -5,7 +5,7 @@ endif
|
||||
ifeq ($(subdir),elf)
|
||||
sysdep_routines += get-cpuid-feature-leaf
|
||||
sysdep-dl-routines += dl-get-cpu-features
|
||||
sysdep_headers += sys/platform/x86.h
|
||||
sysdep_headers += sys/platform/x86.h bits/platform/x86.h
|
||||
|
||||
CFLAGS-get-cpuid-feature-leaf.o += $(no-stack-protector)
|
||||
|
||||
|
@ -36,7 +36,7 @@ enum
|
||||
struct cpuid_feature
|
||||
{
|
||||
unsigned int cpuid_array[4];
|
||||
unsigned int usable_array[4];
|
||||
unsigned int active_array[4];
|
||||
};
|
||||
|
||||
enum cpuid_register_index
|
||||
|
@ -40,69 +40,69 @@ extern void TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *)
|
||||
#endif
|
||||
|
||||
static void
|
||||
update_usable (struct cpu_features *cpu_features)
|
||||
update_active (struct cpu_features *cpu_features)
|
||||
{
|
||||
/* Copy the cpuid bits to usable bits for CPU featuress whose usability
|
||||
/* Copy the cpuid bits to active bits for CPU featuress whose usability
|
||||
in user space can be detected without additonal OS support. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE3);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, PCLMULQDQ);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSSE3);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CMPXCHG16B);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE4_1);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE4_2);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, MOVBE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, POPCNT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AES);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, OSXSAVE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, TSC);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CX8);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CMOV);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CLFSH);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, MMX);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FXSR);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE2);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, HTT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, BMI1);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, HLE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, BMI2);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, ERMS);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RDSEED);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, ADX);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CLFLUSHOPT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CLWB);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SHA);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, PREFETCHWT1);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, OSPKE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, WAITPKG);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, GFNI);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RDPID);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RDRAND);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, CLDEMOTE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, MOVDIRI);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, MOVDIR64B);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FSRM);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RTM_ALWAYS_ABORT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SERIALIZE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, TSXLDTRK);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, LAHF64_SAHF64);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, LZCNT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SSE4A);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, PREFETCHW);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, TBM);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RDTSCP);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, WBNOINVD);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FZLRM);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FSRS);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FSRCS);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, PTWRITE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE3);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, PCLMULQDQ);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSSE3);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CMPXCHG16B);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE4_1);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE4_2);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, MOVBE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, POPCNT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AES);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, OSXSAVE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, TSC);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CX8);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CMOV);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CLFSH);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, MMX);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FXSR);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE2);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, HTT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, BMI1);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, HLE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, BMI2);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, ERMS);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RDSEED);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, ADX);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CLFLUSHOPT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CLWB);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SHA);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, PREFETCHWT1);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, OSPKE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, WAITPKG);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, GFNI);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RDPID);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RDRAND);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, CLDEMOTE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, MOVDIRI);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, MOVDIR64B);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FSRM);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RTM_ALWAYS_ABORT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SERIALIZE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, TSXLDTRK);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, LAHF64_SAHF64);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, LZCNT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SSE4A);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, PREFETCHW);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, TBM);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RDTSCP);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, WBNOINVD);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FZLRM);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FSRS);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FSRCS);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, PTWRITE);
|
||||
|
||||
if (!CPU_FEATURES_CPU_P (cpu_features, RTM_ALWAYS_ABORT))
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, RTM);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, RTM);
|
||||
|
||||
#if CET_ENABLED
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, IBT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, SHSTK);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, IBT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, SHSTK);
|
||||
#endif
|
||||
|
||||
/* Can we call xgetbv? */
|
||||
@ -131,17 +131,17 @@ update_usable (struct cpu_features *cpu_features)
|
||||
|= bit_arch_AVX_Fast_Unaligned_Load;
|
||||
}
|
||||
/* Determine if AVX-VNNI is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX_VNNI);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX_VNNI);
|
||||
/* Determine if FMA is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FMA);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FMA);
|
||||
/* Determine if VAES is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, VAES);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, VAES);
|
||||
/* Determine if VPCLMULQDQ is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, VPCLMULQDQ);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, VPCLMULQDQ);
|
||||
/* Determine if XOP is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, XOP);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, XOP);
|
||||
/* Determine if F16C is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, F16C);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, F16C);
|
||||
}
|
||||
|
||||
/* Check if OPMASK state, upper 256-bit of ZMM0-ZMM15 and
|
||||
@ -155,41 +155,41 @@ update_usable (struct cpu_features *cpu_features)
|
||||
{
|
||||
CPU_FEATURE_SET (cpu_features, AVX512F);
|
||||
/* Determine if AVX512CD is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512CD);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512CD);
|
||||
/* Determine if AVX512ER is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512ER);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512ER);
|
||||
/* Determine if AVX512PF is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512PF);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512PF);
|
||||
/* Determine if AVX512VL is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512VL);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512VL);
|
||||
/* Determine if AVX512DQ is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512DQ);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512DQ);
|
||||
/* Determine if AVX512BW is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512BW);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512BW);
|
||||
/* Determine if AVX512_4FMAPS is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_4FMAPS);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_4FMAPS);
|
||||
/* Determine if AVX512_4VNNIW is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_4VNNIW);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_4VNNIW);
|
||||
/* Determine if AVX512_BITALG is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_BITALG);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_BITALG);
|
||||
/* Determine if AVX512_IFMA is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_IFMA);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_IFMA);
|
||||
/* Determine if AVX512_VBMI is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_VBMI);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_VBMI);
|
||||
/* Determine if AVX512_VBMI2 is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_VBMI2);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_VBMI2);
|
||||
/* Determine if is AVX512_VNNI usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_VNNI);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_VNNI);
|
||||
/* Determine if AVX512_VPOPCNTDQ is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features,
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features,
|
||||
AVX512_VPOPCNTDQ);
|
||||
/* Determine if AVX512_VP2INTERSECT is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features,
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features,
|
||||
AVX512_VP2INTERSECT);
|
||||
/* Determine if AVX512_BF16 is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_BF16);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_BF16);
|
||||
/* Determine if AVX512_FP16 is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AVX512_FP16);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AVX512_FP16);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -199,19 +199,19 @@ update_usable (struct cpu_features *cpu_features)
|
||||
== (bit_XTILECFG_state | bit_XTILEDATA_state))
|
||||
{
|
||||
/* Determine if AMX_BF16 is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AMX_BF16);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AMX_BF16);
|
||||
/* Determine if AMX_TILE is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AMX_TILE);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AMX_TILE);
|
||||
/* Determine if AMX_INT8 is usable. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, AMX_INT8);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, AMX_INT8);
|
||||
}
|
||||
|
||||
/* These features are usable only when OSXSAVE is enabled. */
|
||||
CPU_FEATURE_SET (cpu_features, XSAVE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, XSAVEOPT);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, XSAVEC);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, XGETBV_ECX_1);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, XFD);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, XSAVEOPT);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, XSAVEC);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, XGETBV_ECX_1);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, XFD);
|
||||
|
||||
/* For _dl_runtime_resolve, set xsave_state_size to xsave area
|
||||
size + integer register save size and align it to 64 bytes. */
|
||||
@ -289,8 +289,8 @@ update_usable (struct cpu_features *cpu_features)
|
||||
if (CPU_FEATURES_CPU_P (cpu_features, AESKLE))
|
||||
{
|
||||
CPU_FEATURE_SET (cpu_features, AESKLE);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, KL);
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, WIDE_KL);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, KL);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, WIDE_KL);
|
||||
}
|
||||
|
||||
cpu_features->isa_1 = get_isa_level (cpu_features);
|
||||
@ -426,7 +426,7 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
|
||||
get_extended_indices (cpu_features);
|
||||
|
||||
update_usable (cpu_features);
|
||||
update_active (cpu_features);
|
||||
|
||||
if (family == 0x06)
|
||||
{
|
||||
@ -569,7 +569,7 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
|
||||
get_extended_indices (cpu_features);
|
||||
|
||||
update_usable (cpu_features);
|
||||
update_active (cpu_features);
|
||||
|
||||
ecx = cpu_features->features[CPUID_INDEX_1].cpuid.ecx;
|
||||
|
||||
@ -577,7 +577,7 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
{
|
||||
/* Since the FMA4 bit is in CPUID_INDEX_80000001 and
|
||||
FMA4 requires AVX, determine if FMA4 is usable here. */
|
||||
CPU_FEATURE_SET_USABLE (cpu_features, FMA4);
|
||||
CPU_FEATURE_SET_ACTIVE (cpu_features, FMA4);
|
||||
}
|
||||
|
||||
if (family == 0x15)
|
||||
@ -608,7 +608,7 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
|
||||
get_extended_indices (cpu_features);
|
||||
|
||||
update_usable (cpu_features);
|
||||
update_active (cpu_features);
|
||||
|
||||
model += extended_model;
|
||||
if (family == 0x6)
|
||||
@ -652,7 +652,7 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
{
|
||||
kind = arch_kind_other;
|
||||
get_common_indices (cpu_features, NULL, NULL, NULL, NULL);
|
||||
update_usable (cpu_features);
|
||||
update_active (cpu_features);
|
||||
}
|
||||
|
||||
/* Support i586 if CX8 is available. */
|
||||
|
@ -62,8 +62,8 @@ _dl_diagnostics_cpu (void)
|
||||
cpu_features->features[index].cpuid_array[reg]);
|
||||
for (unsigned int reg = 0; reg < 4; ++reg)
|
||||
print_cpu_feature_internal
|
||||
(index, "usable", reg,
|
||||
cpu_features->features[index].usable_array[reg]);
|
||||
(index, "active", reg,
|
||||
cpu_features->features[index].active_array[reg]);
|
||||
}
|
||||
|
||||
/* The preferred indicators are not part of the ABI and need to be
|
||||
|
@ -43,11 +43,11 @@ enum
|
||||
|
||||
/* Only used directly in cpu-features.c. */
|
||||
#define CPU_FEATURE_SET(ptr, name) \
|
||||
ptr->features[index_cpu_##name].usable.reg_##name |= bit_cpu_##name;
|
||||
ptr->features[index_cpu_##name].active.reg_##name |= bit_cpu_##name;
|
||||
#define CPU_FEATURE_UNSET(ptr, name) \
|
||||
ptr->features[index_cpu_##name].usable.reg_##name &= ~bit_cpu_##name;
|
||||
#define CPU_FEATURE_SET_USABLE(ptr, name) \
|
||||
ptr->features[index_cpu_##name].usable.reg_##name \
|
||||
ptr->features[index_cpu_##name].active.reg_##name &= ~bit_cpu_##name;
|
||||
#define CPU_FEATURE_SET_ACTIVE(ptr, name) \
|
||||
ptr->features[index_cpu_##name].active.reg_##name \
|
||||
|= ptr->features[index_cpu_##name].cpuid.reg_##name & bit_cpu_##name;
|
||||
#define CPU_FEATURE_PREFERRED_P(ptr, name) \
|
||||
((ptr->preferred[index_arch_##name] & bit_arch_##name) != 0)
|
||||
@ -55,10 +55,14 @@ enum
|
||||
#define CPU_FEATURE_CHECK_P(ptr, name, check) \
|
||||
((ptr->features[index_cpu_##name].check.reg_##name \
|
||||
& bit_cpu_##name) != 0)
|
||||
#define CPU_FEATURE_CPU_P(ptr, name) \
|
||||
#define CPU_FEATURE_PRESENT_P(ptr, name) \
|
||||
CPU_FEATURE_CHECK_P (ptr, name, cpuid)
|
||||
#define CPU_FEATURE_ACTIVE_P(ptr, name) \
|
||||
CPU_FEATURE_CHECK_P (ptr, name, active)
|
||||
#define CPU_FEATURE_CPU_P(ptr, name) \
|
||||
CPU_FEATURE_PRESENT_P (ptr, name)
|
||||
#define CPU_FEATURE_USABLE_P(ptr, name) \
|
||||
CPU_FEATURE_CHECK_P (ptr, name, usable)
|
||||
CPU_FEATURE_ACTIVE_P (ptr, name)
|
||||
|
||||
/* HAS_CPU_FEATURE evaluates to true if CPU supports the feature. */
|
||||
#define HAS_CPU_FEATURE(name) \
|
||||
@ -849,8 +853,8 @@ struct cpuid_feature_internal
|
||||
};
|
||||
union
|
||||
{
|
||||
unsigned int usable_array[4];
|
||||
struct cpuid_registers usable;
|
||||
unsigned int active_array[4];
|
||||
struct cpuid_registers active;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -30,7 +30,7 @@ extern const struct cpuid_feature *__x86_get_cpuid_feature_leaf (unsigned int)
|
||||
__attribute__ ((pure));
|
||||
|
||||
static __inline__ _Bool
|
||||
x86_cpu_has_feature (unsigned int __index)
|
||||
x86_cpu_present (unsigned int __index)
|
||||
{
|
||||
const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf
|
||||
(__index / (8 * sizeof (unsigned int) * 4));
|
||||
@ -43,7 +43,7 @@ x86_cpu_has_feature (unsigned int __index)
|
||||
}
|
||||
|
||||
static __inline__ _Bool
|
||||
x86_cpu_is_usable (unsigned int __index)
|
||||
x86_cpu_active (unsigned int __index)
|
||||
{
|
||||
const struct cpuid_feature *__ptr = __x86_get_cpuid_feature_leaf
|
||||
(__index / (8 * sizeof (unsigned int) * 4));
|
||||
@ -52,13 +52,13 @@ x86_cpu_is_usable (unsigned int __index)
|
||||
unsigned int __bit = __reg & (8 * sizeof (unsigned int) - 1);
|
||||
__reg /= 8 * sizeof (unsigned int);
|
||||
|
||||
return __ptr->usable_array[__reg] & (1 << __bit);
|
||||
return __ptr->active_array[__reg] & (1 << __bit);
|
||||
}
|
||||
|
||||
/* HAS_CPU_FEATURE evaluates to true if CPU supports the feature. */
|
||||
#define HAS_CPU_FEATURE(name) x86_cpu_has_feature (x86_cpu_##name)
|
||||
/* CPU_FEATURE_USABLE evaluates to true if the feature is usable. */
|
||||
#define CPU_FEATURE_USABLE(name) x86_cpu_is_usable (x86_cpu_##name)
|
||||
/* CPU_FEATURE_PRESENT evaluates to true if CPU supports the feature. */
|
||||
#define CPU_FEATURE_PRESENT(name) x86_cpu_present (x86_cpu_##name)
|
||||
/* CPU_FEATURE_ACTIVE evaluates to true if the feature is active. */
|
||||
#define CPU_FEATURE_ACTIVE(name) x86_cpu_active (x86_cpu_##name)
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Check CPU_FEATURE_USABLE on IBT and SHSTK.
|
||||
/* Check CPU_FEATURE_ACTIVE on IBT and SHSTK.
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
@ -21,19 +21,19 @@
|
||||
#include <support/test-driver.h>
|
||||
#include <support/xunistd.h>
|
||||
|
||||
/* Check that CPU_FEATURE_USABLE on IBT and SHSTK matches _get_ssp. */
|
||||
/* Check that CPU_FEATURE_ACTIVE on IBT and SHSTK matches _get_ssp. */
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
if (_get_ssp () != 0)
|
||||
{
|
||||
if (CPU_FEATURE_USABLE (IBT) && CPU_FEATURE_USABLE (SHSTK))
|
||||
if (CPU_FEATURE_ACTIVE (IBT) && CPU_FEATURE_ACTIVE (SHSTK))
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!CPU_FEATURE_USABLE (IBT) && !CPU_FEATURE_USABLE (SHSTK))
|
||||
if (!CPU_FEATURE_ACTIVE (IBT) && !CPU_FEATURE_ACTIVE (SHSTK))
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ get_cpuinfo (void)
|
||||
|
||||
int
|
||||
check_proc (const char *proc_name, const char *search_name, int flag,
|
||||
int usable, const char *name)
|
||||
int active, const char *name)
|
||||
{
|
||||
int found = 0;
|
||||
|
||||
@ -79,7 +79,7 @@ check_proc (const char *proc_name, const char *search_name, int flag,
|
||||
|
||||
if (found != flag)
|
||||
{
|
||||
if (found || usable)
|
||||
if (found || active)
|
||||
printf (" *** failure ***\n");
|
||||
else
|
||||
{
|
||||
|
@ -20,15 +20,15 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
check_supports (int supports, int usable, const char *supports_name,
|
||||
check_supports (int supports, int active, const char *supports_name,
|
||||
const char *name)
|
||||
{
|
||||
printf ("Checking %s:\n", name);
|
||||
printf (" %s: %d\n", name, usable);
|
||||
printf (" %s: %d\n", name, active);
|
||||
printf (" __builtin_cpu_supports (%s): %d\n",
|
||||
supports_name, supports);
|
||||
|
||||
if ((supports != 0) != (usable != 0))
|
||||
if ((supports != 0) != (active != 0))
|
||||
{
|
||||
printf (" *** failure ***\n");
|
||||
return 1;
|
||||
@ -37,15 +37,15 @@ check_supports (int supports, int usable, const char *supports_name,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CHECK_SUPPORTS(str, name) \
|
||||
#define CHECK_FEATURE_ACTIVE(str, name) \
|
||||
check_supports (__builtin_cpu_supports (#str), \
|
||||
CPU_FEATURE_USABLE (name), \
|
||||
#str, "CPU_FEATURE_USABLE (" #name ")");
|
||||
CPU_FEATURE_ACTIVE (name), \
|
||||
#str, "CPU_FEATURE_ACTIVE (" #name ")");
|
||||
|
||||
#define CHECK_CPU_SUPPORTS(str, name) \
|
||||
#define CHECK_FEATURE_PRESENT(str, name) \
|
||||
check_supports (__builtin_cpu_supports (#str), \
|
||||
HAS_CPU_FEATURE (name), \
|
||||
#str, "HAS_CPU_FEATURE (" #name ")");
|
||||
CPU_FEATURE_PRESENT (name), \
|
||||
#str, "CPU_FEATURE_PRESENT (" #name ")");
|
||||
|
||||
static int
|
||||
do_test (int argc, char **argv)
|
||||
@ -53,140 +53,140 @@ do_test (int argc, char **argv)
|
||||
int fails = 0;
|
||||
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (adx, ADX);
|
||||
fails += CHECK_FEATURE_ACTIVE (adx, ADX);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (6, 0)
|
||||
fails += CHECK_SUPPORTS (aes, AES);
|
||||
fails += CHECK_FEATURE_ACTIVE (aes, AES);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 1)
|
||||
fails += CHECK_SUPPORTS (amx-bf16, AMX_BF16);
|
||||
fails += CHECK_SUPPORTS (amx-int8, AMX_INT8);
|
||||
fails += CHECK_SUPPORTS (amx-tile, AMX_TILE);
|
||||
fails += CHECK_FEATURE_ACTIVE (amx-bf16, AMX_BF16);
|
||||
fails += CHECK_FEATURE_ACTIVE (amx-int8, AMX_INT8);
|
||||
fails += CHECK_FEATURE_ACTIVE (amx-tile, AMX_TILE);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (avx, AVX);
|
||||
fails += CHECK_SUPPORTS (avx2, AVX2);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx, AVX);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx2, AVX2);
|
||||
#if __GNUC_PREREQ (7, 0)
|
||||
fails += CHECK_SUPPORTS (avx5124fmaps, AVX512_4FMAPS);
|
||||
fails += CHECK_SUPPORTS (avx5124vnniw, AVX512_4VNNIW);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx5124fmaps, AVX512_4FMAPS);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx5124vnniw, AVX512_4VNNIW);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (10, 0)
|
||||
fails += CHECK_SUPPORTS (avx512bf16, AVX512_BF16);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512bf16, AVX512_BF16);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (8, 0)
|
||||
fails += CHECK_SUPPORTS (avx512bitalg, AVX512_BITALG);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512bitalg, AVX512_BITALG);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (6, 0)
|
||||
fails += CHECK_SUPPORTS (avx512ifma, AVX512_IFMA);
|
||||
fails += CHECK_SUPPORTS (avx512vbmi, AVX512_VBMI);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512ifma, AVX512_IFMA);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vbmi, AVX512_VBMI);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (8, 0)
|
||||
fails += CHECK_SUPPORTS (avx512vbmi2, AVX512_VBMI2);
|
||||
fails += CHECK_SUPPORTS (avx512vnni, AVX512_VNNI);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vbmi2, AVX512_VBMI2);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vnni, AVX512_VNNI);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (10, 0)
|
||||
fails += CHECK_SUPPORTS (avx512vp2intersect, AVX512_VP2INTERSECT);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vp2intersect, AVX512_VP2INTERSECT);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (7, 0)
|
||||
fails += CHECK_SUPPORTS (avx512vpopcntdq, AVX512_VPOPCNTDQ);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vpopcntdq, AVX512_VPOPCNTDQ);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (6, 0)
|
||||
fails += CHECK_SUPPORTS (avx512bw, AVX512BW);
|
||||
fails += CHECK_SUPPORTS (avx512cd, AVX512CD);
|
||||
fails += CHECK_SUPPORTS (avx512er, AVX512ER);
|
||||
fails += CHECK_SUPPORTS (avx512dq, AVX512DQ);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512bw, AVX512BW);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512cd, AVX512CD);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512er, AVX512ER);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512dq, AVX512DQ);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (5, 0)
|
||||
fails += CHECK_SUPPORTS (avx512f, AVX512F);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512f, AVX512F);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (6, 0)
|
||||
fails += CHECK_SUPPORTS (avx512pf, AVX512PF);
|
||||
fails += CHECK_SUPPORTS (avx512vl, AVX512VL);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512pf, AVX512PF);
|
||||
fails += CHECK_FEATURE_ACTIVE (avx512vl, AVX512VL);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (5, 0)
|
||||
fails += CHECK_SUPPORTS (bmi, BMI1);
|
||||
fails += CHECK_SUPPORTS (bmi2, BMI2);
|
||||
fails += CHECK_FEATURE_ACTIVE (bmi, BMI1);
|
||||
fails += CHECK_FEATURE_ACTIVE (bmi2, BMI2);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (cldemote, CLDEMOTE);
|
||||
fails += CHECK_SUPPORTS (clflushopt, CLFLUSHOPT);
|
||||
fails += CHECK_SUPPORTS (clwb, CLWB);
|
||||
fails += CHECK_FEATURE_ACTIVE (cldemote, CLDEMOTE);
|
||||
fails += CHECK_FEATURE_ACTIVE (clflushopt, CLFLUSHOPT);
|
||||
fails += CHECK_FEATURE_ACTIVE (clwb, CLWB);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (cmov, CMOV);
|
||||
fails += CHECK_FEATURE_ACTIVE (cmov, CMOV);
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (cmpxchg16b, CMPXCHG16B);
|
||||
fails += CHECK_SUPPORTS (cmpxchg8b, CX8);
|
||||
fails += CHECK_SUPPORTS (enqcmd, ENQCMD);
|
||||
fails += CHECK_SUPPORTS (f16c, F16C);
|
||||
fails += CHECK_FEATURE_ACTIVE (cmpxchg16b, CMPXCHG16B);
|
||||
fails += CHECK_FEATURE_ACTIVE (cmpxchg8b, CX8);
|
||||
fails += CHECK_FEATURE_ACTIVE (enqcmd, ENQCMD);
|
||||
fails += CHECK_FEATURE_ACTIVE (f16c, F16C);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (4, 9)
|
||||
fails += CHECK_SUPPORTS (fma, FMA);
|
||||
fails += CHECK_SUPPORTS (fma4, FMA4);
|
||||
fails += CHECK_FEATURE_ACTIVE (fma, FMA);
|
||||
fails += CHECK_FEATURE_ACTIVE (fma4, FMA4);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_CPU_SUPPORTS (fsgsbase, FSGSBASE);
|
||||
fails += CHECK_SUPPORTS (fxsave, FXSR);
|
||||
fails += CHECK_FEATURE_PRESENT (fsgsbase, FSGSBASE);
|
||||
fails += CHECK_FEATURE_ACTIVE (fxsave, FXSR);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (8, 0)
|
||||
fails += CHECK_SUPPORTS (gfni, GFNI);
|
||||
fails += CHECK_FEATURE_ACTIVE (gfni, GFNI);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (hle, HLE);
|
||||
fails += CHECK_CPU_SUPPORTS (ibt, IBT);
|
||||
fails += CHECK_SUPPORTS (lahf_lm, LAHF64_SAHF64);
|
||||
fails += CHECK_CPU_SUPPORTS (lm, LM);
|
||||
fails += CHECK_SUPPORTS (lwp, LWP);
|
||||
fails += CHECK_SUPPORTS (lzcnt, LZCNT);
|
||||
fails += CHECK_FEATURE_ACTIVE (hle, HLE);
|
||||
fails += CHECK_FEATURE_PRESENT (ibt, IBT);
|
||||
fails += CHECK_FEATURE_ACTIVE (lahf_lm, LAHF64_SAHF64);
|
||||
fails += CHECK_FEATURE_PRESENT (lm, LM);
|
||||
fails += CHECK_FEATURE_ACTIVE (lwp, LWP);
|
||||
fails += CHECK_FEATURE_ACTIVE (lzcnt, LZCNT);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (mmx, MMX);
|
||||
fails += CHECK_FEATURE_ACTIVE (mmx, MMX);
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (movbe, MOVBE);
|
||||
fails += CHECK_SUPPORTS (movdiri, MOVDIRI);
|
||||
fails += CHECK_SUPPORTS (movdir64b, MOVDIR64B);
|
||||
fails += CHECK_SUPPORTS (osxsave, OSXSAVE);
|
||||
fails += CHECK_SUPPORTS (pconfig, PCONFIG);
|
||||
fails += CHECK_SUPPORTS (pku, PKU);
|
||||
fails += CHECK_FEATURE_ACTIVE (movbe, MOVBE);
|
||||
fails += CHECK_FEATURE_ACTIVE (movdiri, MOVDIRI);
|
||||
fails += CHECK_FEATURE_ACTIVE (movdir64b, MOVDIR64B);
|
||||
fails += CHECK_FEATURE_ACTIVE (osxsave, OSXSAVE);
|
||||
fails += CHECK_FEATURE_ACTIVE (pconfig, PCONFIG);
|
||||
fails += CHECK_FEATURE_ACTIVE (pku, PKU);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (popcnt, POPCNT);
|
||||
fails += CHECK_FEATURE_ACTIVE (popcnt, POPCNT);
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (prefetchwt1, PREFETCHWT1);
|
||||
fails += CHECK_SUPPORTS (ptwrite, PTWRITE);
|
||||
fails += CHECK_SUPPORTS (rdpid, RDPID);
|
||||
fails += CHECK_SUPPORTS (rdrnd, RDRAND);
|
||||
fails += CHECK_SUPPORTS (rdseed, RDSEED);
|
||||
fails += CHECK_CPU_SUPPORTS (rtm, RTM);
|
||||
fails += CHECK_SUPPORTS (serialize, SERIALIZE);
|
||||
fails += CHECK_SUPPORTS (sha, SHA);
|
||||
fails += CHECK_CPU_SUPPORTS (shstk, SHSTK);
|
||||
fails += CHECK_FEATURE_ACTIVE (prefetchwt1, PREFETCHWT1);
|
||||
fails += CHECK_FEATURE_ACTIVE (ptwrite, PTWRITE);
|
||||
fails += CHECK_FEATURE_ACTIVE (rdpid, RDPID);
|
||||
fails += CHECK_FEATURE_ACTIVE (rdrnd, RDRAND);
|
||||
fails += CHECK_FEATURE_ACTIVE (rdseed, RDSEED);
|
||||
fails += CHECK_FEATURE_PRESENT (rtm, RTM);
|
||||
fails += CHECK_FEATURE_ACTIVE (serialize, SERIALIZE);
|
||||
fails += CHECK_FEATURE_ACTIVE (sha, SHA);
|
||||
fails += CHECK_FEATURE_PRESENT (shstk, SHSTK);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (sse, SSE);
|
||||
fails += CHECK_SUPPORTS (sse2, SSE2);
|
||||
fails += CHECK_SUPPORTS (sse3, SSE3);
|
||||
fails += CHECK_SUPPORTS (sse4.1, SSE4_1);
|
||||
fails += CHECK_SUPPORTS (sse4.2, SSE4_2);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse, SSE);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse2, SSE2);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse3, SSE3);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse4.1, SSE4_1);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse4.2, SSE4_2);
|
||||
#if __GNUC_PREREQ (4, 9)
|
||||
fails += CHECK_SUPPORTS (sse4a, SSE4A);
|
||||
fails += CHECK_FEATURE_ACTIVE (sse4a, SSE4A);
|
||||
#endif
|
||||
fails += CHECK_SUPPORTS (ssse3, SSSE3);
|
||||
fails += CHECK_FEATURE_ACTIVE (ssse3, SSSE3);
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (tbm, TBM);
|
||||
fails += CHECK_SUPPORTS (tsxldtrk, TSXLDTRK);
|
||||
fails += CHECK_SUPPORTS (vaes, VAES);
|
||||
fails += CHECK_FEATURE_ACTIVE (tbm, TBM);
|
||||
fails += CHECK_FEATURE_ACTIVE (tsxldtrk, TSXLDTRK);
|
||||
fails += CHECK_FEATURE_ACTIVE (vaes, VAES);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (8, 0)
|
||||
fails += CHECK_SUPPORTS (vpclmulqdq, VPCLMULQDQ);
|
||||
fails += CHECK_FEATURE_ACTIVE (vpclmulqdq, VPCLMULQDQ);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (waitpkg, WAITPKG);
|
||||
fails += CHECK_SUPPORTS (wbnoinvd, WBNOINVD);
|
||||
fails += CHECK_FEATURE_ACTIVE (waitpkg, WAITPKG);
|
||||
fails += CHECK_FEATURE_ACTIVE (wbnoinvd, WBNOINVD);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (4, 9)
|
||||
fails += CHECK_SUPPORTS (xop, XOP);
|
||||
fails += CHECK_FEATURE_ACTIVE (xop, XOP);
|
||||
#endif
|
||||
#if __GNUC_PREREQ (11, 0)
|
||||
fails += CHECK_SUPPORTS (xsave, XSAVE);
|
||||
fails += CHECK_SUPPORTS (xsavec, XSAVEC);
|
||||
fails += CHECK_SUPPORTS (xsaveopt, XSAVEOPT);
|
||||
fails += CHECK_CPU_SUPPORTS (xsaves, XSAVES);
|
||||
fails += CHECK_FEATURE_ACTIVE (xsave, XSAVE);
|
||||
fails += CHECK_FEATURE_ACTIVE (xsavec, XSAVEC);
|
||||
fails += CHECK_FEATURE_ACTIVE (xsaveopt, XSAVEOPT);
|
||||
fails += CHECK_FEATURE_PRESENT (xsaves, XSAVES);
|
||||
#endif
|
||||
|
||||
printf ("%d differences between __builtin_cpu_supports and glibc code.\n",
|
||||
|
@ -21,353 +21,353 @@
|
||||
#include <sys/platform/x86.h>
|
||||
#include <support/check.h>
|
||||
|
||||
#define CHECK_CPU_FEATURE(name) \
|
||||
{ \
|
||||
if (HAS_CPU_FEATURE (name)) \
|
||||
printf (" " #name "\n"); \
|
||||
#define CHECK_CPU_FEATURE_PRESENT(name) \
|
||||
{ \
|
||||
if (CPU_FEATURE_PRESENT (name)) \
|
||||
printf (" " #name "\n"); \
|
||||
}
|
||||
|
||||
#define CHECK_CPU_FEATURE_USABLE(name) \
|
||||
{ \
|
||||
if (CPU_FEATURE_USABLE(name)) \
|
||||
printf (" " #name "\n"); \
|
||||
#define CHECK_CPU_FEATURE_ACTIVE(name) \
|
||||
{ \
|
||||
if (CPU_FEATURE_ACTIVE(name)) \
|
||||
printf (" " #name "\n"); \
|
||||
}
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
{
|
||||
#ifdef __SSE2__
|
||||
TEST_VERIFY_EXIT (HAS_CPU_FEATURE (SSE2));
|
||||
TEST_VERIFY_EXIT (CPU_FEATURE_PRESENT (SSE2));
|
||||
#endif
|
||||
|
||||
printf ("CPU features:\n");
|
||||
CHECK_CPU_FEATURE (SSE3);
|
||||
CHECK_CPU_FEATURE (PCLMULQDQ);
|
||||
CHECK_CPU_FEATURE (DTES64);
|
||||
CHECK_CPU_FEATURE (MONITOR);
|
||||
CHECK_CPU_FEATURE (DS_CPL);
|
||||
CHECK_CPU_FEATURE (VMX);
|
||||
CHECK_CPU_FEATURE (SMX);
|
||||
CHECK_CPU_FEATURE (EIST);
|
||||
CHECK_CPU_FEATURE (TM2);
|
||||
CHECK_CPU_FEATURE (SSSE3);
|
||||
CHECK_CPU_FEATURE (CNXT_ID);
|
||||
CHECK_CPU_FEATURE (SDBG);
|
||||
CHECK_CPU_FEATURE (FMA);
|
||||
CHECK_CPU_FEATURE (CMPXCHG16B);
|
||||
CHECK_CPU_FEATURE (XTPRUPDCTRL);
|
||||
CHECK_CPU_FEATURE (PDCM);
|
||||
CHECK_CPU_FEATURE (PCID);
|
||||
CHECK_CPU_FEATURE (DCA);
|
||||
CHECK_CPU_FEATURE (SSE4_1);
|
||||
CHECK_CPU_FEATURE (SSE4_2);
|
||||
CHECK_CPU_FEATURE (X2APIC);
|
||||
CHECK_CPU_FEATURE (MOVBE);
|
||||
CHECK_CPU_FEATURE (POPCNT);
|
||||
CHECK_CPU_FEATURE (TSC_DEADLINE);
|
||||
CHECK_CPU_FEATURE (AES);
|
||||
CHECK_CPU_FEATURE (XSAVE);
|
||||
CHECK_CPU_FEATURE (OSXSAVE);
|
||||
CHECK_CPU_FEATURE (AVX);
|
||||
CHECK_CPU_FEATURE (F16C);
|
||||
CHECK_CPU_FEATURE (RDRAND);
|
||||
CHECK_CPU_FEATURE (FPU);
|
||||
CHECK_CPU_FEATURE (VME);
|
||||
CHECK_CPU_FEATURE (DE);
|
||||
CHECK_CPU_FEATURE (PSE);
|
||||
CHECK_CPU_FEATURE (TSC);
|
||||
CHECK_CPU_FEATURE (MSR);
|
||||
CHECK_CPU_FEATURE (PAE);
|
||||
CHECK_CPU_FEATURE (MCE);
|
||||
CHECK_CPU_FEATURE (CX8);
|
||||
CHECK_CPU_FEATURE (APIC);
|
||||
CHECK_CPU_FEATURE (SEP);
|
||||
CHECK_CPU_FEATURE (MTRR);
|
||||
CHECK_CPU_FEATURE (PGE);
|
||||
CHECK_CPU_FEATURE (MCA);
|
||||
CHECK_CPU_FEATURE (CMOV);
|
||||
CHECK_CPU_FEATURE (PAT);
|
||||
CHECK_CPU_FEATURE (PSE_36);
|
||||
CHECK_CPU_FEATURE (PSN);
|
||||
CHECK_CPU_FEATURE (CLFSH);
|
||||
CHECK_CPU_FEATURE (DS);
|
||||
CHECK_CPU_FEATURE (ACPI);
|
||||
CHECK_CPU_FEATURE (MMX);
|
||||
CHECK_CPU_FEATURE (FXSR);
|
||||
CHECK_CPU_FEATURE (SSE);
|
||||
CHECK_CPU_FEATURE (SSE2);
|
||||
CHECK_CPU_FEATURE (SS);
|
||||
CHECK_CPU_FEATURE (HTT);
|
||||
CHECK_CPU_FEATURE (TM);
|
||||
CHECK_CPU_FEATURE (PBE);
|
||||
CHECK_CPU_FEATURE (FSGSBASE);
|
||||
CHECK_CPU_FEATURE (TSC_ADJUST);
|
||||
CHECK_CPU_FEATURE (SGX);
|
||||
CHECK_CPU_FEATURE (BMI1);
|
||||
CHECK_CPU_FEATURE (HLE);
|
||||
CHECK_CPU_FEATURE (AVX2);
|
||||
CHECK_CPU_FEATURE (SMEP);
|
||||
CHECK_CPU_FEATURE (BMI2);
|
||||
CHECK_CPU_FEATURE (ERMS);
|
||||
CHECK_CPU_FEATURE (INVPCID);
|
||||
CHECK_CPU_FEATURE (RTM);
|
||||
CHECK_CPU_FEATURE (RDT_M);
|
||||
CHECK_CPU_FEATURE (DEPR_FPU_CS_DS);
|
||||
CHECK_CPU_FEATURE (MPX);
|
||||
CHECK_CPU_FEATURE (RDT_A);
|
||||
CHECK_CPU_FEATURE (AVX512F);
|
||||
CHECK_CPU_FEATURE (AVX512DQ);
|
||||
CHECK_CPU_FEATURE (RDSEED);
|
||||
CHECK_CPU_FEATURE (ADX);
|
||||
CHECK_CPU_FEATURE (SMAP);
|
||||
CHECK_CPU_FEATURE (AVX512_IFMA);
|
||||
CHECK_CPU_FEATURE (CLFLUSHOPT);
|
||||
CHECK_CPU_FEATURE (CLWB);
|
||||
CHECK_CPU_FEATURE (TRACE);
|
||||
CHECK_CPU_FEATURE (AVX512PF);
|
||||
CHECK_CPU_FEATURE (AVX512ER);
|
||||
CHECK_CPU_FEATURE (AVX512CD);
|
||||
CHECK_CPU_FEATURE (SHA);
|
||||
CHECK_CPU_FEATURE (AVX512BW);
|
||||
CHECK_CPU_FEATURE (AVX512VL);
|
||||
CHECK_CPU_FEATURE (PREFETCHWT1);
|
||||
CHECK_CPU_FEATURE (AVX512_VBMI);
|
||||
CHECK_CPU_FEATURE (UMIP);
|
||||
CHECK_CPU_FEATURE (PKU);
|
||||
CHECK_CPU_FEATURE (OSPKE);
|
||||
CHECK_CPU_FEATURE (WAITPKG);
|
||||
CHECK_CPU_FEATURE (AVX512_VBMI2);
|
||||
CHECK_CPU_FEATURE (SHSTK);
|
||||
CHECK_CPU_FEATURE (GFNI);
|
||||
CHECK_CPU_FEATURE (VAES);
|
||||
CHECK_CPU_FEATURE (VPCLMULQDQ);
|
||||
CHECK_CPU_FEATURE (AVX512_VNNI);
|
||||
CHECK_CPU_FEATURE (AVX512_BITALG);
|
||||
CHECK_CPU_FEATURE (AVX512_VPOPCNTDQ);
|
||||
CHECK_CPU_FEATURE (RDPID);
|
||||
CHECK_CPU_FEATURE (KL);
|
||||
CHECK_CPU_FEATURE (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE (MOVDIRI);
|
||||
CHECK_CPU_FEATURE (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE (ENQCMD);
|
||||
CHECK_CPU_FEATURE (SGX_LC);
|
||||
CHECK_CPU_FEATURE (PKS);
|
||||
CHECK_CPU_FEATURE (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE (FSRM);
|
||||
CHECK_CPU_FEATURE (UINTR);
|
||||
CHECK_CPU_FEATURE (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE (MD_CLEAR);
|
||||
CHECK_CPU_FEATURE (RTM_ALWAYS_ABORT);
|
||||
CHECK_CPU_FEATURE (SERIALIZE);
|
||||
CHECK_CPU_FEATURE (HYBRID);
|
||||
CHECK_CPU_FEATURE (TSXLDTRK);
|
||||
CHECK_CPU_FEATURE (PCONFIG);
|
||||
CHECK_CPU_FEATURE (IBT);
|
||||
CHECK_CPU_FEATURE (AMX_BF16);
|
||||
CHECK_CPU_FEATURE (AVX512_FP16);
|
||||
CHECK_CPU_FEATURE (AMX_TILE);
|
||||
CHECK_CPU_FEATURE (AMX_INT8);
|
||||
CHECK_CPU_FEATURE (IBRS_IBPB);
|
||||
CHECK_CPU_FEATURE (STIBP);
|
||||
CHECK_CPU_FEATURE (L1D_FLUSH);
|
||||
CHECK_CPU_FEATURE (ARCH_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE (CORE_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE (SSBD);
|
||||
CHECK_CPU_FEATURE (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE (SVM);
|
||||
CHECK_CPU_FEATURE (LZCNT);
|
||||
CHECK_CPU_FEATURE (SSE4A);
|
||||
CHECK_CPU_FEATURE (PREFETCHW);
|
||||
CHECK_CPU_FEATURE (XOP);
|
||||
CHECK_CPU_FEATURE (LWP);
|
||||
CHECK_CPU_FEATURE (FMA4);
|
||||
CHECK_CPU_FEATURE (TBM);
|
||||
CHECK_CPU_FEATURE (SYSCALL_SYSRET);
|
||||
CHECK_CPU_FEATURE (NX);
|
||||
CHECK_CPU_FEATURE (PAGE1GB);
|
||||
CHECK_CPU_FEATURE (RDTSCP);
|
||||
CHECK_CPU_FEATURE (LM);
|
||||
CHECK_CPU_FEATURE (XSAVEOPT);
|
||||
CHECK_CPU_FEATURE (XSAVEC);
|
||||
CHECK_CPU_FEATURE (XGETBV_ECX_1);
|
||||
CHECK_CPU_FEATURE (XSAVES);
|
||||
CHECK_CPU_FEATURE (XFD);
|
||||
CHECK_CPU_FEATURE (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE (WBNOINVD);
|
||||
CHECK_CPU_FEATURE (AVX_VNNI);
|
||||
CHECK_CPU_FEATURE (AVX512_BF16);
|
||||
CHECK_CPU_FEATURE (FZLRM);
|
||||
CHECK_CPU_FEATURE (FSRS);
|
||||
CHECK_CPU_FEATURE (FSRCS);
|
||||
CHECK_CPU_FEATURE (HRESET);
|
||||
CHECK_CPU_FEATURE (LAM);
|
||||
CHECK_CPU_FEATURE (AESKLE);
|
||||
CHECK_CPU_FEATURE (WIDE_KL);
|
||||
CHECK_CPU_FEATURE (PTWRITE);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE3);
|
||||
CHECK_CPU_FEATURE_PRESENT (PCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_PRESENT (DTES64);
|
||||
CHECK_CPU_FEATURE_PRESENT (MONITOR);
|
||||
CHECK_CPU_FEATURE_PRESENT (DS_CPL);
|
||||
CHECK_CPU_FEATURE_PRESENT (VMX);
|
||||
CHECK_CPU_FEATURE_PRESENT (SMX);
|
||||
CHECK_CPU_FEATURE_PRESENT (EIST);
|
||||
CHECK_CPU_FEATURE_PRESENT (TM2);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSSE3);
|
||||
CHECK_CPU_FEATURE_PRESENT (CNXT_ID);
|
||||
CHECK_CPU_FEATURE_PRESENT (SDBG);
|
||||
CHECK_CPU_FEATURE_PRESENT (FMA);
|
||||
CHECK_CPU_FEATURE_PRESENT (CMPXCHG16B);
|
||||
CHECK_CPU_FEATURE_PRESENT (XTPRUPDCTRL);
|
||||
CHECK_CPU_FEATURE_PRESENT (PDCM);
|
||||
CHECK_CPU_FEATURE_PRESENT (PCID);
|
||||
CHECK_CPU_FEATURE_PRESENT (DCA);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE4_1);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE4_2);
|
||||
CHECK_CPU_FEATURE_PRESENT (X2APIC);
|
||||
CHECK_CPU_FEATURE_PRESENT (MOVBE);
|
||||
CHECK_CPU_FEATURE_PRESENT (POPCNT);
|
||||
CHECK_CPU_FEATURE_PRESENT (TSC_DEADLINE);
|
||||
CHECK_CPU_FEATURE_PRESENT (AES);
|
||||
CHECK_CPU_FEATURE_PRESENT (XSAVE);
|
||||
CHECK_CPU_FEATURE_PRESENT (OSXSAVE);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX);
|
||||
CHECK_CPU_FEATURE_PRESENT (F16C);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDRAND);
|
||||
CHECK_CPU_FEATURE_PRESENT (FPU);
|
||||
CHECK_CPU_FEATURE_PRESENT (VME);
|
||||
CHECK_CPU_FEATURE_PRESENT (DE);
|
||||
CHECK_CPU_FEATURE_PRESENT (PSE);
|
||||
CHECK_CPU_FEATURE_PRESENT (TSC);
|
||||
CHECK_CPU_FEATURE_PRESENT (MSR);
|
||||
CHECK_CPU_FEATURE_PRESENT (PAE);
|
||||
CHECK_CPU_FEATURE_PRESENT (MCE);
|
||||
CHECK_CPU_FEATURE_PRESENT (CX8);
|
||||
CHECK_CPU_FEATURE_PRESENT (APIC);
|
||||
CHECK_CPU_FEATURE_PRESENT (SEP);
|
||||
CHECK_CPU_FEATURE_PRESENT (MTRR);
|
||||
CHECK_CPU_FEATURE_PRESENT (PGE);
|
||||
CHECK_CPU_FEATURE_PRESENT (MCA);
|
||||
CHECK_CPU_FEATURE_PRESENT (CMOV);
|
||||
CHECK_CPU_FEATURE_PRESENT (PAT);
|
||||
CHECK_CPU_FEATURE_PRESENT (PSE_36);
|
||||
CHECK_CPU_FEATURE_PRESENT (PSN);
|
||||
CHECK_CPU_FEATURE_PRESENT (CLFSH);
|
||||
CHECK_CPU_FEATURE_PRESENT (DS);
|
||||
CHECK_CPU_FEATURE_PRESENT (ACPI);
|
||||
CHECK_CPU_FEATURE_PRESENT (MMX);
|
||||
CHECK_CPU_FEATURE_PRESENT (FXSR);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE2);
|
||||
CHECK_CPU_FEATURE_PRESENT (SS);
|
||||
CHECK_CPU_FEATURE_PRESENT (HTT);
|
||||
CHECK_CPU_FEATURE_PRESENT (TM);
|
||||
CHECK_CPU_FEATURE_PRESENT (PBE);
|
||||
CHECK_CPU_FEATURE_PRESENT (FSGSBASE);
|
||||
CHECK_CPU_FEATURE_PRESENT (TSC_ADJUST);
|
||||
CHECK_CPU_FEATURE_PRESENT (SGX);
|
||||
CHECK_CPU_FEATURE_PRESENT (BMI1);
|
||||
CHECK_CPU_FEATURE_PRESENT (HLE);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX2);
|
||||
CHECK_CPU_FEATURE_PRESENT (SMEP);
|
||||
CHECK_CPU_FEATURE_PRESENT (BMI2);
|
||||
CHECK_CPU_FEATURE_PRESENT (ERMS);
|
||||
CHECK_CPU_FEATURE_PRESENT (INVPCID);
|
||||
CHECK_CPU_FEATURE_PRESENT (RTM);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDT_M);
|
||||
CHECK_CPU_FEATURE_PRESENT (DEPR_FPU_CS_DS);
|
||||
CHECK_CPU_FEATURE_PRESENT (MPX);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDT_A);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512F);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512DQ);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDSEED);
|
||||
CHECK_CPU_FEATURE_PRESENT (ADX);
|
||||
CHECK_CPU_FEATURE_PRESENT (SMAP);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_IFMA);
|
||||
CHECK_CPU_FEATURE_PRESENT (CLFLUSHOPT);
|
||||
CHECK_CPU_FEATURE_PRESENT (CLWB);
|
||||
CHECK_CPU_FEATURE_PRESENT (TRACE);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512PF);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512ER);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512CD);
|
||||
CHECK_CPU_FEATURE_PRESENT (SHA);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512BW);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512VL);
|
||||
CHECK_CPU_FEATURE_PRESENT (PREFETCHWT1);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_VBMI);
|
||||
CHECK_CPU_FEATURE_PRESENT (UMIP);
|
||||
CHECK_CPU_FEATURE_PRESENT (PKU);
|
||||
CHECK_CPU_FEATURE_PRESENT (OSPKE);
|
||||
CHECK_CPU_FEATURE_PRESENT (WAITPKG);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_VBMI2);
|
||||
CHECK_CPU_FEATURE_PRESENT (SHSTK);
|
||||
CHECK_CPU_FEATURE_PRESENT (GFNI);
|
||||
CHECK_CPU_FEATURE_PRESENT (VAES);
|
||||
CHECK_CPU_FEATURE_PRESENT (VPCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_VNNI);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_BITALG);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_VPOPCNTDQ);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDPID);
|
||||
CHECK_CPU_FEATURE_PRESENT (KL);
|
||||
CHECK_CPU_FEATURE_PRESENT (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE_PRESENT (MOVDIRI);
|
||||
CHECK_CPU_FEATURE_PRESENT (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE_PRESENT (ENQCMD);
|
||||
CHECK_CPU_FEATURE_PRESENT (SGX_LC);
|
||||
CHECK_CPU_FEATURE_PRESENT (PKS);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE_PRESENT (FSRM);
|
||||
CHECK_CPU_FEATURE_PRESENT (UINTR);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE_PRESENT (MD_CLEAR);
|
||||
CHECK_CPU_FEATURE_PRESENT (RTM_ALWAYS_ABORT);
|
||||
CHECK_CPU_FEATURE_PRESENT (SERIALIZE);
|
||||
CHECK_CPU_FEATURE_PRESENT (HYBRID);
|
||||
CHECK_CPU_FEATURE_PRESENT (TSXLDTRK);
|
||||
CHECK_CPU_FEATURE_PRESENT (PCONFIG);
|
||||
CHECK_CPU_FEATURE_PRESENT (IBT);
|
||||
CHECK_CPU_FEATURE_PRESENT (AMX_BF16);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_FP16);
|
||||
CHECK_CPU_FEATURE_PRESENT (AMX_TILE);
|
||||
CHECK_CPU_FEATURE_PRESENT (AMX_INT8);
|
||||
CHECK_CPU_FEATURE_PRESENT (IBRS_IBPB);
|
||||
CHECK_CPU_FEATURE_PRESENT (STIBP);
|
||||
CHECK_CPU_FEATURE_PRESENT (L1D_FLUSH);
|
||||
CHECK_CPU_FEATURE_PRESENT (ARCH_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_PRESENT (CORE_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSBD);
|
||||
CHECK_CPU_FEATURE_PRESENT (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE_PRESENT (SVM);
|
||||
CHECK_CPU_FEATURE_PRESENT (LZCNT);
|
||||
CHECK_CPU_FEATURE_PRESENT (SSE4A);
|
||||
CHECK_CPU_FEATURE_PRESENT (PREFETCHW);
|
||||
CHECK_CPU_FEATURE_PRESENT (XOP);
|
||||
CHECK_CPU_FEATURE_PRESENT (LWP);
|
||||
CHECK_CPU_FEATURE_PRESENT (FMA4);
|
||||
CHECK_CPU_FEATURE_PRESENT (TBM);
|
||||
CHECK_CPU_FEATURE_PRESENT (SYSCALL_SYSRET);
|
||||
CHECK_CPU_FEATURE_PRESENT (NX);
|
||||
CHECK_CPU_FEATURE_PRESENT (PAGE1GB);
|
||||
CHECK_CPU_FEATURE_PRESENT (RDTSCP);
|
||||
CHECK_CPU_FEATURE_PRESENT (LM);
|
||||
CHECK_CPU_FEATURE_PRESENT (XSAVEOPT);
|
||||
CHECK_CPU_FEATURE_PRESENT (XSAVEC);
|
||||
CHECK_CPU_FEATURE_PRESENT (XGETBV_ECX_1);
|
||||
CHECK_CPU_FEATURE_PRESENT (XSAVES);
|
||||
CHECK_CPU_FEATURE_PRESENT (XFD);
|
||||
CHECK_CPU_FEATURE_PRESENT (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE_PRESENT (WBNOINVD);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX_VNNI);
|
||||
CHECK_CPU_FEATURE_PRESENT (AVX512_BF16);
|
||||
CHECK_CPU_FEATURE_PRESENT (FZLRM);
|
||||
CHECK_CPU_FEATURE_PRESENT (FSRS);
|
||||
CHECK_CPU_FEATURE_PRESENT (FSRCS);
|
||||
CHECK_CPU_FEATURE_PRESENT (HRESET);
|
||||
CHECK_CPU_FEATURE_PRESENT (LAM);
|
||||
CHECK_CPU_FEATURE_PRESENT (AESKLE);
|
||||
CHECK_CPU_FEATURE_PRESENT (WIDE_KL);
|
||||
CHECK_CPU_FEATURE_PRESENT (PTWRITE);
|
||||
|
||||
printf ("Usable CPU features:\n");
|
||||
CHECK_CPU_FEATURE_USABLE (SSE3);
|
||||
CHECK_CPU_FEATURE_USABLE (PCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (DTES64);
|
||||
CHECK_CPU_FEATURE_USABLE (MONITOR);
|
||||
CHECK_CPU_FEATURE_USABLE (DS_CPL);
|
||||
CHECK_CPU_FEATURE_USABLE (VMX);
|
||||
CHECK_CPU_FEATURE_USABLE (SMX);
|
||||
CHECK_CPU_FEATURE_USABLE (EIST);
|
||||
CHECK_CPU_FEATURE_USABLE (TM2);
|
||||
CHECK_CPU_FEATURE_USABLE (SSSE3);
|
||||
CHECK_CPU_FEATURE_USABLE (CNXT_ID);
|
||||
CHECK_CPU_FEATURE_USABLE (SDBG);
|
||||
CHECK_CPU_FEATURE_USABLE (FMA);
|
||||
CHECK_CPU_FEATURE_USABLE (CMPXCHG16B);
|
||||
CHECK_CPU_FEATURE_USABLE (XTPRUPDCTRL);
|
||||
CHECK_CPU_FEATURE_USABLE (PDCM);
|
||||
CHECK_CPU_FEATURE_USABLE (PCID);
|
||||
CHECK_CPU_FEATURE_USABLE (DCA);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4_1);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4_2);
|
||||
CHECK_CPU_FEATURE_USABLE (X2APIC);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVBE);
|
||||
CHECK_CPU_FEATURE_USABLE (POPCNT);
|
||||
CHECK_CPU_FEATURE_USABLE (TSC_DEADLINE);
|
||||
CHECK_CPU_FEATURE_USABLE (AES);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVE);
|
||||
CHECK_CPU_FEATURE_USABLE (OSXSAVE);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX);
|
||||
CHECK_CPU_FEATURE_USABLE (F16C);
|
||||
CHECK_CPU_FEATURE_USABLE (RDRAND);
|
||||
CHECK_CPU_FEATURE_USABLE (FPU);
|
||||
CHECK_CPU_FEATURE_USABLE (VME);
|
||||
CHECK_CPU_FEATURE_USABLE (DE);
|
||||
CHECK_CPU_FEATURE_USABLE (PSE);
|
||||
CHECK_CPU_FEATURE_USABLE (TSC);
|
||||
CHECK_CPU_FEATURE_USABLE (MSR);
|
||||
CHECK_CPU_FEATURE_USABLE (PAE);
|
||||
CHECK_CPU_FEATURE_USABLE (MCE);
|
||||
CHECK_CPU_FEATURE_USABLE (CX8);
|
||||
CHECK_CPU_FEATURE_USABLE (APIC);
|
||||
CHECK_CPU_FEATURE_USABLE (SEP);
|
||||
CHECK_CPU_FEATURE_USABLE (MTRR);
|
||||
CHECK_CPU_FEATURE_USABLE (PGE);
|
||||
CHECK_CPU_FEATURE_USABLE (MCA);
|
||||
CHECK_CPU_FEATURE_USABLE (CMOV);
|
||||
CHECK_CPU_FEATURE_USABLE (PAT);
|
||||
CHECK_CPU_FEATURE_USABLE (PSE_36);
|
||||
CHECK_CPU_FEATURE_USABLE (PSN);
|
||||
CHECK_CPU_FEATURE_USABLE (CLFSH);
|
||||
CHECK_CPU_FEATURE_USABLE (DS);
|
||||
CHECK_CPU_FEATURE_USABLE (ACPI);
|
||||
CHECK_CPU_FEATURE_USABLE (MMX);
|
||||
CHECK_CPU_FEATURE_USABLE (FXSR);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE2);
|
||||
CHECK_CPU_FEATURE_USABLE (SS);
|
||||
CHECK_CPU_FEATURE_USABLE (HTT);
|
||||
CHECK_CPU_FEATURE_USABLE (TM);
|
||||
CHECK_CPU_FEATURE_USABLE (PBE);
|
||||
CHECK_CPU_FEATURE_USABLE (FSGSBASE);
|
||||
CHECK_CPU_FEATURE_USABLE (TSC_ADJUST);
|
||||
CHECK_CPU_FEATURE_USABLE (SGX);
|
||||
CHECK_CPU_FEATURE_USABLE (BMI1);
|
||||
CHECK_CPU_FEATURE_USABLE (HLE);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX2);
|
||||
CHECK_CPU_FEATURE_USABLE (SMEP);
|
||||
CHECK_CPU_FEATURE_USABLE (BMI2);
|
||||
CHECK_CPU_FEATURE_USABLE (ERMS);
|
||||
CHECK_CPU_FEATURE_USABLE (INVPCID);
|
||||
CHECK_CPU_FEATURE_USABLE (RTM);
|
||||
CHECK_CPU_FEATURE_USABLE (RDT_M);
|
||||
CHECK_CPU_FEATURE_USABLE (DEPR_FPU_CS_DS);
|
||||
CHECK_CPU_FEATURE_USABLE (MPX);
|
||||
CHECK_CPU_FEATURE_USABLE (RDT_A);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512F);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512DQ);
|
||||
CHECK_CPU_FEATURE_USABLE (RDSEED);
|
||||
CHECK_CPU_FEATURE_USABLE (ADX);
|
||||
CHECK_CPU_FEATURE_USABLE (SMAP);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_IFMA);
|
||||
CHECK_CPU_FEATURE_USABLE (CLFLUSHOPT);
|
||||
CHECK_CPU_FEATURE_USABLE (CLWB);
|
||||
CHECK_CPU_FEATURE_USABLE (TRACE);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512PF);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512ER);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512CD);
|
||||
CHECK_CPU_FEATURE_USABLE (SHA);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512BW);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512VL);
|
||||
CHECK_CPU_FEATURE_USABLE (PREFETCHWT1);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VBMI);
|
||||
CHECK_CPU_FEATURE_USABLE (UMIP);
|
||||
CHECK_CPU_FEATURE_USABLE (PKU);
|
||||
CHECK_CPU_FEATURE_USABLE (OSPKE);
|
||||
CHECK_CPU_FEATURE_USABLE (WAITPKG);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VBMI2);
|
||||
CHECK_CPU_FEATURE_USABLE (SHSTK);
|
||||
CHECK_CPU_FEATURE_USABLE (GFNI);
|
||||
CHECK_CPU_FEATURE_USABLE (VAES);
|
||||
CHECK_CPU_FEATURE_USABLE (VPCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VNNI);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_BITALG);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VPOPCNTDQ);
|
||||
CHECK_CPU_FEATURE_USABLE (RDPID);
|
||||
CHECK_CPU_FEATURE_USABLE (KL);
|
||||
CHECK_CPU_FEATURE_USABLE (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVDIRI);
|
||||
CHECK_CPU_FEATURE_USABLE (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE_USABLE (ENQCMD);
|
||||
CHECK_CPU_FEATURE_USABLE (SGX_LC);
|
||||
CHECK_CPU_FEATURE_USABLE (PKS);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE_USABLE (FSRM);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE_USABLE (MD_CLEAR);
|
||||
CHECK_CPU_FEATURE_USABLE (RTM_ALWAYS_ABORT);
|
||||
CHECK_CPU_FEATURE_USABLE (SERIALIZE);
|
||||
CHECK_CPU_FEATURE_USABLE (HYBRID);
|
||||
CHECK_CPU_FEATURE_USABLE (TSXLDTRK);
|
||||
CHECK_CPU_FEATURE_USABLE (PCONFIG);
|
||||
CHECK_CPU_FEATURE_USABLE (IBT);
|
||||
CHECK_CPU_FEATURE_USABLE (AMX_BF16);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_FP16);
|
||||
CHECK_CPU_FEATURE_USABLE (AMX_TILE);
|
||||
CHECK_CPU_FEATURE_USABLE (AMX_INT8);
|
||||
CHECK_CPU_FEATURE_USABLE (IBRS_IBPB);
|
||||
CHECK_CPU_FEATURE_USABLE (STIBP);
|
||||
CHECK_CPU_FEATURE_USABLE (L1D_FLUSH);
|
||||
CHECK_CPU_FEATURE_USABLE (ARCH_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_USABLE (CORE_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_USABLE (SSBD);
|
||||
CHECK_CPU_FEATURE_USABLE (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE_USABLE (SVM);
|
||||
CHECK_CPU_FEATURE_USABLE (LZCNT);
|
||||
CHECK_CPU_FEATURE_USABLE (SSE4A);
|
||||
CHECK_CPU_FEATURE_USABLE (PREFETCHW);
|
||||
CHECK_CPU_FEATURE_USABLE (XOP);
|
||||
CHECK_CPU_FEATURE_USABLE (LWP);
|
||||
CHECK_CPU_FEATURE_USABLE (FMA4);
|
||||
CHECK_CPU_FEATURE_USABLE (TBM);
|
||||
CHECK_CPU_FEATURE_USABLE (SYSCALL_SYSRET);
|
||||
CHECK_CPU_FEATURE_USABLE (NX);
|
||||
CHECK_CPU_FEATURE_USABLE (PAGE1GB);
|
||||
CHECK_CPU_FEATURE_USABLE (RDTSCP);
|
||||
CHECK_CPU_FEATURE_USABLE (LM);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVEOPT);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVEC);
|
||||
CHECK_CPU_FEATURE_USABLE (XGETBV_ECX_1);
|
||||
CHECK_CPU_FEATURE_USABLE (XSAVES);
|
||||
CHECK_CPU_FEATURE_USABLE (XFD);
|
||||
CHECK_CPU_FEATURE_USABLE (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE_USABLE (WBNOINVD);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX_VNNI);
|
||||
CHECK_CPU_FEATURE_USABLE (AVX512_BF16);
|
||||
CHECK_CPU_FEATURE_USABLE (FZLRM);
|
||||
CHECK_CPU_FEATURE_USABLE (FSRS);
|
||||
CHECK_CPU_FEATURE_USABLE (FSRCS);
|
||||
CHECK_CPU_FEATURE_USABLE (AESKLE);
|
||||
CHECK_CPU_FEATURE_USABLE (WIDE_KL);
|
||||
CHECK_CPU_FEATURE_USABLE (PTWRITE);
|
||||
printf ("Possible CPU features:\n");
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE3);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DTES64);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MONITOR);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DS_CPL);
|
||||
CHECK_CPU_FEATURE_ACTIVE (VMX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SMX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (EIST);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TM2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSSE3);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CNXT_ID);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SDBG);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FMA);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CMPXCHG16B);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XTPRUPDCTRL);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PDCM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PCID);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DCA);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE4_1);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE4_2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (X2APIC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MOVBE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (POPCNT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TSC_DEADLINE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AES);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XSAVE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (OSXSAVE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (F16C);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDRAND);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FPU);
|
||||
CHECK_CPU_FEATURE_ACTIVE (VME);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PSE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TSC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MSR);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PAE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MCE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CX8);
|
||||
CHECK_CPU_FEATURE_ACTIVE (APIC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SEP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MTRR);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PGE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MCA);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CMOV);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PAT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PSE_36);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PSN);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CLFSH);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (ACPI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MMX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FXSR);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (HTT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PBE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FSGSBASE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TSC_ADJUST);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SGX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (BMI1);
|
||||
CHECK_CPU_FEATURE_ACTIVE (HLE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SMEP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (BMI2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (ERMS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (INVPCID);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RTM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDT_M);
|
||||
CHECK_CPU_FEATURE_ACTIVE (DEPR_FPU_CS_DS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MPX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDT_A);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512F);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512DQ);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDSEED);
|
||||
CHECK_CPU_FEATURE_ACTIVE (ADX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SMAP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_IFMA);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CLFLUSHOPT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CLWB);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TRACE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512PF);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512ER);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512CD);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SHA);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512BW);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512VL);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PREFETCHWT1);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_VBMI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (UMIP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PKU);
|
||||
CHECK_CPU_FEATURE_ACTIVE (OSPKE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (WAITPKG);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_VBMI2);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SHSTK);
|
||||
CHECK_CPU_FEATURE_ACTIVE (GFNI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (VAES);
|
||||
CHECK_CPU_FEATURE_ACTIVE (VPCLMULQDQ);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_VNNI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_BITALG);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_VPOPCNTDQ);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDPID);
|
||||
CHECK_CPU_FEATURE_ACTIVE (KL);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CLDEMOTE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MOVDIRI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MOVDIR64B);
|
||||
CHECK_CPU_FEATURE_ACTIVE (ENQCMD);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SGX_LC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PKS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_4VNNIW);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_4FMAPS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FSRM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_VP2INTERSECT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (MD_CLEAR);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RTM_ALWAYS_ABORT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SERIALIZE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (HYBRID);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TSXLDTRK);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PCONFIG);
|
||||
CHECK_CPU_FEATURE_ACTIVE (IBT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AMX_BF16);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_FP16);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AMX_TILE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AMX_INT8);
|
||||
CHECK_CPU_FEATURE_ACTIVE (IBRS_IBPB);
|
||||
CHECK_CPU_FEATURE_ACTIVE (STIBP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (L1D_FLUSH);
|
||||
CHECK_CPU_FEATURE_ACTIVE (ARCH_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_ACTIVE (CORE_CAPABILITIES);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSBD);
|
||||
CHECK_CPU_FEATURE_ACTIVE (LAHF64_SAHF64);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SVM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (LZCNT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SSE4A);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PREFETCHW);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XOP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (LWP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FMA4);
|
||||
CHECK_CPU_FEATURE_ACTIVE (TBM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (SYSCALL_SYSRET);
|
||||
CHECK_CPU_FEATURE_ACTIVE (NX);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PAGE1GB);
|
||||
CHECK_CPU_FEATURE_ACTIVE (RDTSCP);
|
||||
CHECK_CPU_FEATURE_ACTIVE (LM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XSAVEOPT);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XSAVEC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XGETBV_ECX_1);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XSAVES);
|
||||
CHECK_CPU_FEATURE_ACTIVE (XFD);
|
||||
CHECK_CPU_FEATURE_ACTIVE (INVARIANT_TSC);
|
||||
CHECK_CPU_FEATURE_ACTIVE (WBNOINVD);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX_VNNI);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AVX512_BF16);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FZLRM);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FSRS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (FSRCS);
|
||||
CHECK_CPU_FEATURE_ACTIVE (AESKLE);
|
||||
CHECK_CPU_FEATURE_ACTIVE (WIDE_KL);
|
||||
CHECK_CPU_FEATURE_ACTIVE (PTWRITE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* IFUNC resolver with CPU_FEATURE_USABLE.
|
||||
/* IFUNC resolver with CPU_FEATURE_ACTIVE.
|
||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
@ -32,15 +32,15 @@ enum isa
|
||||
__attribute__ ((__optimize__ ("-fno-stack-protector")))
|
||||
get_isa (void)
|
||||
{
|
||||
if (CPU_FEATURE_USABLE (AVX512F))
|
||||
if (CPU_FEATURE_ACTIVE (AVX512F))
|
||||
return avx512f;
|
||||
if (CPU_FEATURE_USABLE (AVX2))
|
||||
if (CPU_FEATURE_ACTIVE (AVX2))
|
||||
return avx2;
|
||||
if (CPU_FEATURE_USABLE (AVX))
|
||||
if (CPU_FEATURE_ACTIVE (AVX))
|
||||
return avx;
|
||||
if (CPU_FEATURE_USABLE (SSE4_2))
|
||||
if (CPU_FEATURE_ACTIVE (SSE4_2))
|
||||
return sse4_2;
|
||||
if (CPU_FEATURE_USABLE (SSE2))
|
||||
if (CPU_FEATURE_ACTIVE (SSE2))
|
||||
return sse2;
|
||||
return none;
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ static int
|
||||
do_test_1 (const char *name, unsigned int loop, int (*prepare) (void),
|
||||
int (*function) (void))
|
||||
{
|
||||
if (!CPU_FEATURE_USABLE (RTM))
|
||||
if (!CPU_FEATURE_ACTIVE (RTM))
|
||||
return EXIT_UNSUPPORTED;
|
||||
|
||||
int status = prepare ();
|
||||
|
@ -24,7 +24,7 @@
|
||||
# define CHECK_ARCH_EXT \
|
||||
do \
|
||||
{ \
|
||||
if (!CPU_FEATURE_USABLE (AVX)) return; \
|
||||
if (!CPU_FEATURE_ACTIVE (AVX)) return; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
# define CHECK_ARCH_EXT \
|
||||
do \
|
||||
{ \
|
||||
if (!CPU_FEATURE_USABLE (AVX2)) return; \
|
||||
if (!CPU_FEATURE_ACTIVE (AVX2)) return; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
# define CHECK_ARCH_EXT \
|
||||
do \
|
||||
{ \
|
||||
if (!CPU_FEATURE_USABLE (AVX512F)) return; \
|
||||
if (!CPU_FEATURE_ACTIVE (AVX512F)) return; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user