mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
S390: Add z13 memmove ifunc variant.
This patch introduces a z13 specific ifunc variant for memmove. As the common code implementation, it checks if we can copy from the beginning to the end - with z196 memcpy implementation - or if we have to copy from the end to the beginning. The latter case is done by using vector load/store instructions. If vector instructions are not available, the common-code is used as fallback. Therefore it is implemented in memmove-c with a different name. Furthermore the ifunc logic decides if we need the common-code implementation at all. If vector instructions are supported due to the minimum architecture level set we can skip the common-code ifunc variant. ChangeLog: * sysdeps/s390/Makefile (sysdep_routines): Add memmove-c. * sysdeps/s390/ifunc-memcpy.h (HAVE_MEMMOVE_IFUNC, HAVE_MEMMOVE_IFUNC_AND_VX_SUPPORT, MEMMOVE_DEFAULT, HAVE_MEMMOVE_C, MEMMOVE_C, HAVE_MEMMOVE_Z13, MEMMOVE_Z13): New defines. * sysdeps/s390/memcpy-z900.S: Add z13 memmove implementation. * sysdeps/s390/memmove-c.c: New file. * sysdeps/s390/memmove.c: Likewise. * sysdeps/s390/multiarch/ifunc-impl-list.c (__libc_ifunc_impl_list): Add ifunc variants for memmove.
This commit is contained in:
@@ -126,6 +126,18 @@ __libc_ifunc_impl_list (const char *name, struct libc_ifunc_impl *array,
|
||||
)
|
||||
#endif /* HAVE_MEMCPY_IFUNC */
|
||||
|
||||
#if HAVE_MEMMOVE_IFUNC
|
||||
IFUNC_IMPL (i, name, memmove,
|
||||
# if HAVE_MEMMOVE_Z13
|
||||
IFUNC_IMPL_ADD (array, i, memmove,
|
||||
dl_hwcap & HWCAP_S390_VX, MEMMOVE_Z13)
|
||||
# endif
|
||||
# if HAVE_MEMMOVE_C
|
||||
IFUNC_IMPL_ADD (array, i, memmove, 1, MEMMOVE_C)
|
||||
# endif
|
||||
)
|
||||
#endif /* HAVE_MEMMOVE_IFUNC */
|
||||
|
||||
#ifdef HAVE_S390_VX_ASM_SUPPORT
|
||||
|
||||
# define IFUNC_VX_IMPL(FUNC) \
|
||||
|
Reference in New Issue
Block a user