Perform test for Arom x86-64 in central place and handle it.

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.
This commit is contained in:
Ulrich Drepper 2009-07-23 13:15:17 -07:00
parent 666a9871f7
commit d28797e426
3 changed files with 15 additions and 11 deletions

View File

@ -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.

View 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)

View 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