]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Perform test for Arom x86-64 in central place and handle it.
authorUlrich Drepper <drepper@redhat.com>
Thu, 23 Jul 2009 20:15:17 +0000 (13:15 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 23 Jul 2009 20:15:17 +0000 (13:15 -0700)
There will be more than one function which, in multiarch mode, wants
to use SSSE3.  We should not test in each of them for Atoms with
slow SSSE3.  Instead, disable the SSSE3 bit in the startup code for
such machines.

ChangeLog
sysdeps/x86_64/multiarch/init-arch.c
sysdeps/x86_64/multiarch/strcpy.S

index 7bc9fc348f02472d3606e24c6c90a96b289e23cc..1498e4a3c09700eedc94f7b90058ed34a3e6c6dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-07-23  Ulrich Drepper  <drepper@redhat.com>
 
+       * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Reset
+       SSSE3 bit for Atoms.
+       * sysdeps/x86_64/multiarch/strcpy.S: New need to perform Atom test
+       here anymore.
+
        * posix/tst-rfc3484.c (do_test): Initialize entire sockaddr_in
        structure before copying it to avoid warning.
        * posix/tst-rfc3484-2.c (do_test): Likewise.
index 29e687344dd9cd2760afaa960601ad723b143218..35fd19af0ebe3b5cbac92bfb26a74f180169fe1f 100644 (file)
@@ -68,7 +68,13 @@ __init_cpu_features (void)
          __cpu_features.model += extended_model;
        }
       else if (__cpu_features.family == 0x06)
-       __cpu_features.model += extended_model;
+       {
+         __cpu_features.model += extended_model;
+
+         if (__cpu_features.model == 0x1c)
+           /* Avoid SSSE3 on Atom since it is slow.  */
+           __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx &= ~(1 << 9);
+       }
     }
   /* This spells out "AuthenticAMD".  */
   else if (ebx == 0x68747541 && ecx == 0x444d4163 && edx == 0x69746e65)
index 25cd01307dfdbcb78b3447bfb3b45285ab0d982e..7e400a91409cbc671d309b3193ecc71dd1c37cbf 100644 (file)
@@ -64,16 +64,9 @@ ENTRY(STRCPY)
        call    __init_cpu_features
 1:     leaq    STRCPY_SSE2(%rip), %rax
        testl   $(1<<9), __cpu_features+CPUID_OFFSET+COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET(%rip)
-       jz      3f
-/* Avoid SSSE3 strcpy on Atom since it is slow.  */
-       cmpl    $1, __cpu_features+KIND_OFFSET(%rip)
-       jne     2f
-       cmpl    $6, __cpu_features+FAMILY_OFFSET(%rip)
-       jne     2f
-       cmpl    $28, __cpu_features+MODEL_OFFSET(%rip)
-       jz      3f
-2:     leaq    STRCPY_SSSE3(%rip), %rax
-3:     ret
+       jz      2f
+       leaq    STRCPY_SSSE3(%rip), %rax
+2:     ret
 END(STRCPY)
 
        .section .text.ssse3,"ax",@progbits