]> sourceware.org Git - glibc.git/commitdiff
Update x86_64 multiarch functions for <cpu-features.h>
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 13 Aug 2015 10:38:47 +0000 (03:38 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 13 Aug 2015 10:41:30 +0000 (03:41 -0700)
This patch updates x86_64 multiarch functions to use the newly defined
HAS_CPU_FEATURE, HAS_ARCH_FEATURE and LOAD_RTLD_GLOBAL_RO_RDX from
<cpu-features.h>.

* sysdeps/x86_64/fpu/multiarch/e_asin.c: Replace HAS_XXX with
HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
* sysdeps/x86_64/fpu/multiarch/e_atan2.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/e_exp.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/e_log.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/e_pow.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_atan.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_fma.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_fmaf.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_sin.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_tan.c: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_ceil.S: Use
LOAD_RTLD_GLOBAL_RO_RDX and HAS_CPU_FEATURE (SSE4_1).
* sysdeps/x86_64/fpu/multiarch/s_ceilf.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_floor.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_floorf.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_nearbyint.S : Likewise.
* sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_rintf.S: Likewise.
* sysdeps/x86_64/fpu/multiarch/s_rintf.S : Likewise.
* sysdeps/x86_64/multiarch/ifunc-impl-list.c: Likewise.
* sysdeps/x86_64/multiarch/sched_cpucount.c: Likewise.
* sysdeps/x86_64/multiarch/strstr.c: Likewise.
* sysdeps/x86_64/multiarch/memmove.c: Likewise.
* sysdeps/x86_64/multiarch/memmove_chk.c: Likewise.
* sysdeps/x86_64/multiarch/test-multiarch.c: Likewise.
* sysdeps/x86_64/multiarch/memcmp.S: Remove __init_cpu_features
call.  Add LOAD_RTLD_GLOBAL_RO_RDX.  Replace HAS_XXX with
HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
* sysdeps/x86_64/multiarch/memcpy.S: Likewise.
* sysdeps/x86_64/multiarch/memcpy_chk.S: Likewise.
* sysdeps/x86_64/multiarch/mempcpy.S: Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk.S: Likewise.
* sysdeps/x86_64/multiarch/memset.S: Likewise.
* sysdeps/x86_64/multiarch/memset_chk.S: Likewise.
* sysdeps/x86_64/multiarch/strcat.S: Likewise.
* sysdeps/x86_64/multiarch/strchr.S: Likewise.
* sysdeps/x86_64/multiarch/strcmp.S: Likewise.
* sysdeps/x86_64/multiarch/strcpy.S: Likewise.
* sysdeps/x86_64/multiarch/strcspn.S: Likewise.
* sysdeps/x86_64/multiarch/strspn.S: Likewise.
* sysdeps/x86_64/multiarch/wcscpy.S: Likewise.
* sysdeps/x86_64/multiarch/wmemcmp.S: Likewise.

40 files changed:
ChangeLog
sysdeps/x86_64/fpu/multiarch/e_asin.c
sysdeps/x86_64/fpu/multiarch/e_atan2.c
sysdeps/x86_64/fpu/multiarch/e_exp.c
sysdeps/x86_64/fpu/multiarch/e_log.c
sysdeps/x86_64/fpu/multiarch/e_pow.c
sysdeps/x86_64/fpu/multiarch/s_atan.c
sysdeps/x86_64/fpu/multiarch/s_ceil.S
sysdeps/x86_64/fpu/multiarch/s_ceilf.S
sysdeps/x86_64/fpu/multiarch/s_floor.S
sysdeps/x86_64/fpu/multiarch/s_floorf.S
sysdeps/x86_64/fpu/multiarch/s_fma.c
sysdeps/x86_64/fpu/multiarch/s_fmaf.c
sysdeps/x86_64/fpu/multiarch/s_nearbyint.S
sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S
sysdeps/x86_64/fpu/multiarch/s_rint.S
sysdeps/x86_64/fpu/multiarch/s_rintf.S
sysdeps/x86_64/fpu/multiarch/s_sin.c
sysdeps/x86_64/fpu/multiarch/s_tan.c
sysdeps/x86_64/multiarch/ifunc-impl-list.c
sysdeps/x86_64/multiarch/memcmp.S
sysdeps/x86_64/multiarch/memcpy.S
sysdeps/x86_64/multiarch/memcpy_chk.S
sysdeps/x86_64/multiarch/memmove.c
sysdeps/x86_64/multiarch/memmove_chk.c
sysdeps/x86_64/multiarch/mempcpy.S
sysdeps/x86_64/multiarch/mempcpy_chk.S
sysdeps/x86_64/multiarch/memset.S
sysdeps/x86_64/multiarch/memset_chk.S
sysdeps/x86_64/multiarch/sched_cpucount.c
sysdeps/x86_64/multiarch/strcat.S
sysdeps/x86_64/multiarch/strchr.S
sysdeps/x86_64/multiarch/strcmp.S
sysdeps/x86_64/multiarch/strcpy.S
sysdeps/x86_64/multiarch/strcspn.S
sysdeps/x86_64/multiarch/strspn.S
sysdeps/x86_64/multiarch/strstr.c
sysdeps/x86_64/multiarch/test-multiarch.c
sysdeps/x86_64/multiarch/wcscpy.S
sysdeps/x86_64/multiarch/wmemcmp.S

index 2775dbadc2861f236d4d606b466aa50d2b3d64e8..5ea2847453b0f97dc2ca9e5340171a6ee46d1e78 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,49 @@
+2015-08-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * sysdeps/x86_64/fpu/multiarch/e_asin.c: Replace HAS_XXX with
+       HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
+       * sysdeps/x86_64/fpu/multiarch/e_atan2.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/e_exp.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/e_log.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/e_pow.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_atan.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_fma.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_fmaf.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_sin.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_tan.c: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_ceil.S: Use
+       LOAD_RTLD_GLOBAL_RO_RDX and HAS_CPU_FEATURE (SSE4_1).
+       * sysdeps/x86_64/fpu/multiarch/s_ceilf.S: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_floor.S: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_floorf.S: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_nearbyint.S : Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_nearbyintf.S: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_rintf.S: Likewise.
+       * sysdeps/x86_64/fpu/multiarch/s_rintf.S : Likewise.
+       * sysdeps/x86_64/multiarch/ifunc-impl-list.c: Likewise.
+       * sysdeps/x86_64/multiarch/sched_cpucount.c: Likewise.
+       * sysdeps/x86_64/multiarch/strstr.c: Likewise.
+       * sysdeps/x86_64/multiarch/memmove.c: Likewise.
+       * sysdeps/x86_64/multiarch/memmove_chk.c: Likewise.
+       * sysdeps/x86_64/multiarch/test-multiarch.c: Likewise.
+       * sysdeps/x86_64/multiarch/memcmp.S: Remove __init_cpu_features
+       call.  Add LOAD_RTLD_GLOBAL_RO_RDX.  Replace HAS_XXX with
+       HAS_CPU_FEATURE/HAS_ARCH_FEATURE (XXX).
+       * sysdeps/x86_64/multiarch/memcpy.S: Likewise.
+       * sysdeps/x86_64/multiarch/memcpy_chk.S: Likewise.
+       * sysdeps/x86_64/multiarch/mempcpy.S: Likewise.
+       * sysdeps/x86_64/multiarch/mempcpy_chk.S: Likewise.
+       * sysdeps/x86_64/multiarch/memset.S: Likewise.
+       * sysdeps/x86_64/multiarch/memset_chk.S: Likewise.
+       * sysdeps/x86_64/multiarch/strcat.S: Likewise.
+       * sysdeps/x86_64/multiarch/strchr.S: Likewise.
+       * sysdeps/x86_64/multiarch/strcmp.S: Likewise.
+       * sysdeps/x86_64/multiarch/strcpy.S: Likewise.
+       * sysdeps/x86_64/multiarch/strcspn.S: Likewise.
+       * sysdeps/x86_64/multiarch/strspn.S: Likewise.
+       * sysdeps/x86_64/multiarch/wcscpy.S: Likewise.
+       * sysdeps/x86_64/multiarch/wmemcmp.S: Likewise.
+
 2015-08-13  H.J. Lu  <hongjiu.lu@intel.com>
 
        * sysdeps/i386/dl-machine.h: Include <cpu-features.c>.
index 55865c02f360e2a368495649a932c52008943989..a0edb96308f86b661d0696f942e6a6b9fbfd50d1 100644 (file)
@@ -9,11 +9,15 @@ extern double __ieee754_acos_fma4 (double);
 extern double __ieee754_asin_fma4 (double);
 
 libm_ifunc (__ieee754_acos,
-           HAS_FMA4 ? __ieee754_acos_fma4 : __ieee754_acos_sse2);
+           HAS_ARCH_FEATURE (FMA4_Usable)
+           ? __ieee754_acos_fma4
+           : __ieee754_acos_sse2);
 strong_alias (__ieee754_acos, __acos_finite)
 
 libm_ifunc (__ieee754_asin,
-           HAS_FMA4 ? __ieee754_asin_fma4 : __ieee754_asin_sse2);
+           HAS_ARCH_FEATURE (FMA4_Usable)
+           ? __ieee754_asin_fma4
+           : __ieee754_asin_sse2);
 strong_alias (__ieee754_asin, __asin_finite)
 
 # define __ieee754_acos __ieee754_acos_sse2
index 547681cb59da0d43410e4aade9126f686fa85f05..269dcc9165d5d7957c33fa078e28a46e0c546250 100644 (file)
@@ -8,14 +8,15 @@ extern double __ieee754_atan2_avx (double, double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_atan2_fma4 (double, double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __ieee754_atan2_fma4 ((void *) 0)
 # endif
 
 libm_ifunc (__ieee754_atan2,
-           HAS_FMA4 ? __ieee754_atan2_fma4
-           : (HAS_AVX ? __ieee754_atan2_avx : __ieee754_atan2_sse2));
+           HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_atan2_fma4
+           : (HAS_ARCH_FEATURE (AVX_Usable)
+              ? __ieee754_atan2_avx : __ieee754_atan2_sse2));
 strong_alias (__ieee754_atan2, __atan2_finite)
 
 # define __ieee754_atan2 __ieee754_atan2_sse2
index d244954056f0c5db277d6f80c890bbd1a1136b24..9c124ca11a13df686287759177c98f0ee67a4bf1 100644 (file)
@@ -8,14 +8,15 @@ extern double __ieee754_exp_avx (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_exp_fma4 (double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __ieee754_exp_fma4 ((void *) 0)
 # endif
 
 libm_ifunc (__ieee754_exp,
-           HAS_FMA4 ? __ieee754_exp_fma4
-           : (HAS_AVX ? __ieee754_exp_avx : __ieee754_exp_sse2));
+           HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_exp_fma4
+           : (HAS_ARCH_FEATURE (AVX_Usable)
+              ? __ieee754_exp_avx : __ieee754_exp_sse2));
 strong_alias (__ieee754_exp, __exp_finite)
 
 # define __ieee754_exp __ieee754_exp_sse2
index 98054737bd5216247dbf34b985b1a7bbcdc1a1fc..04e9ac553b620c75f49d1bf2bc0530e542f2581a 100644 (file)
@@ -8,14 +8,15 @@ extern double __ieee754_log_avx (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __ieee754_log_fma4 (double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __ieee754_log_fma4 ((void *) 0)
 # endif
 
 libm_ifunc (__ieee754_log,
-           HAS_FMA4 ? __ieee754_log_fma4
-           : (HAS_AVX ? __ieee754_log_avx : __ieee754_log_sse2));
+           HAS_ARCH_FEATURE (FMA4_Usable) ? __ieee754_log_fma4
+           : (HAS_ARCH_FEATURE (AVX_Usable)
+              ? __ieee754_log_avx : __ieee754_log_sse2));
 strong_alias (__ieee754_log, __log_finite)
 
 # define __ieee754_log __ieee754_log_sse2
index 433cce0de64be55a829aaa304979dfe6d02d7591..6d422d6b6f1e02685a93cc9be694d73afe4f86b2 100644 (file)
@@ -6,7 +6,10 @@
 extern double __ieee754_pow_sse2 (double, double);
 extern double __ieee754_pow_fma4 (double, double);
 
-libm_ifunc (__ieee754_pow, HAS_FMA4 ? __ieee754_pow_fma4 : __ieee754_pow_sse2);
+libm_ifunc (__ieee754_pow,
+           HAS_ARCH_FEATURE (FMA4_Usable)
+           ? __ieee754_pow_fma4
+           : __ieee754_pow_sse2);
 strong_alias (__ieee754_pow, __pow_finite)
 
 # define __ieee754_pow __ieee754_pow_sse2
index ae16d7c9bb645e21997ad74330e6a75d6dc54384..57b5c65f67f058dd0f448c4f54ab2432e14bda77 100644 (file)
@@ -7,13 +7,14 @@ extern double __atan_avx (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __atan_fma4 (double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __atan_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (atan, (HAS_FMA4 ? __atan_fma4 :
-                  HAS_AVX ? __atan_avx : __atan_sse2));
+libm_ifunc (atan, (HAS_ARCH_FEATURE (FMA4_Usable) ? __atan_fma4 :
+                  HAS_ARCH_FEATURE (AVX_Usable)
+                  ? __atan_avx : __atan_sse2));
 
 # define atan __atan_sse2
 #endif
index 00ecede74d638879e87e3a1da0a01183091a7ce1..c1b9026594f00a1e99993ead2f7d6b11f1955fd4 100644 (file)
 
 ENTRY(__ceil)
        .type   __ceil, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __ceil_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __ceil_c(%rip), %rax
 2:     ret
index c8ed70553e6c829548fa3eb9bf6831cfb2a8ec9b..7809e0373e22d49d85b52e58e000ece3611fb67c 100644 (file)
 
 ENTRY(__ceilf)
        .type   __ceilf, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __ceilf_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __ceilf_c(%rip), %rax
 2:     ret
index 952ffaa314bd1f4661ff580a088a9a0258f929db..fa3f98ea5c2703be1421db747effa530a120f2f0 100644 (file)
 
 ENTRY(__floor)
        .type   __floor, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __floor_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __floor_c(%rip), %rax
 2:     ret
index c8231e86b38066c51d1ea576586e87ada88a477f..f60f662e0391483fc9a2420de0b4749bb289bf85 100644 (file)
 
 ENTRY(__floorf)
        .type   __floorf, @gnu_indirect_function
-       call    __get_cpu_features@plt
+       LOAD_RTLD_GLOBAL_RO_RDX
        movq    %rax, %rdx
        leaq    __floorf_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __floorf_c(%rip), %rax
 2:     ret
index 0963a0b36a716ec6538c8e87b4e7c59eb554d116..78e77322454ce8f3c17146d4e1dc9727f2141c6d 100644 (file)
@@ -42,14 +42,15 @@ __fma_fma4 (double x, double y, double z)
   return x;
 }
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __fma_fma4 ((void *) 0)
 # endif
 
 
-libm_ifunc (__fma, HAS_FMA
-           ? __fma_fma3 : (HAS_FMA4 ? __fma_fma4 : __fma_sse2));
+libm_ifunc (__fma, HAS_ARCH_FEATURE (FMA_Usable)
+           ? __fma_fma3 : (HAS_ARCH_FEATURE (FMA4_Usable)
+                           ? __fma_fma4 : __fma_sse2));
 weak_alias (__fma, fma)
 
 # define __fma __fma_sse2
index 6046961f869481090adc9adfc2ca330c2ad79496..bebd3ee431104ce0029ab6439b6ba0f49c8a368e 100644 (file)
@@ -41,14 +41,15 @@ __fmaf_fma4 (float x, float y, float z)
   return x;
 }
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __fmaf_fma4 ((void *) 0)
 # endif
 
 
-libm_ifunc (__fmaf, HAS_FMA
-           ? __fmaf_fma3 : (HAS_FMA4 ? __fmaf_fma4 : __fmaf_sse2));
+libm_ifunc (__fmaf, HAS_ARCH_FEATURE (FMA_Usable)
+           ? __fmaf_fma3 : (HAS_ARCH_FEATURE (FMA4_Usable)
+                            ? __fmaf_fma4 : __fmaf_sse2));
 weak_alias (__fmaf, fmaf)
 
 # define __fmaf __fmaf_sse2
index b5d32b5873c19a8e90cf10bc1e1896d394e787a1..109395ca3711db7d2d80f26e98115dcf26f17c57 100644 (file)
 
 ENTRY(__nearbyint)
        .type   __nearbyint, @gnu_indirect_function
-       call    __get_cpu_features@plt
+       LOAD_RTLD_GLOBAL_RO_RDX
        movq    %rax, %rdx
        leaq    __nearbyint_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __nearbyint_c(%rip), %rax
 2:     ret
index cd7e177a55a4a03a6177f426c8833f44e277dac6..b870c0c217f314fe090746ee751b72572463c8cf 100644 (file)
 
 ENTRY(__nearbyintf)
        .type   __nearbyintf, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __nearbyintf_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __nearbyintf_c(%rip), %rax
 2:     ret
index f52cef65dbf062432dd74bb5a203c72cd3e29802..b238d4981c80aaf94de76c8e815d1a19fd6a2c99 100644 (file)
 
 ENTRY(__rint)
        .type   __rint, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __rint_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __rint_c(%rip), %rax
 2:     ret
index e2608d4c4ec539efba2266215b8b2225520096f4..8869196b9773d6ab6dc39f09555bb74489837841 100644 (file)
 
 ENTRY(__rintf)
        .type   __rintf, @gnu_indirect_function
-       call    __get_cpu_features@plt
-       movq    %rax, %rdx
+       LOAD_RTLD_GLOBAL_RO_RDX
        leaq    __rintf_sse41(%rip), %rax
-       testl   $bit_SSE4_1, CPUID_OFFSET+index_SSE4_1(%rdx)
+       HAS_CPU_FEATURE (SSE4_1)
        jnz     2f
        leaq    __rintf_c(%rip), %rax
 2:     ret
index a0c2521c983df9e3fd5a2f3b0e5f85a3e060a0e9..3bc73306dc6143ee9ef633ab8e8642aaa60040a1 100644 (file)
@@ -11,18 +11,20 @@ extern double __sin_avx (double);
 extern double __cos_fma4 (double);
 extern double __sin_fma4 (double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __cos_fma4 ((void *) 0)
 #  define __sin_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (__cos, (HAS_FMA4 ? __cos_fma4 :
-                   HAS_AVX ? __cos_avx : __cos_sse2));
+libm_ifunc (__cos, (HAS_ARCH_FEATURE (FMA4_Usable) ? __cos_fma4 :
+                   HAS_ARCH_FEATURE (AVX_Usable)
+                   ? __cos_avx : __cos_sse2));
 weak_alias (__cos, cos)
 
-libm_ifunc (__sin, (HAS_FMA4 ? __sin_fma4 :
-                   HAS_AVX ? __sin_avx : __sin_sse2));
+libm_ifunc (__sin, (HAS_ARCH_FEATURE (FMA4_Usable) ? __sin_fma4 :
+                   HAS_ARCH_FEATURE (AVX_Usable)
+                   ? __sin_avx : __sin_sse2));
 weak_alias (__sin, sin)
 
 # define __cos __cos_sse2
index 904308fadad9b640cfaa6ae5bab32252cdd96aa2..d99d9db3d5545c62986a37ffb603bf5ff5af01b3 100644 (file)
@@ -7,13 +7,14 @@ extern double __tan_avx (double);
 # ifdef HAVE_FMA4_SUPPORT
 extern double __tan_fma4 (double);
 # else
-#  undef HAS_FMA4
-#  define HAS_FMA4 0
+#  undef HAS_ARCH_FEATURE
+#  define HAS_ARCH_FEATURE(feature) 0
 #  define __tan_fma4 ((void *) 0)
 # endif
 
-libm_ifunc (tan, (HAS_FMA4 ? __tan_fma4 :
-                 HAS_AVX ? __tan_avx : __tan_sse2));
+libm_ifunc (tan, (HAS_ARCH_FEATURE (FMA4_Usable) ? __tan_fma4 :
+                 HAS_ARCH_FEATURE (AVX_Usable)
+                 ? __tan_avx : __tan_sse2));
 
 # define tan __tan_sse2
 #endif
index b64e4f15328c577e6b7d8199a1f1e042e54ea7a5..f5a576c30160e9b94f5610a2605ad12b62846a01 100644 (file)
@@ -39,48 +39,57 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/memcmp.S.  */
   IFUNC_IMPL (i, name, memcmp,
-             IFUNC_IMPL_ADD (array, i, memcmp, HAS_SSE4_1,
+             IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSE4_1),
                              __memcmp_sse4_1)
-             IFUNC_IMPL_ADD (array, i, memcmp, HAS_SSSE3, __memcmp_ssse3)
+             IFUNC_IMPL_ADD (array, i, memcmp, HAS_CPU_FEATURE (SSSE3),
+                             __memcmp_ssse3)
              IFUNC_IMPL_ADD (array, i, memcmp, 1, __memcmp_sse2))
 
   /* Support sysdeps/x86_64/multiarch/memmove_chk.S.  */
   IFUNC_IMPL (i, name, __memmove_chk,
-             IFUNC_IMPL_ADD (array, i, __memmove_chk, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, __memmove_chk,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __memmove_chk_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, __memmove_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __memmove_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __memmove_chk_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, __memmove_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __memmove_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __memmove_chk_ssse3)
              IFUNC_IMPL_ADD (array, i, __memmove_chk, 1,
                              __memmove_chk_sse2))
 
   /* Support sysdeps/x86_64/multiarch/memmove.S.  */
   IFUNC_IMPL (i, name, memmove,
-             IFUNC_IMPL_ADD (array, i, memmove, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, memmove,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __memmove_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, memmove, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3),
                              __memmove_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, memmove, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, memmove, HAS_CPU_FEATURE (SSSE3),
                              __memmove_ssse3)
              IFUNC_IMPL_ADD (array, i, memmove, 1, __memmove_sse2))
 
 #ifdef HAVE_AVX2_SUPPORT
   /* Support sysdeps/x86_64/multiarch/memset_chk.S.  */
   IFUNC_IMPL (i, name, __memset_chk,
-             IFUNC_IMPL_ADD (array, i, __memset_chk, 1, __memset_chk_sse2)
-             IFUNC_IMPL_ADD (array, i, __memset_chk, HAS_AVX2,
+             IFUNC_IMPL_ADD (array, i, __memset_chk, 1,
+                             __memset_chk_sse2)
+             IFUNC_IMPL_ADD (array, i, __memset_chk,
+                             HAS_ARCH_FEATURE (AVX2_Usable),
                              __memset_chk_avx2))
 
   /* Support sysdeps/x86_64/multiarch/memset.S.  */
   IFUNC_IMPL (i, name, memset,
              IFUNC_IMPL_ADD (array, i, memset, 1, __memset_sse2)
-             IFUNC_IMPL_ADD (array, i, memset, HAS_AVX2, __memset_avx2))
+             IFUNC_IMPL_ADD (array, i, memset,
+                             HAS_ARCH_FEATURE (AVX2_Usable),
+                             __memset_avx2))
 #endif
 
   /* Support sysdeps/x86_64/multiarch/stpncpy.S.  */
   IFUNC_IMPL (i, name, stpncpy,
-             IFUNC_IMPL_ADD (array, i, stpncpy, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, stpncpy, HAS_CPU_FEATURE (SSSE3),
                              __stpncpy_ssse3)
              IFUNC_IMPL_ADD (array, i, stpncpy, 1,
                              __stpncpy_sse2_unaligned)
@@ -88,27 +97,34 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/stpcpy.S.  */
   IFUNC_IMPL (i, name, stpcpy,
-             IFUNC_IMPL_ADD (array, i, stpcpy, HAS_SSSE3, __stpcpy_ssse3)
+             IFUNC_IMPL_ADD (array, i, stpcpy, HAS_CPU_FEATURE (SSSE3),
+                             __stpcpy_ssse3)
              IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2_unaligned)
              IFUNC_IMPL_ADD (array, i, stpcpy, 1, __stpcpy_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strcasecmp_l.S.  */
   IFUNC_IMPL (i, name, strcasecmp,
-             IFUNC_IMPL_ADD (array, i, strcasecmp, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, strcasecmp,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __strcasecmp_avx)
-             IFUNC_IMPL_ADD (array, i, strcasecmp, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strcasecmp,
+                             HAS_CPU_FEATURE (SSE4_2),
                              __strcasecmp_sse42)
-             IFUNC_IMPL_ADD (array, i, strcasecmp, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strcasecmp,
+                             HAS_CPU_FEATURE (SSSE3),
                              __strcasecmp_ssse3)
              IFUNC_IMPL_ADD (array, i, strcasecmp, 1, __strcasecmp_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strcasecmp_l.S.  */
   IFUNC_IMPL (i, name, strcasecmp_l,
-             IFUNC_IMPL_ADD (array, i, strcasecmp_l, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, strcasecmp_l,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __strcasecmp_l_avx)
-             IFUNC_IMPL_ADD (array, i, strcasecmp_l, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strcasecmp_l,
+                             HAS_CPU_FEATURE (SSE4_2),
                              __strcasecmp_l_sse42)
-             IFUNC_IMPL_ADD (array, i, strcasecmp_l, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strcasecmp_l,
+                             HAS_CPU_FEATURE (SSSE3),
                              __strcasecmp_l_ssse3)
              IFUNC_IMPL_ADD (array, i, strcasecmp_l, 1,
                              __strcasecmp_l_sse2))
@@ -119,7 +135,8 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strcat.S.  */
   IFUNC_IMPL (i, name, strcat,
-             IFUNC_IMPL_ADD (array, i, strcat, HAS_SSSE3, __strcat_ssse3)
+             IFUNC_IMPL_ADD (array, i, strcat, HAS_CPU_FEATURE (SSSE3),
+                             __strcat_ssse3)
              IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2_unaligned)
              IFUNC_IMPL_ADD (array, i, strcat, 1, __strcat_sse2))
 
@@ -130,48 +147,57 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strcmp.S.  */
   IFUNC_IMPL (i, name, strcmp,
-             IFUNC_IMPL_ADD (array, i, strcmp, HAS_SSE4_2, __strcmp_sse42)
-             IFUNC_IMPL_ADD (array, i, strcmp, HAS_SSSE3, __strcmp_ssse3)
+             IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSE4_2),
+                             __strcmp_sse42)
+             IFUNC_IMPL_ADD (array, i, strcmp, HAS_CPU_FEATURE (SSSE3),
+                             __strcmp_ssse3)
              IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2_unaligned)
              IFUNC_IMPL_ADD (array, i, strcmp, 1, __strcmp_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strcpy.S.  */
   IFUNC_IMPL (i, name, strcpy,
-             IFUNC_IMPL_ADD (array, i, strcpy, HAS_SSSE3, __strcpy_ssse3)
+             IFUNC_IMPL_ADD (array, i, strcpy, HAS_CPU_FEATURE (SSSE3),
+                             __strcpy_ssse3)
              IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2_unaligned)
              IFUNC_IMPL_ADD (array, i, strcpy, 1, __strcpy_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strcspn.S.  */
   IFUNC_IMPL (i, name, strcspn,
-             IFUNC_IMPL_ADD (array, i, strcspn, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strcspn, HAS_CPU_FEATURE (SSE4_2),
                              __strcspn_sse42)
              IFUNC_IMPL_ADD (array, i, strcspn, 1, __strcspn_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strncase_l.S.  */
   IFUNC_IMPL (i, name, strncasecmp,
-             IFUNC_IMPL_ADD (array, i, strncasecmp, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, strncasecmp,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __strncasecmp_avx)
-             IFUNC_IMPL_ADD (array, i, strncasecmp, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strncasecmp,
+                             HAS_CPU_FEATURE (SSE4_2),
                              __strncasecmp_sse42)
-             IFUNC_IMPL_ADD (array, i, strncasecmp, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strncasecmp,
+                             HAS_CPU_FEATURE (SSSE3),
                              __strncasecmp_ssse3)
              IFUNC_IMPL_ADD (array, i, strncasecmp, 1,
                              __strncasecmp_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strncase_l.S.  */
   IFUNC_IMPL (i, name, strncasecmp_l,
-             IFUNC_IMPL_ADD (array, i, strncasecmp_l, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, strncasecmp_l,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __strncasecmp_l_avx)
-             IFUNC_IMPL_ADD (array, i, strncasecmp_l, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strncasecmp_l,
+                             HAS_CPU_FEATURE (SSE4_2),
                              __strncasecmp_l_sse42)
-             IFUNC_IMPL_ADD (array, i, strncasecmp_l, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strncasecmp_l,
+                             HAS_CPU_FEATURE (SSSE3),
                              __strncasecmp_l_ssse3)
              IFUNC_IMPL_ADD (array, i, strncasecmp_l, 1,
                              __strncasecmp_l_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strncat.S.  */
   IFUNC_IMPL (i, name, strncat,
-             IFUNC_IMPL_ADD (array, i, strncat, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strncat, HAS_CPU_FEATURE (SSSE3),
                              __strncat_ssse3)
              IFUNC_IMPL_ADD (array, i, strncat, 1,
                              __strncat_sse2_unaligned)
@@ -179,7 +205,7 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strncpy.S.  */
   IFUNC_IMPL (i, name, strncpy,
-             IFUNC_IMPL_ADD (array, i, strncpy, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strncpy, HAS_CPU_FEATURE (SSSE3),
                              __strncpy_ssse3)
              IFUNC_IMPL_ADD (array, i, strncpy, 1,
                              __strncpy_sse2_unaligned)
@@ -187,14 +213,15 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/strpbrk.S.  */
   IFUNC_IMPL (i, name, strpbrk,
-             IFUNC_IMPL_ADD (array, i, strpbrk, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strpbrk, HAS_CPU_FEATURE (SSE4_2),
                              __strpbrk_sse42)
              IFUNC_IMPL_ADD (array, i, strpbrk, 1, __strpbrk_sse2))
 
 
   /* Support sysdeps/x86_64/multiarch/strspn.S.  */
   IFUNC_IMPL (i, name, strspn,
-             IFUNC_IMPL_ADD (array, i, strspn, HAS_SSE4_2, __strspn_sse42)
+             IFUNC_IMPL_ADD (array, i, strspn, HAS_CPU_FEATURE (SSE4_2),
+                             __strspn_sse42)
              IFUNC_IMPL_ADD (array, i, strspn, 1, __strspn_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strstr.c.  */
@@ -204,65 +231,75 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
 
   /* Support sysdeps/x86_64/multiarch/wcscpy.S.  */
   IFUNC_IMPL (i, name, wcscpy,
-             IFUNC_IMPL_ADD (array, i, wcscpy, HAS_SSSE3, __wcscpy_ssse3)
+             IFUNC_IMPL_ADD (array, i, wcscpy, HAS_CPU_FEATURE (SSSE3),
+                             __wcscpy_ssse3)
              IFUNC_IMPL_ADD (array, i, wcscpy, 1, __wcscpy_sse2))
 
   /* Support sysdeps/x86_64/multiarch/wmemcmp.S.  */
   IFUNC_IMPL (i, name, wmemcmp,
-             IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_SSE4_1,
+             IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSE4_1),
                              __wmemcmp_sse4_1)
-             IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, wmemcmp, HAS_CPU_FEATURE (SSSE3),
                              __wmemcmp_ssse3)
              IFUNC_IMPL_ADD (array, i, wmemcmp, 1, __wmemcmp_sse2))
 
 #ifdef SHARED
   /* Support sysdeps/x86_64/multiarch/memcpy_chk.S.  */
   IFUNC_IMPL (i, name, __memcpy_chk,
-             IFUNC_IMPL_ADD (array, i, __memcpy_chk, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, __memcpy_chk,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __memcpy_chk_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, __memcpy_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __memcpy_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __memcpy_chk_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, __memcpy_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __memcpy_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __memcpy_chk_ssse3)
              IFUNC_IMPL_ADD (array, i, __memcpy_chk, 1,
                              __memcpy_chk_sse2))
 
   /* Support sysdeps/x86_64/multiarch/memcpy.S.  */
   IFUNC_IMPL (i, name, memcpy,
-             IFUNC_IMPL_ADD (array, i, memcpy, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, memcpy,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __memcpy_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, memcpy, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3),
                              __memcpy_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, memcpy, HAS_SSSE3, __memcpy_ssse3)
+             IFUNC_IMPL_ADD (array, i, memcpy, HAS_CPU_FEATURE (SSSE3),
+                             __memcpy_ssse3)
              IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_sse2_unaligned)
              IFUNC_IMPL_ADD (array, i, memcpy, 1, __memcpy_sse2))
 
   /* Support sysdeps/x86_64/multiarch/mempcpy_chk.S.  */
   IFUNC_IMPL (i, name, __mempcpy_chk,
-             IFUNC_IMPL_ADD (array, i, __mempcpy_chk, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, __mempcpy_chk,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __mempcpy_chk_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, __mempcpy_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __mempcpy_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __mempcpy_chk_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, __mempcpy_chk, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, __mempcpy_chk,
+                             HAS_CPU_FEATURE (SSSE3),
                              __mempcpy_chk_ssse3)
              IFUNC_IMPL_ADD (array, i, __mempcpy_chk, 1,
                              __mempcpy_chk_sse2))
 
   /* Support sysdeps/x86_64/multiarch/mempcpy.S.  */
   IFUNC_IMPL (i, name, mempcpy,
-             IFUNC_IMPL_ADD (array, i, mempcpy, HAS_AVX,
+             IFUNC_IMPL_ADD (array, i, mempcpy,
+                             HAS_ARCH_FEATURE (AVX_Usable),
                              __mempcpy_avx_unaligned)
-             IFUNC_IMPL_ADD (array, i, mempcpy, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3),
                              __mempcpy_ssse3_back)
-             IFUNC_IMPL_ADD (array, i, mempcpy, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, mempcpy, HAS_CPU_FEATURE (SSSE3),
                              __mempcpy_ssse3)
              IFUNC_IMPL_ADD (array, i, mempcpy, 1, __mempcpy_sse2))
 
   /* Support sysdeps/x86_64/multiarch/strncmp.S.  */
   IFUNC_IMPL (i, name, strncmp,
-             IFUNC_IMPL_ADD (array, i, strncmp, HAS_SSE4_2,
+             IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSE4_2),
                              __strncmp_sse42)
-             IFUNC_IMPL_ADD (array, i, strncmp, HAS_SSSE3,
+             IFUNC_IMPL_ADD (array, i, strncmp, HAS_CPU_FEATURE (SSSE3),
                              __strncmp_ssse3)
              IFUNC_IMPL_ADD (array, i, strncmp, 1, __strncmp_sse2))
 #endif
index f8b46363d08e28e3664affd9d4ff82897fc78b15..871a0811a1c877ff2d7466762a4e049f92970e2f 100644 (file)
        .text
 ENTRY(memcmp)
        .type   memcmp, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-
-1:     testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       HAS_CPU_FEATURE (SSSE3)
        jnz     2f
        leaq    __memcmp_sse2(%rip), %rax
        ret
 
-2:     testl   $bit_SSE4_1, __cpu_features+CPUID_OFFSET+index_SSE4_1(%rip)
+2:     HAS_CPU_FEATURE (SSE4_1)
        jz      3f
        leaq    __memcmp_sse4_1(%rip), %rax
        ret
index 4e18cd30704bfe9312f53288d3d4439ef30ec54a..7e119d30e5633e293d2c2325004a067cec882b9e 100644 (file)
        .text
 ENTRY(__new_memcpy)
        .type   __new_memcpy, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __memcpy_avx_unaligned(%rip), %rax
-       testl   $bit_AVX_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_AVX_Fast_Unaligned_Load(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __memcpy_avx_unaligned(%rip), %rax
+       HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load)
        jz 1f
        ret
 1:     leaq    __memcpy_sse2(%rip), %rax
-       testl   $bit_Slow_BSF, __cpu_features+FEATURE_OFFSET+index_Slow_BSF(%rip)
+       HAS_ARCH_FEATURE (Slow_BSF)
        jnz     2f
        leaq    __memcpy_sse2_unaligned(%rip), %rax
        ret
-2:     testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+2:     HAS_CPU_FEATURE (SSSE3)
        jz 3f
        leaq    __memcpy_ssse3(%rip), %rax
 3:     ret
index 1e756ea0c23f684f46a928189401065efd8b76f8..81f83ddb7194ce0a981f59d224f9db41c83ca633 100644 (file)
        .text
 ENTRY(__memcpy_chk)
        .type   __memcpy_chk, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __memcpy_chk_sse2(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __memcpy_chk_sse2(%rip), %rax
+       HAS_CPU_FEATURE (SSSE3)
        jz      2f
        leaq    __memcpy_chk_ssse3(%rip), %rax
-       testl   $bit_Fast_Copy_Backward, __cpu_features+FEATURE_OFFSET+index_Fast_Copy_Backward(%rip)
+       HAS_ARCH_FEATURE (Fast_Copy_Backward)
        jz      2f
        leaq    __memcpy_chk_ssse3_back(%rip), %rax
-       testl   $bit_AVX_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_AVX_Fast_Unaligned_Load(%rip)
+       HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load)
        jz  2f
        leaq    __memcpy_chk_avx_unaligned(%rip), %rax
 2:     ret
index dd153a3eaa277060850c6f7ba3745d8b17a66c62..bbddbc16d684ddb5df93a0229c170f29c7cc6b12 100644 (file)
@@ -49,10 +49,10 @@ extern __typeof (__redirect_memmove) __memmove_avx_unaligned attribute_hidden;
    ifunc symbol properly.  */
 extern __typeof (__redirect_memmove) __libc_memmove;
 libc_ifunc (__libc_memmove,
-           HAS_AVX_FAST_UNALIGNED_LOAD
+           HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load)
            ? __memmove_avx_unaligned
-           : (HAS_SSSE3
-              ? (HAS_FAST_COPY_BACKWARD
+           : (HAS_CPU_FEATURE (SSSE3)
+              ? (HAS_ARCH_FEATURE (Fast_Copy_Backward)
                  ? __memmove_ssse3_back : __memmove_ssse3)
               : __memmove_sse2));
 
index 8b12d002dcbd7c60c8d89fc2c44bbf95ec28dd3e..5f70e3a95e900f8b05ba2d8bfa3e75a63aa6bcbe 100644 (file)
@@ -30,8 +30,8 @@ extern __typeof (__memmove_chk) __memmove_chk_avx_unaligned attribute_hidden;
 #include "debug/memmove_chk.c"
 
 libc_ifunc (__memmove_chk,
-           HAS_AVX_FAST_UNALIGNED_LOAD ? __memmove_chk_avx_unaligned :
-           (HAS_SSSE3
-           ? (HAS_FAST_COPY_BACKWARD
+           HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load) ? __memmove_chk_avx_unaligned :
+           (HAS_CPU_FEATURE (SSSE3)
+           ? (HAS_ARCH_FEATURE (Fast_Copy_Backward)
               ? __memmove_chk_ssse3_back : __memmove_chk_ssse3)
            : __memmove_chk_sse2));
index 2eaacdf0492d5167976f404ae55fc1c72c32c0a6..ad36840d547f18772795bbf85e85c18e3fd62b88 100644 (file)
 #if defined SHARED && IS_IN (libc)
 ENTRY(__mempcpy)
        .type   __mempcpy, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __mempcpy_sse2(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __mempcpy_sse2(%rip), %rax
+       HAS_CPU_FEATURE (SSSE3)
        jz      2f
        leaq    __mempcpy_ssse3(%rip), %rax
-       testl   $bit_Fast_Copy_Backward, __cpu_features+FEATURE_OFFSET+index_Fast_Copy_Backward(%rip)
+       HAS_ARCH_FEATURE (Fast_Copy_Backward)
        jz      2f
        leaq    __mempcpy_ssse3_back(%rip), %rax
-       testl   $bit_AVX_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_AVX_Fast_Unaligned_Load(%rip)
+       HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load)
        jz      2f
        leaq    __mempcpy_avx_unaligned(%rip), %rax
 2:     ret
index 17b84701b02454fef866425632a2514b17e63ddf..0a46b567ec6766c5d537d6ed0dba682f1fa01e0e 100644 (file)
        .text
 ENTRY(__mempcpy_chk)
        .type   __mempcpy_chk, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __mempcpy_chk_sse2(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __mempcpy_chk_sse2(%rip), %rax
+       HAS_CPU_FEATURE (SSSE3)
        jz      2f
        leaq    __mempcpy_chk_ssse3(%rip), %rax
-       testl   $bit_Fast_Copy_Backward, __cpu_features+FEATURE_OFFSET+index_Fast_Copy_Backward(%rip)
+       HAS_ARCH_FEATURE (Fast_Copy_Backward)
        jz      2f
        leaq    __mempcpy_chk_ssse3_back(%rip), %rax
-       testl   $bit_AVX_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_AVX_Fast_Unaligned_Load(%rip)
+       HAS_ARCH_FEATURE (AVX_Fast_Unaligned_Load)
        jz      2f
        leaq    __mempcpy_chk_avx_unaligned(%rip), %rax
 2:     ret
index c5f1fb340e6068d4c4d64b9fe66717c3c21adbc6..16fefa7073d0f5f9e0356a60a0227d28317e9be6 100644 (file)
 # if IS_IN (libc)
 ENTRY(memset)
        .type   memset, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __memset_sse2(%rip), %rax
-       testl   $bit_AVX2_Usable, __cpu_features+FEATURE_OFFSET+index_AVX2_Usable(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __memset_sse2(%rip), %rax
+       HAS_ARCH_FEATURE (AVX2_Usable)
        jz      2f
        leaq    __memset_avx2(%rip), %rax
 2:     ret
index 64fed3118a81350ee2f6636c874920c36b56878e..ef8c64f168449479bfc073f961ce19caca201815 100644 (file)
 # if defined SHARED && defined HAVE_AVX2_SUPPORT
 ENTRY(__memset_chk)
        .type   __memset_chk, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __memset_chk_sse2(%rip), %rax
-       testl   $bit_AVX2_Usable, __cpu_features+FEATURE_OFFSET+index_AVX2_Usable(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __memset_chk_sse2(%rip), %rax
+       HAS_ARCH_FEATURE (AVX2_Usable)
        jz      2f
        leaq    __memset_chk_avx2(%rip), %rax
 2:     ret
index 72ad7b01a837aab27ea49fc0d7e9fbf8cfeff04c..e9391a20fc99961d9e63ff4c9fcd78fb125314bb 100644 (file)
@@ -33,4 +33,4 @@
 #undef __sched_cpucount
 
 libc_ifunc (__sched_cpucount,
-           HAS_POPCOUNT ? popcount_cpucount : generic_cpucount);
+           HAS_CPU_FEATURE (POPCOUNT) ? popcount_cpucount : generic_cpucount);
index 44993fade5af29a6684139e71ad798560b739237..25d926c74f060fc5ab4ea46fd9a7b0f6e0105fd5 100644 (file)
        .text
 ENTRY(STRCAT)
        .type   STRCAT, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    STRCAT_SSE2_UNALIGNED(%rip), %rax
-       testl   $bit_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_Fast_Unaligned_Load(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    STRCAT_SSE2_UNALIGNED(%rip), %rax
+       HAS_ARCH_FEATURE (Fast_Unaligned_Load)
        jnz     2f
        leaq    STRCAT_SSE2(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       HAS_CPU_FEATURE (SSSE3)
        jz      2f
        leaq    STRCAT_SSSE3(%rip), %rax
 2:     ret
index af55fac398f533d02181bc6c0170c780a793db72..0c5fdd927ef59ca1ed91d8336c7f92b967a22f04 100644 (file)
        .text
 ENTRY(strchr)
        .type   strchr, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __strchr_sse2(%rip), %rax
-2:     testl   $bit_Slow_BSF, __cpu_features+FEATURE_OFFSET+index_Slow_BSF(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __strchr_sse2(%rip), %rax
+2:     HAS_ARCH_FEATURE (Slow_BSF)
        jz      3f
        leaq    __strchr_sse2_no_bsf(%rip), %rax
 3:     ret
index f50f26c393f2f3bbec9db7927947d7c9e48dff9f..c180ce6cf3e8ba79f452143587192713754e947a 100644 (file)
        .text
 ENTRY(STRCMP)
        .type   STRCMP, @gnu_indirect_function
-       /* Manually inlined call to __get_cpu_features.  */
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:
+       LOAD_RTLD_GLOBAL_RO_RDX
 #ifdef USE_AS_STRCMP
        leaq    __strcmp_sse2_unaligned(%rip), %rax
-       testl   $bit_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_Fast_Unaligned_Load(%rip)
+       HAS_ARCH_FEATURE (Fast_Unaligned_Load)
        jnz     3f
 #else
-       testl   $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip)
+       HAS_ARCH_FEATURE (Slow_SSE4_2)
        jnz     2f
        leaq    STRCMP_SSE42(%rip), %rax
-       testl   $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+       HAS_CPU_FEATURE (SSE4_2)
        jnz     3f
 #endif
 2:     leaq    STRCMP_SSSE3(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       HAS_CPU_FEATURE (SSSE3)
        jnz     3f
        leaq    STRCMP_SSE2(%rip), %rax
 3:     ret
@@ -110,23 +106,19 @@ END(STRCMP)
 # ifdef USE_AS_STRCASECMP_L
 ENTRY(__strcasecmp)
        .type   __strcasecmp, @gnu_indirect_function
-       /* Manually inlined call to __get_cpu_features.  */
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:
+       LOAD_RTLD_GLOBAL_RO_RDX
 #  ifdef HAVE_AVX_SUPPORT
        leaq    __strcasecmp_avx(%rip), %rax
-       testl   $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip)
+       HAS_ARCH_FEATURE (AVX_Usable)
        jnz     3f
 #  endif
-       testl   $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip)
+       HAS_ARCH_FEATURE (Slow_SSE4_2)
        jnz     2f
        leaq    __strcasecmp_sse42(%rip), %rax
-       testl   $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+       HAS_CPU_FEATURE (SSE4_2)
        jnz     3f
 2:     leaq    __strcasecmp_ssse3(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       HAS_CPU_FEATURE (SSSE3)
        jnz     3f
        leaq    __strcasecmp_sse2(%rip), %rax
 3:     ret
@@ -136,23 +128,19 @@ weak_alias (__strcasecmp, strcasecmp)
 # ifdef USE_AS_STRNCASECMP_L
 ENTRY(__strncasecmp)
        .type   __strncasecmp, @gnu_indirect_function
-       /* Manually inlined call to __get_cpu_features.  */
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:
+       LOAD_RTLD_GLOBAL_RO_RDX
 #  ifdef HAVE_AVX_SUPPORT
        leaq    __strncasecmp_avx(%rip), %rax
-       testl   $bit_AVX_Usable, __cpu_features+FEATURE_OFFSET+index_AVX_Usable(%rip)
+       HAS_ARCH_FEATURE (AVX_Usable)
        jnz     3f
 #  endif
-       testl   $bit_Slow_SSE4_2, __cpu_features+FEATURE_OFFSET+index_Slow_SSE4_2(%rip)
+       HAS_ARCH_FEATURE (Slow_SSE4_2)
        jnz     2f
        leaq    __strncasecmp_sse42(%rip), %rax
-       testl   $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+       HAS_CPU_FEATURE (SSE4_2)
        jnz     3f
 2:     leaq    __strncasecmp_ssse3(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       HAS_CPU_FEATURE (SSSE3)
        jnz     3f
        leaq    __strncasecmp_sse2(%rip), %rax
 3:     ret
index 9464ee8b63a55712acd4f81347c5d922d1908764..3aae8eed51ad200ab06b3fdb3d14fad635ea95d2 100644 (file)
        .text
 ENTRY(STRCPY)
        .type   STRCPY, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    STRCPY_SSE2_UNALIGNED(%rip), %rax
-       testl   $bit_Fast_Unaligned_Load, __cpu_features+FEATURE_OFFSET+index_Fast_Unaligned_Load(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    STRCPY_SSE2_UNALIGNED(%rip), %rax
+       HAS_ARCH_FEATURE (Fast_Unaligned_Load)
        jnz     2f
        leaq    STRCPY_SSE2(%rip), %rax
-       testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       HAS_CPU_FEATURE (SSSE3)
        jz      2f
        leaq    STRCPY_SSSE3(%rip), %rax
 2:     ret
index 95e882c443b19451c6f6185a8c2c9360bc8d028c..45c69b302cf75877039f4092f20e4aa96f72e885 100644 (file)
        .text
 ENTRY(STRCSPN)
        .type   STRCSPN, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    STRCSPN_SSE2(%rip), %rax
-       testl   $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    STRCSPN_SSE2(%rip), %rax
+       HAS_CPU_FEATURE (SSE4_2)
        jz      2f
        leaq    STRCSPN_SSE42(%rip), %rax
 2:     ret
index b734c1729aca579d95fbbd832943d759ab9b64bf..c4d3b277f082a246b47d62e01986b60fdf76e5b9 100644 (file)
        .text
 ENTRY(strspn)
        .type   strspn, @gnu_indirect_function
-       cmpl    $0, __cpu_features+KIND_OFFSET(%rip)
-       jne     1f
-       call    __init_cpu_features
-1:     leaq    __strspn_sse2(%rip), %rax
-       testl   $bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       leaq    __strspn_sse2(%rip), %rax
+       HAS_CPU_FEATURE (SSE4_2)
        jz      2f
        leaq    __strspn_sse42(%rip), %rax
 2:     ret
index 507994bd38566c0e04e6607f6b89f2a2b81a407e..b8827f04db81d6e99634858577a8971ce35bbc71 100644 (file)
@@ -41,7 +41,10 @@ extern __typeof (__redirect_strstr) __strstr_sse2 attribute_hidden;
 /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
    ifunc symbol properly.  */
 extern __typeof (__redirect_strstr) __libc_strstr;
-libc_ifunc (__libc_strstr, HAS_FAST_UNALIGNED_LOAD ? __strstr_sse2_unaligned : __strstr_sse2)
+libc_ifunc (__libc_strstr,
+           HAS_ARCH_FEATURE (Fast_Unaligned_Load)
+           ? __strstr_sse2_unaligned
+           : __strstr_sse2)
 
 #undef strstr
 strong_alias (__libc_strstr, strstr)
index 949d26e55029e509633c43ada581074a197dcf85..e89389476551c9bb859ced1e0833ea8d111c4559 100644 (file)
@@ -75,12 +75,18 @@ do_test (int argc, char **argv)
   int fails;
 
   get_cpuinfo ();
-  fails = check_proc ("avx", HAS_AVX, "HAS_AVX");
-  fails += check_proc ("fma4", HAS_FMA4, "HAS_FMA4");
-  fails += check_proc ("sse4_2", HAS_SSE4_2, "HAS_SSE4_2");
-  fails += check_proc ("sse4_1", HAS_SSE4_1, "HAS_SSE4_1");
-  fails += check_proc ("ssse3", HAS_SSSE3, "HAS_SSSE3");
-  fails += check_proc ("popcnt", HAS_POPCOUNT, "HAS_POPCOUNT");
+  fails = check_proc ("avx", HAS_ARCH_FEATURE (AVX_Usable),
+                     "HAS_ARCH_FEATURE (AVX_Usable)");
+  fails += check_proc ("fma4", HAS_ARCH_FEATURE (FMA4_Usable),
+                      "HAS_ARCH_FEATURE (FMA4_Usable)");
+  fails += check_proc ("sse4_2", HAS_CPU_FEATURE (SSE4_2),
+                      "HAS_CPU_FEATURE (SSE4_2)");
+  fails += check_proc ("sse4_1", HAS_CPU_FEATURE (SSE4_1)
+                      , "HAS_CPU_FEATURE (SSE4_1)");
+  fails += check_proc ("ssse3", HAS_CPU_FEATURE (SSSE3),
+                      "HAS_CPU_FEATURE (SSSE3)");
+  fails += check_proc ("popcnt", HAS_CPU_FEATURE (POPCOUNT),
+                      "HAS_CPU_FEATURE (POPCOUNT)");
 
   printf ("%d differences between /proc/cpuinfo and glibc code.\n", fails);
 
index ff2f5a73d19c3c5e33dfab05f48d8c77a9a9139f..c47c51c60d3017aa07a0629b3d232cdf915c3a13 100644 (file)
        .text
 ENTRY(wcscpy)
        .type   wcscpy, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-
-1:     testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       HAS_CPU_FEATURE (SSSE3)
        jnz     2f
        leaq    __wcscpy_sse2(%rip), %rax
        ret
index 109e2457fea079ace51908011cb11b22d10eac0a..62215f41239ee94b449e85787700325e382d40c9 100644 (file)
        .text
 ENTRY(wmemcmp)
        .type   wmemcmp, @gnu_indirect_function
-       cmpl    $0, KIND_OFFSET+__cpu_features(%rip)
-       jne     1f
-       call    __init_cpu_features
-
-1:     testl   $bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
+       LOAD_RTLD_GLOBAL_RO_RDX
+       HAS_CPU_FEATURE (SSSE3)
        jnz     2f
        leaq    __wmemcmp_sse2(%rip), %rax
        ret
 
-2:     testl   $bit_SSE4_1, __cpu_features+CPUID_OFFSET+index_SSE4_1(%rip)
+2:     HAS_CPU_FEATURE (SSE4_1)
        jz      3f
        leaq    __wmemcmp_sse4_1(%rip), %rax
        ret
This page took 0.149152 seconds and 5 git commands to generate.