diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/init-arch.c | 8 | ||||
-rw-r--r-- | sysdeps/x86_64/multiarch/strcpy.S | 13 |
3 files changed, 15 insertions, 11 deletions
@@ -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. diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c index 29e6873..35fd19a 100644 --- a/sysdeps/x86_64/multiarch/init-arch.c +++ b/sysdeps/x86_64/multiarch/init-arch.c @@ -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) diff --git a/sysdeps/x86_64/multiarch/strcpy.S b/sysdeps/x86_64/multiarch/strcpy.S index 25cd013..7e400a9 100644 --- a/sysdeps/x86_64/multiarch/strcpy.S +++ b/sysdeps/x86_64/multiarch/strcpy.S @@ -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 |