about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/Makefile
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-08-28 05:40:35 -0700
committerH.J. Lu <hjl.tools@gmail.com>2015-08-28 06:02:43 -0700
commite05a252da92a4dd15d4be40a855d31bd864804e9 (patch)
treeb3e4d102227a8c910ef87b02634a1f497caf2a51 /sysdeps/x86_64/multiarch/Makefile
parent8c17cb1f6455c7a5fd6a1d05a2394129dbce012b (diff)
downloadglibc-e05a252da92a4dd15d4be40a855d31bd864804e9.tar.gz
glibc-e05a252da92a4dd15d4be40a855d31bd864804e9.tar.xz
glibc-e05a252da92a4dd15d4be40a855d31bd864804e9.zip
Correct x86-64 memcpy/mempcpy multiarch selector
For x86-64 memcpy/mempcpy, we choose the best implementation by the
order:

1. __memcpy_avx_unaligned if AVX_Fast_Unaligned_Load bit is set.
2. __memcpy_sse2_unaligned if Fast_Unaligned_Load bit is set.
3. __memcpy_sse2 if SSSE3 isn't available.
4. __memcpy_ssse3_back if Fast_Copy_Backward bit it set.
5. __memcpy_ssse3

In libc.a and ld.so, we choose __memcpy_sse2_unaligned which is optimized
for current Intel and AMD x86-64 processors.

	[BZ #18880]
	* sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: Moved to ...
	* sysdeps/x86_64/memcpy.S: Here.  Remove "#if !IS_IN (libc)".
	Add libc_hidden_builtin_def and versioned_symbol.
	(__memcpy_chk): New.
	(__memcpy_sse2_unaligned): Renamed to ...
	(memcpy): This.  Support USE_AS_MEMPCPY.
	* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
	mempcpy-sse2.
	* sysdeps/x86_64/memcpy.S: Moved to ...
	sysdeps/x86_64/multiarch/memcpy-sse2.S: Here.
	(__memcpy_chk): Renamed to ...
	(__memcpy_chk_sse2): This.
	(memcpy): Renamed to ...
	(__memcpy_sse2): This.
	* sysdeps/x86_64/multiarch/memcpy.S (__new_memcpy): Properly
	select the best implementation.
	(ENTRY): Replace __memcpy_sse2 with __memcpy_sse2_unaligned.
	(END): Likewise.
	(libc_hidden_builtin_def): Likewise.
	(ENTRY_CHK): Replace __memcpy_chk_sse2 with
	__memcpy_chk_sse2_unaligned.
	(END_CHK): Likewise.
	* sysdeps/x86_64/multiarch/memcpy_chk.S (__memcpy_chk): Properly
	select the best implementation.
	* sysdeps/x86_64/multiarch/mempcpy.S (__mempcpy): Properly
	select the best implementation.
	(ENTRY): Replace __mempcpy_sse2 with __mempcpy_sse2_unaligned.
	(END): Likewise.
	(libc_hidden_def): Likewise.
	(libc_hidden_builtin_def): Likewise.
	(ENTRY_CHK): Replace __mempcpy_chk_sse2 with
	__mempcpy_chk_sse2_unaligned.
	(END_CHK): Likewise.
	* sysdeps/x86_64/multiarch/mempcpy_chk.S (__mempcpy_chk): Properly
	select the best implementation.
Diffstat (limited to 'sysdeps/x86_64/multiarch/Makefile')
-rw-r--r--sysdeps/x86_64/multiarch/Makefile2
1 files changed, 1 insertions, 1 deletions
diff --git a/sysdeps/x86_64/multiarch/Makefile b/sysdeps/x86_64/multiarch/Makefile
index d10b4d4fb3..917e1a0c79 100644
--- a/sysdeps/x86_64/multiarch/Makefile
+++ b/sysdeps/x86_64/multiarch/Makefile
@@ -8,7 +8,7 @@ ifeq ($(subdir),string)
 sysdep_routines += strncat-c stpncpy-c strncpy-c strcmp-ssse3 \
 		   strcmp-sse2-unaligned strncmp-ssse3 \
 		   memcmp-sse4 memcpy-ssse3 \
-		   memcpy-sse2-unaligned mempcpy-ssse3 \
+		   memcpy-sse2 mempcpy-sse2 mempcpy-ssse3 \
 		   memmove-ssse3 memcpy-ssse3-back mempcpy-ssse3-back \
 		   memmove-avx-unaligned memcpy-avx-unaligned mempcpy-avx-unaligned \
 		   memmove-ssse3-back strcasecmp_l-ssse3 \