|
|
| 19 |
02111-1307 USA. */ |
19 |
02111-1307 USA. */ |
| 20 |
|
20 |
|
| 21 |
#include <sysdep.h> |
21 |
#include <sysdep.h> |
|
|
22 |
#include <shlib-compat.h> |
| 22 |
#include <init-arch.h> |
23 |
#include <init-arch.h> |
| 23 |
|
24 |
|
| 24 |
/* Define multiple versions only for the definition in lib and for |
25 |
/* Define multiple versions only for the definition in lib and for |
|
|
| 26 |
happened. */ |
27 |
happened. */ |
| 27 |
#if defined SHARED && !defined NOT_IN_libc |
28 |
#if defined SHARED && !defined NOT_IN_libc |
| 28 |
.text |
29 |
.text |
| 29 |
ENTRY(memcpy) |
30 |
ENTRY(__new_memcpy) |
| 30 |
.type memcpy, @gnu_indirect_function |
31 |
.type __new_memcpy, @gnu_indirect_function |
| 31 |
cmpl $0, KIND_OFFSET+__cpu_features(%rip) |
32 |
cmpl $0, KIND_OFFSET+__cpu_features(%rip) |
| 32 |
jne 1f |
33 |
jne 1f |
| 33 |
call __init_cpu_features |
34 |
call __init_cpu_features |
|
|
| 39 |
jz 2f |
40 |
jz 2f |
| 40 |
leaq __memcpy_ssse3_back(%rip), %rax |
41 |
leaq __memcpy_ssse3_back(%rip), %rax |
| 41 |
2: ret |
42 |
2: ret |
| 42 |
END(memcpy) |
43 |
END(__new_memcpy) |
| 43 |
|
44 |
|
| 44 |
# undef ENTRY |
45 |
# undef ENTRY |
| 45 |
# define ENTRY(name) \ |
46 |
# define ENTRY(name) \ |
|
|
| 68 |
by the indirect call in the PLT. */ |
69 |
by the indirect call in the PLT. */ |
| 69 |
# define libc_hidden_builtin_def(name) \ |
70 |
# define libc_hidden_builtin_def(name) \ |
| 70 |
.globl __GI_memcpy; __GI_memcpy = __memcpy_sse2 |
71 |
.globl __GI_memcpy; __GI_memcpy = __memcpy_sse2 |
|
|
72 |
|
| 73 |
versioned_symbol (libc, __new_memcpy, memcpy, GLIBC_2_13); |
| 71 |
#endif |
74 |
#endif |
| 72 |
|
75 |
|
| 73 |
#include "../memcpy.S" |
76 |
#include "../memcpy.S" |