Clean up x86 multiarch HAS_FOO macros.
authorRoland McGrath <roland@redhat.com>
Wed, 7 Oct 2009 02:59:03 +0000 (19:59 -0700)
committerRoland McGrath <roland@redhat.com>
Wed, 7 Oct 2009 02:59:03 +0000 (19:59 -0700)
ChangeLog
sysdeps/x86_64/multiarch/init-arch.c
sysdeps/x86_64/multiarch/init-arch.h

index 8083b80..ceba015 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-10-06  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/x86_64/multiarch/init-arch.h
+       [NOT_IN_libc] (__get_cpu_features): Define it as a macro.
+       (HAS_CPU_FEATURE): New macro.
+       (HAS_SSE2, HAS_POPCOUNT, HAS_SSE4_2, HAS_FMA): Use it.
+       * sysdeps/x86_64/multiarch/init-arch.c
+       (__get_cpu_features): #undef it before definition.
+
 2009-10-05  Andreas Schwab  <schwab@redhat.com>
 
        * locale/C-time.c: Revert week-1stday back to 19971130 and set
index 9a1e776..7823ace 100644 (file)
@@ -77,6 +77,7 @@ __init_cpu_features (void)
     __cpu_features.kind = arch_kind_other;
 }
 
+#undef __get_cpu_features
 
 const struct cpu_features *
 __get_cpu_features (void)
index 8d9b1e8..9b12831 100644 (file)
@@ -58,30 +58,16 @@ extern void __init_cpu_features (void) attribute_hidden;
 extern const struct cpu_features *__get_cpu_features (void)
      __attribute__ ((const));
 
-/* Following are the feature tests used throughout libc.  */
-
 #ifndef NOT_IN_libc
-# define HAS_SSE2 \
-  ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].edx & (1 << 26)) != 0)
-
-# define HAS_POPCOUNT \
-  ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 23)) != 0)
-
-# define HAS_SSE4_2 \
-  ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 20)) != 0)
-
-# define HAS_FMA \
-  ((__cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 12)) != 0)
-#else
-# define HAS_SSE2 \
-  ((__get_cpu_features ()->cpuid[COMMON_CPUID_INDEX_1].edx & (1 << 26)) != 0)
+# define __get_cpu_features()  (&__cpu_features)
+#endif
 
-# define HAS_POPCOUNT \
-  ((__get_cpu_features ()->cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 23)) != 0)
+#define HAS_CPU_FEATURE(idx, reg, bit) \
+  ((__get_cpu_features ()->cpuid[idx].reg & (1 << (bit))) != 0)
 
-# define HAS_SSE4_2 \
-  ((__get_cpu_features ()->cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 20)) != 0)
+/* Following are the feature tests used throughout libc.  */
 
-# define HAS_FMA \
-  ((__get_cpu_features ()->cpuid[COMMON_CPUID_INDEX_1].ecx & (1 << 12)) != 0)
-#endif
+#define HAS_SSE2       HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, edx, 26)
+#define HAS_POPCOUNT   HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 23)
+#define HAS_SSE4_2     HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 20)
+#define HAS_FMA                HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 12)