mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-01 10:06:57 +03:00
x86: Use Avoid_Non_Temporal_Memset
to control non-temporal path
This is just a refactor and there should be no behavioral change from this commit. The goal is to make `Avoid_Non_Temporal_Memset` a more universal knob for controlling whether we use non-temporal memset rather than having extra logic based on vendor. Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
@ -756,6 +756,12 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
unsigned int stepping = 0;
|
||||
enum cpu_features_kind kind;
|
||||
|
||||
/* Default is avoid non-temporal memset for non Intel/AMD hardware. This is,
|
||||
as of writing this, we only have benchmarks indicatings it profitability
|
||||
on Intel/AMD. */
|
||||
cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
|
||||
|= bit_arch_Avoid_Non_Temporal_Memset;
|
||||
|
||||
cpu_features->cachesize_non_temporal_divisor = 4;
|
||||
#if !HAS_CPUID
|
||||
if (__get_cpuid_max (0, 0) == 0)
|
||||
@ -781,6 +787,11 @@ init_cpu_features (struct cpu_features *cpu_features)
|
||||
|
||||
update_active (cpu_features);
|
||||
|
||||
/* Benchmarks indicate non-temporal memset can be profitable on Intel
|
||||
hardware. */
|
||||
cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
|
||||
&= ~bit_arch_Avoid_Non_Temporal_Memset;
|
||||
|
||||
if (family == 0x06)
|
||||
{
|
||||
model += extended_model;
|
||||
@ -992,6 +1003,11 @@ https://www.intel.com/content/www/us/en/support/articles/000059422/processors.ht
|
||||
|
||||
ecx = cpu_features->features[CPUID_INDEX_1].cpuid.ecx;
|
||||
|
||||
/* Benchmarks indicate non-temporal memset can be profitable on AMD
|
||||
hardware. */
|
||||
cpu_features->preferred[index_arch_Avoid_Non_Temporal_Memset]
|
||||
&= ~bit_arch_Avoid_Non_Temporal_Memset;
|
||||
|
||||
if (CPU_FEATURE_USABLE_P (cpu_features, AVX))
|
||||
{
|
||||
/* Since the FMA4 bit is in CPUID_INDEX_80000001 and
|
||||
|
Reference in New Issue
Block a user