Commit Graph

78 Commits

Author SHA1 Message Date
Stefan Liebler
0966dd8689 S390: Refactor wcsncpy ifunc handling.
The ifunc handling for wcsncpy is adjusted in order to omit ifunc
if the minimum architecture level already supports newer CPUs by default.
Unfortunately the c ifunc variant can't be omitted at all as it is used
by the z13 ifunc variant as fallback if the pointers are not 4-byte aligned.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove wcsncpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add wcsncpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for wcsncpy.
	* sysdeps/s390/multiarch/wcsncpy-c.c: Move to ...
	* sysdeps/s390/wcsncpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcsncpy-vx.S: Move to ...
	* sysdeps/s390/wcsncpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcsncpy.c: Move to ...
	* sysdeps/s390/wcsncpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-wcsncpy.h: New file.
2018-12-18 13:57:19 +01:00
Stefan Liebler
0582e42845 S390: Refactor wcpcpy ifunc handling.
The ifunc handling for wcpcpy is adjusted in order to omit ifunc
if the minimum architecture level already supports newer CPUs by default.
Unfortunately the c ifunc variant can't be omitted at all as it is used
by the z13 ifunc variant as fallback if the pointers are not 4-byte aligned.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove wcpcpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add wcpcpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for wcpcpy.
	* sysdeps/s390/multiarch/wcpcpy-c.c: Move to ...
	* sysdeps/s390/wcpcpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcpcpy-vx.S: Move to ...
	* sysdeps/s390/wcpcpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcpcpy.c: Move to ...
	* sysdeps/s390/wcpcpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-wcpcpy.h: New file.
2018-12-18 13:57:19 +01:00
Stefan Liebler
804f2e5c73 S390: Refactor wcscpy ifunc handling.
The ifunc handling for wcscpy is adjusted in order to omit ifunc
if the minimum architecture level already supports newer CPUs by default.
Unfortunately the c ifunc variant can't be omitted at all as it is used
by the z13 ifunc variant as fallback if the pointers are not 4-byte aligned.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove wcscpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add wcscpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for wcscpy.
	* sysdeps/s390/multiarch/wcscpy-c.c: Move to ...
	* sysdeps/s390/wcscpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcscpy-vx.S: Move to ...
	* sysdeps/s390/wcscpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcscpy.c: Move to ...
	* sysdeps/s390/wcscpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-wcscpy.h: New file.
2018-12-18 13:57:18 +01:00
Stefan Liebler
c7e7cd266e S390: Refactor wcsnlen ifunc handling.
The ifunc handling for wcsnlen is adjusted in order to omit ifunc
if the minimum architecture level already supports newer CPUs by default.
Unfortunately the c ifunc variant can't be omitted at all as it is used
by the z13 ifunc variant as fallback if the pointers are not 4-byte aligned.
Glibc internal calls will use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove wcsnlen variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add wcsnlen variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for wcsnlen.
	* sysdeps/s390/multiarch/wcsnlen-c.c: Move to ...
	* sysdeps/s390/wcsnlen-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcsnlen-vx.S: Move to ...
	* sysdeps/s390/wcsnlen-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcsnlen.c: Move to ...
	* sysdeps/s390/wcsnlen.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-wcsnlen.h: New file.
2018-12-18 13:57:18 +01:00
Stefan Liebler
2e02d0b7a9 S390: Refactor wcslen ifunc handling.
The ifunc handling for wcslen is adjusted in order to omit ifunc
if the minimum architecture level already supports newer CPUs by default.
Unfortunately the c ifunc variant can't be omitted at all as it is used
by the z13 ifunc variant as fallback if the pointers are not 4-byte aligned.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove wcslen variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add wcslen variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for wcslen.
	* sysdeps/s390/multiarch/wcslen-c.c: Move to ...
	* sysdeps/s390/wcslen-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcslen-vx.S: Move to ...
	* sysdeps/s390/wcslen-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/wcslen.c: Move to ...
	* sysdeps/s390/wcslen.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-wcslen.h: New file.
2018-12-18 13:57:17 +01:00
Stefan Liebler
89bfcbdf9d S390: Refactor memrchr ifunc handling.
The ifunc handling for memrchr is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove memrchr variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add memrchr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for memrchr.
	* sysdeps/s390/multiarch/memrchr-c.c: Move to ...
	* sysdeps/s390/memrchr-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/memrchr-vx.S: Move to ...
	* sysdeps/s390/memrchr-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/memrchr.c: Move to ...
	* sysdeps/s390/memrchr.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-memrchr.h: New file.
2018-12-18 13:57:17 +01:00
Stefan Liebler
196655ba54 S390: Refactor memccpy ifunc handling.
The ifunc handling for memccpy is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove memccpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add memccpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for memccpy.
	* sysdeps/s390/multiarch/memccpy-c.c: Move to ...
	* sysdeps/s390/memccpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/memccpy-vx.S: Move to ...
	* sysdeps/s390/memccpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/memccpy.c: Move to ...
	* sysdeps/s390/memccpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-memccpy.h: New file.
2018-12-18 13:57:16 +01:00
Stefan Liebler
4c7b3cec11 S390: Refactor rawmemchr ifunc handling.
The ifunc handling for rawmemchr is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove rawmemchr variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add rawmemchr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for rawmemchr.
	* sysdeps/s390/multiarch/rawmemchr-c.c: Move to ...
	* sysdeps/s390/rawmemchr-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/rawmemchr-vx.S: Move to ...
	* sysdeps/s390/rawmemchr-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/rawmemchr.c: Move to ...
	* sysdeps/s390/rawmemchr.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-rawmemchr.h: New file.
2018-12-18 13:57:16 +01:00
Stefan Liebler
581a051c2e S390: Refactor memchr ifunc handling.
The ifunc handling for memchr is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

Note: The fallback s390-32/s390-64 ifunc variants with srst instruction
are now moved to the unified memchr-z900.S file which can be used for
31/64bit. The s390-32/s390-64 files multiarch/memchr.c and memchr.S
are deleted.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove memchr variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add memchr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for memchr.
	* sysdeps/s390/multiarch/memchr-vx.S: Move to ...
	* sysdeps/s390/memchr-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/memchr.c: Move to ...
	* sysdeps/s390/memchr.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-memchr.h: New file.
	* sysdeps/s390/s390-64/memchr.S: Move to ...
	* sysdeps/s390/memchr-z900.S: ... here and adjust to be usable
	for 31/64bit and ifunc handling.
	* sysdeps/s390/s390-32/multiarch/memchr.c: Delete file.
	* sysdeps/s390/s390-64/multiarch/memchr.c: Likewise.
	* sysdeps/s390/s390-32/memchr.S: Likewise.
2018-12-18 13:57:16 +01:00
Stefan Liebler
5d2ec20a99 S390: Refactor strcspn ifunc handling.
The ifunc handling for strcspn is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strcspn variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strcspn variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strcspn.
	* sysdeps/s390/multiarch/strcspn-c.c: Move to ...
	* sysdeps/s390/strcspn-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcspn-vx.S: Move to ...
	* sysdeps/s390/strcspn-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcspn.c: Move to ...
	* sysdeps/s390/strcspn.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strcspn.h: New file.
2018-12-18 13:57:15 +01:00
Stefan Liebler
572cca93fa S390: Refactor strpbrk ifunc handling.
The ifunc handling for strpbrk is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strpbrk variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strpbrk variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strpbrk.
	* sysdeps/s390/multiarch/strpbrk-c.c: Move to ...
	* sysdeps/s390/strpbrk-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strpbrk-vx.S: Move to ...
	* sysdeps/s390/strpbrk-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strpbrk.c: Move to ...
	* sysdeps/s390/strpbrk.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strpbrk.h: New file.
2018-12-18 13:57:15 +01:00
Stefan Liebler
483fc56978 S390: Refactor strspn ifunc handling.
The ifunc handling for strspn is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strspn variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strspn variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strspn.
	* sysdeps/s390/multiarch/strspn-c.c: Move to ...
	* sysdeps/s390/strspn-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strspn-vx.S: Move to ...
	* sysdeps/s390/strspn-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strspn.c: Move to ...
	* sysdeps/s390/strspn.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strspn.h: New file.
2018-12-18 13:57:15 +01:00
Stefan Liebler
26ea876087 S390: Refactor strrchr ifunc handling.
The ifunc handling for strrchr is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strrchr variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strrchr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strrchr.
	* sysdeps/s390/multiarch/strrchr-c.c: Move to ...
	* sysdeps/s390/strrchr-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strrchr-vx.S: Move to ...
	* sysdeps/s390/strrchr-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strrchr.c: Move to ...
	* sysdeps/s390/strrchr.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strrchr.h: New file.
2018-12-18 13:57:14 +01:00
Stefan Liebler
a1361e6561 S390: Refactor strchrnul ifunc handling.
The ifunc handling for strchrnul is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strchrnul variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strchrnul variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strchrnul.
	* sysdeps/s390/multiarch/strchrnul-c.c: Move to ...
	* sysdeps/s390/strchrnul-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strchrnul-vx.S: Move to ...
	* sysdeps/s390/strchrnul-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strchrnul.c: Move to ...
	* sysdeps/s390/strchrnul.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strchrnul.h: New file.
2018-12-18 13:57:14 +01:00
Stefan Liebler
32f12653d4 S390: Refactor strchr ifunc handling.
The ifunc handling for strchr is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strchr variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strchr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strchr.
	* sysdeps/s390/multiarch/strchr-c.c: Move to ...
	* sysdeps/s390/strchr-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strchr-vx.S: Move to ...
	* sysdeps/s390/strchr-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strchr.c: Move to ...
	* sysdeps/s390/strchr.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strchr.h: New file.
2018-12-18 13:57:14 +01:00
Stefan Liebler
316b884219 S390: Refactor strncmp ifunc handling.
The ifunc handling for strncmp is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strncmp variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strncmp variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strncmp.
	* sysdeps/s390/multiarch/strncmp-c.c: Move to ...
	* sysdeps/s390/strncmp-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strncmp-vx.S: Move to ...
	* sysdeps/s390/strncmp-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strncmp.c: Move to ...
	* sysdeps/s390/strncmp.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strncmp.h: New file.
2018-12-18 13:57:13 +01:00
Stefan Liebler
cdab85fe33 S390: Refactor strcmp ifunc handling.
The ifunc handling for strcmp is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

Note: The fallback s390-32/s390-64 ifunc variants with clst instruction
are now moved to the unified strcmp-z900.S file which can be used for
31/64bit. The s390-32/s390-64 files multiarch/strcmp.c and strcmp.S
are deleted.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strcmp variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strcmp variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strcmp.
	* sysdeps/s390/multiarch/strcmp-vx.S: Move to ...
	* sysdeps/s390/strcmp-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcmp.c: Move to ...
	* sysdeps/s390/strcmp.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strcmp.h: New file.
	* sysdeps/s390/s390-64/strcmp.S: Move to ...
	* sysdeps/s390/strcmp-z900.S: ... here and adjust to be usable
	for 31/64bit and ifunc handling.
	* sysdeps/s390/s390-32/multiarch/strcmp.c: Delete file.
	* sysdeps/s390/s390-64/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/s390-32/strcmp.S: Likewise.
2018-12-18 13:57:13 +01:00
Stefan Liebler
b935335155 S390: Refactor strncat ifunc handling.
The ifunc handling for strncat is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strncat variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strncat variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strncat.
	* sysdeps/s390/multiarch/strncat-c.c: Move to ...
	* sysdeps/s390/strncat-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strncat-vx.S: Move to ...
	* sysdeps/s390/strncat-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strncat.c: Move to ...
	* sysdeps/s390/strncat.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strncat.h: New file.
2018-12-18 13:57:12 +01:00
Stefan Liebler
8e5a0afbbf S390: Refactor strcat ifunc handling.
The ifunc handling for strcat is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strcat variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strcat variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strcat.
	* sysdeps/s390/multiarch/strcat-c.c: Move to ...
	* sysdeps/s390/strcat-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcat-vx.S: Move to ...
	* sysdeps/s390/strcat-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcat.c: Move to ...
	* sysdeps/s390/strcat.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strcat.h: New file.
2018-12-18 13:57:12 +01:00
Stefan Liebler
25218822bd S390: Refactor stpncpy ifunc handling.
The ifunc handling for stpncpy is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove stpncpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add stpncpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for stpncpy.
	* sysdeps/s390/multiarch/stpncpy-c.c: Move to ...
	* sysdeps/s390/stpncpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/stpncpy-vx.S: Move to ...
	* sysdeps/s390/stpncpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/stpncpy.c: Move to ...
	* sysdeps/s390/stpncpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-stpncpy.h: New file.
2018-12-18 13:57:11 +01:00
Stefan Liebler
d1bdbf3809 S390: Refactor strncpy ifunc handling.
The ifunc handling for strncpy is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

Note: The fallback s390-32/s390-64 ifunc variants are now moved to
the strncpy-z900.S files. The s390-32/s390-64 files multiarch/strncpy.c
and strncpy.S are deleted.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strncpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strncpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strncpy.
	* sysdeps/s390/multiarch/strncpy-vx.S: Move to ...
	* sysdeps/s390/strncpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strncpy.c: Move to ...
	* sysdeps/s390/strncpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strncpy.h: New file.
	* sysdeps/s390/s390-64/strncpy.S: Move to ...
	* sysdeps/s390/s390-64/strncpy-z900.S: ... here
	and adjust ifunc handling.
	* sysdeps/s390/s390-32/strncpy.S: Move to ...
	* sysdeps/s390/s390-32/strncpy-z900.S: ... here
	and adjust ifunc handling.
	* sysdeps/s390/s390-32/multiarch/strncpy.c: Delete file.
	* sysdeps/s390/s390-64/multiarch/strncpy.c: Likewise.
2018-12-18 13:57:11 +01:00
Stefan Liebler
970449311d S390: Refactor stpcpy ifunc handling.
The ifunc handling for stpcpy is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove stpcpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add stpcpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for stpcpy.
	* sysdeps/s390/multiarch/stpcpy-c.c: Move to ...
	* sysdeps/s390/stpcpy-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/stpcpy-vx.S: Move to ...
	* sysdeps/s390/stpcpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/stpcpy.c: Move to ...
	* sysdeps/s390/stpcpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-stpcpy.h: New file.
2018-12-18 13:57:11 +01:00
Stefan Liebler
914a4e0557 S390: Refactor strcpy ifunc handling.
The ifunc handling for strcpy is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

Note: The fallback s390-32/s390-64 ifunc variants with mvst instruction
are now moved to the unified strcpy-z900.S file which can be used for
31/64bit. The s390-32/s390-64 files multiarch/strcpy.c and strcpy.S
are deleted.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strcpy variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strcpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strcpy.
	* sysdeps/s390/multiarch/strcpy-vx.S: Move to ...
	* sysdeps/s390/strcpy-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strcpy.c: Move to ...
	* sysdeps/s390/strcpy.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strcpy.h: New file.
	* sysdeps/s390/s390-64/strcpy.S: Move to ...
	* sysdeps/s390/strcpy-z900.S: ... here and adjust to be usable
	for 31/64bit and ifunc handling.
	* sysdeps/s390/s390-32/multiarch/strcpy.c: Delete file.
	* sysdeps/s390/s390-64/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/s390-32/strcpy.S: Likewise.
2018-12-18 13:57:10 +01:00
Stefan Liebler
de10e44dda S390: Refactor strnlen ifunc handling.
The ifunc handling for strnlen is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strnlen variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strnlen variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strnlen.
	* sysdeps/s390/multiarch/strnlen-c.c: Move to ...
	* sysdeps/s390/strnlen-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strnlen-vx.S: Move to ...
	* sysdeps/s390/strnlen-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strnlen.c: Move to ...
	* sysdeps/s390/strnlen.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strnlen.h: New file.
2018-12-18 13:57:10 +01:00
Stefan Liebler
ff3ca3743a S390: Refactor strlen ifunc handling.
The ifunc handling for strlen is adjusted in order to omit ifunc
variants if those will never be used as the minimum architecture level
already supports newer CPUs by default.
Glibc internal calls will then also use the "newer" ifunc variant.

ChangeLog:

	* sysdeps/s390/multiarch/Makefile
	(sysdep_routines): Remove strlen variants.
	* sysdeps/s390/Makefile (sysdep_routines): Add strlen variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Refactor ifunc handling for strlen.
	* sysdeps/s390/multiarch/strlen-c.c: Move to ...
	* sysdeps/s390/strlen-c.c: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strlen-vx.S: Move to ...
	* sysdeps/s390/strlen-vx.S: ... here and adjust ifunc handling.
	* sysdeps/s390/multiarch/strlen.c: Move to ...
	* sysdeps/s390/strlen.c: ... here and adjust ifunc handling.
	* sysdeps/s390/ifunc-strlen.h: New file.
2018-12-18 13:57:10 +01:00
Stefan Liebler
d2c4c403fe S390: Add z13 memmem ifunc variant.
The new vector variant of memmem is using the common code
implementation, but instead of calling the default
mem* functions, the vector variants are called.

ChangeLog:

	* sysdeps/s390/Makefile (sysdep_routines): Add memmem variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc variants for memmem.
	* sysdeps/s390/ifunc-memmem.h: New file.
	* sysdeps/s390/memmem.c: Likewise.
	* sysdeps/s390/memmem-c.c: Likewise.
	* sysdeps/s390/memmem-vx.c: Likewise.
2018-12-18 13:57:09 +01:00
Stefan Liebler
8c25dddd2e S390: Add z13 strstr ifunc variant.
The new vector variant of strstr is using the common code
implementation, but instead of calling the default
str* / mem* functions, the vector variants are called.

ChangeLog:

	* sysdeps/s390/Makefile (sysdep_routines): Add strstr variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add ifunc variants for strstr.
	* sysdeps/s390/ifunc-strstr.h: New file.
	* sysdeps/s390/strstr.c: Likewise.
	* sysdeps/s390/strstr-c.c: Likewise.
	* sysdeps/s390/strstr-vx.c: Likewise.
2018-12-18 13:57:09 +01:00
Stefan Liebler
cdd927d98c 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.
2018-12-18 13:57:08 +01:00
Stefan Liebler
18eb862d45 S390: Refactor memcpy/mempcpy ifunc handling.
This patch moves all ifunc variants for memcpy/mempcpy
to sysdeps/s390/memcpy-z900.S. The configure-check/preprocessor logic
in sysdeps/s390/ifunc-memcpy.h decides if ifunc is needed at all
and which ifunc variants should be available.
E.g. if the compiler/assembler already supports z196 by default,
the older ifunc variants are not included.
If we only need the newest ifunc variant,
then we can skip ifunc at all.

Therefore the ifunc-resolvers and __libc_ifunc_impl_list are adjusted
in order to handle only the available ifunc variants.

ChangeLog:

	* sysdeps/s390/ifunc-memcpy.h: New File.
	* sysdeps/s390/memcpy.S: Move to ...
	* sysdeps/s390/memcpy-z900.S ... here.
	Move implementations from memcpy-s390x.s to here.
	* sysdeps/s390/multiarch/memcpy-s390x.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines):
	Remove memcpy/mempcpy variants.
	* sysdeps/s390/Makefile (sysdep_routines):
	Add memcpy/mempcpy variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Adjust ifunc variants for
	memcpy and mempcpy.
	* sysdeps/s390/multiarch/memcpy.c: Move ifunc resolver
	to ...
	* sysdeps/s390/memcpy.c: ... here.
	Adjust ifunc variants for memcpy.
	* sysdeps/s390/multiarch/mempcpy.c: Move to ...
	* sysdeps/s390/mempcpy.c: ... here.
	Adjust ifunc variants for mempcpy.
	* sysdeps/s390/mempcpy.S: Delete file.
2018-12-18 13:57:06 +01:00
Stefan Liebler
df3eb8de31 S390: Unify 31/64bit memcpy.
The implementation of memcpy/mempcpy for s390-32 (31bit)
and s390-64 (64bit) is nearly the same.
This patch unifies it for maintability reasons.

__mem[p]cpy_z10 and __mem[p]cpy_z196 differs between 31 and 64bit:
-31bit needs .machinemode "zarch_nohighgprs" and llgfr   %r4,%r4
-lr vs lgr; lgr can be also used on 31bit as this ifunc variant
is only called if we are on a zarch machine.

__mem[p]cpy_default differs between 31 and 64bit:
-Some 31bit vs 64bit instructions (e.g. ltr vs ltgr.
Solved with 31/64 specific instruction macros).
-The address of mvc instruction is setup in different ways
(larl vs bras). Solved with #if defined __s390x__.

__memcpy_mvcle differs between 31 and 64bit:
-lr vs lgr; ahi vs aghi;
Solved with 31/64bit specific instruction macros.

Otherwise 31/64bit implementation has the same structure of the code.

ChangeLog:

	* sysdeps/s390/s390-64/memcpy.S: Move to ...
	* sysdeps/s390/memcpy.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/memcpy.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add memcpy.
	* sysdeps/s390/s390-32/multiarch/Makefile: Delete file.
	* sysdeps/s390/s390-64/multiarch/Makefile: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcpy-s390x.S: Move to ...
	* sysdeps/s390/multiarch/memcpy-s390x.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/multiarch/memcpy-s390.S: Delete File.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: Move to ...
	* sysdeps/s390/multiarch/memcpy.c: ... here.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: Delete File.
2018-12-18 13:57:06 +01:00
Stefan Liebler
b7e024a838 S390: Refactor memcmp ifunc handling.
This patch moves all ifunc variants for memcmp
to sysdeps/s390/memcmp-z900.S. The configure-check/preprocessor logic
in sysdeps/s390/ifunc-memcmp.h decides if ifunc is needed at all
and which ifunc variants should be available.
E.g. if the compiler/assembler already supports z196 by default,
the older ifunc variants are not included.
If we only need the newest ifunc variant,
then we can skip ifunc at all.

Therefore the ifunc-resolvers and __libc_ifunc_impl_list are adjusted
in order to handle only the available ifunc variants.

ChangeLog:

	* sysdeps/s390/ifunc-memcmp.h: New File.
	* sysdeps/s390/memcmp.S: Move to ...
	* sysdeps/s390/memcmp-z900.S ... here.
	Move implementations from memcmp-s390x.s to here.
	* sysdeps/s390/multiarch/memcmp-s390x.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines):
	Remove memcmp variants.
	* sysdeps/s390/Makefile (sysdep_routines):
	Add memcmp variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Adjust ifunc variants for
	memcmp.
	* sysdeps/s390/multiarch/memcmp.c: Move ifunc resolver
	to ...
	* sysdeps/s390/memcmp.c: ... here.
	Adjust ifunc variants for memcmp.
2018-12-18 13:57:05 +01:00
Stefan Liebler
6c6b8c7470 S390: Unify 31/64bit memcmp.
The implementation of memcmp for s390-32 (31bit) and
s390-64 (64bit) is nearly the same.
This patch unifies it for maintability reasons.

__memcmp_z10 and __memcmp_z196 differs between 31 and 64bit:
-31bit needs .machinemode "zarch_nohighgprs" and llgfr   %r4,%r4
-lr vs lgr and some other instructions:
But lgr and co can be also used on 31bit as this ifunc variant
is only called if we are on a zarch machine.

__memcmp_default differs between 31 and 64bit:
-Some 31bit vs 64bit instructions (e.g. ltr vs ltgr.
Solved with 31/64 specific instruction macros).
-The address of mvc instruction is setup in different ways
(larl vs bras). Solved with #if defined __s390x__.

Otherwise 31/64bit implementation has the same structure of the code.

ChangeLog:

	* sysdeps/s390/s390-64/memcmp.S: Move to ...
	* sysdeps/s390/memcmp.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/memcmp.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add memcmp.
	* sysdeps/s390/s390-32/multiarch/Makefile (sysdep_routines):
	Remove memcmp.
	* sysdeps/s390/s390-64/multiarch/Makefile: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcmp-s390x.S: Move to ...
	* sysdeps/s390/multiarch/memcmp-s390x.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/multiarch/memcmp-s390.S: Delete File.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: Move to ...
	* sysdeps/s390/multiarch/memcmp.c: ... here.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: Delete File.
2018-12-18 13:57:05 +01:00
Stefan Liebler
07be392807 S390: Implement bzero with memset.
This patch removes the bzero s390 implementation with mvcle and
adds entry points for bzero in memset ifunc variants.
Therefore an ifunc resolver is implemented for bzero, too.

ChangeLog:

	* sysdeps/s390/s390-32/bzero.S: Delete file.
	* sysdeps/s390/s390-64/bzero.S: Likewise.
	* sysdeps/s390/Makefile (sysdep_routines): Add bzero.
	* sysdeps/s390/bzero.c: New file.
	* sysdeps/s390/memset-z900.S: Add bzero entry points.
	* sysdeps/s390/ifunc-memset.h: Add bzero function macros.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Add bzero ifunc variants.
2018-12-18 13:57:05 +01:00
Stefan Liebler
712a254a97 S390: Refactor memset ifunc handling.
This patch moves all ifunc variants for memset
to sysdeps/s390/memset-z900.S. The configure-check/preprocessor logic
in sysdeps/s390/ifunc-memset.h decides if ifunc is needed at all
and which ifunc variants should be available.
E.g. if the compiler/assembler already supports z196 by default,
the older ifunc variants are not included.
If we only need the newest ifunc variant,
then we can skip ifunc at all.

Therefore the ifunc-resolvers and __libc_ifunc_impl_list are adjusted
in order to handle only the available ifunc variants.

ChangeLog:

	* sysdeps/s390/ifunc-memset.h: New File.
	* sysdeps/s390/memset.S: Move to ...
	* sysdeps/s390/memset-z900.S ... here.
	Move implementations from memset-s390x.s to here.
	* sysdeps/s390/multiarch/memset-s390x.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines):
	Remove memset variants.
	* sysdeps/s390/Makefile (sysdep_routines):
	Add memset variants.
	* sysdeps/s390/multiarch/ifunc-impl-list.c
	(__libc_ifunc_impl_list): Adjust ifunc variants for
	memset.
	* sysdeps/s390/multiarch/memset.c: Move ifunc resolver
	to ...
	* sysdeps/s390/memset.c: ... here.
	Adjust ifunc variants for memset.
2018-12-18 13:57:04 +01:00
Stefan Liebler
5f1743d118 S390: Unify 31/64bit memset.
The implementation of memset for s390-32 (31bit) and
s390-64 (64bit) is nearly the same.
This patch unifies it for maintability reasons.

__memset_z10 and __memset_z196 differs between 31 and 64bit:
-31bit needs .machinemode "zarch_nohighgprs" and llgfr   %r4,%r4
-lr vs lgr and some other instructions:
But lgr and co can be also used on 31bit as this ifunc variant
is only called if we are on a zarch machine.

__memset_default differs between 31 and 64bit:
-Some 31bit vs 64bit instructions (e.g. ltr vs ltgr.
Solved with 31/64 specific instruction macros).
-The address of mvc instruction is setup in different ways
(larl vs bras). Solved with #if defined __s390x__.

Otherwise 31/64bit implementation has the same structure of the code.

ChangeLog:

	* sysdeps/s390/s390-64/memset.S: Move to ...
	* sysdeps/s390/memset.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/memset.S: Delete File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add memset.
	* sysdeps/s390/s390-32/multiarch/Makefile (sysdep_routines):
	Remove memset.
	* sysdeps/s390/s390-64/multiarch/Makefile: Likewise.
	* sysdeps/s390/s390-64/multiarch/memset-s390x.S: Move to ...
	* sysdeps/s390/multiarch/memset-s390x.S: ... here.
	Adjust to be usable for 31/64bit.
	* sysdeps/s390/s390-32/multiarch/memset-s390.S: Delete File.
	* sysdeps/s390/s390-64/multiarch/memset.c: Move to ...
	* sysdeps/s390/multiarch/memset.c: ... here.
	* sysdeps/s390/s390-32/multiarch/memset.c: Delete File.
2018-12-18 13:57:04 +01:00
Stefan Liebler
e8023f2685 S390: Use hwcap instead of dl_hwcap in ifunc-resolvers.
The renaming of hwcap arguments in ifunc-resolvers is needed
in order to prepare for further commits which refactors
ifunc handling for memset, memcmp, and memcpy.  Now you are able
to use s390_libc_ifunc_init which stores the stfle bits
within the expression for an ifunc-resolver generated by
s390_libc_ifunc_expr.

ChangeLog:

	* sysdeps/s390/multiarch/ifunc-resolve.h
	(s390_libc_ifunc_init, s390_libc_ifunc,
	s390_vx_libc_ifunc2_redirected): Use hwcap instead of dl_hwcap.
2018-12-18 13:57:03 +01:00
Joseph Myers
6900d2ca74 Fix s390 -Os iconv build.
Building glibc for s390 with -Os (32-bit only, with GCC 7) fails with:

In file included from ../sysdeps/s390/multiarch/8bit-generic.c:370:0,
                 from ebcdic-at-de.c:28:
../iconv/loop.c: In function '__to_generic_vx':
../iconv/loop.c:264:22: error: 'ch' may be used uninitialized in this function [-Werror=maybe-uninitialized]
     if (((Character) >> 7) == (0xe0000 >> 7))          \
                      ^~
In file included from ebcdic-at-de.c:28:0:
../sysdeps/s390/multiarch/8bit-generic.c:340:15: note: 'ch' was declared here
      uint32_t ch;      \
               ^
../iconv/loop.c:325:7: note: in expansion of macro 'BODY'
       BODY
       ^~~~

It's fairly easy to see, looking at the (long) expansion of the BODY
macro, that this is a false positive and the relevant variable 'ch' is
always initialized before use, in one of two possible places.  As
such, disabling the warning for -Os with the DIAG_* macros is the
natural approach to fix this build failure.  However, because of the
location at which the warning is reported, the disabling needs to go
in iconv/loop.c, around the definition of UNICODE_TAG_HANDLER (not
inside the definition), as that macro definition is where the
uninitialized use is reported, whereas the code that needs to be
reasoned about to see that the warning is a false positive is in the
definition of BODY elsewhere.

Thus, the patch adds such disabling in iconv/loop.c, with a comment
pointing to the s390-specific code and a comment in the s390-specific
code pointing to the generic file to alert people to the possible need
to update one place when changing the other.  It would be possible if
desired to use #ifdef __s390__ around the disabling, though in general
we try to avoid that sort of thing in generic files.  (Or some
extremely specialized macros for "disable -Wmaybe-uninitialized in
this particular place" could be specified, defined to 0 in a lot of
different files that include iconv/loop.c and to 1 in that particular
s390 file.)

Tested that this fixed -Os compilation for s390-linux-gnu with
build-many-glibcs.py.

	* iconv/loop.c (UNICODE_TAG_HANDLER): Disable
	-Wmaybe-uninitialized for -Os.
	* sysdeps/s390/multiarch/8bit-generic.c (BODY): Add comment about
	this disabling.
2018-03-05 21:46:55 +00:00
Joseph Myers
688903eb3e Update copyright dates with scripts/update-copyrights.
* All files with FSF copyright notices: Update copyright dates
	using scripts/update-copyrights.
	* locale/programs/charmap-kw.h: Regenerated.
	* locale/programs/locfile-kw.h: Likewise.
2018-01-01 00:32:25 +00:00
Stefan Liebler
a37b5daa6b S390: Use cu21 instruction for converting from utf16 to utf8.
This patch adds an ifunc variant to use the cu instruction on arch12 CPUs.
This new ifunc variant can be built if binutils support z13 vector
instructions.  At runtime, HWCAP_S390_VXE decides if we can use the
cu21 instruction.

ChangeLog:

	* sysdeps/s390/utf8-utf16-z9.c (__to_utf8_loop_vx_cu):
	Use vector and cu21 instruction.
	* sysdeps/s390/multiarch/utf8-utf16-z9.c:
	Add __to_utf8_loop_vx_cu in ifunc resolver.
2017-06-27 17:09:43 +02:00
Stefan Liebler
f0137ff31d S390: Use cu24 instruction for converting from utf16 to utf32.
This patch adds an ifunc variant to use the cu instruction on arch12 CPUs.
This new ifunc variant can be built if binutils support z13 vector
instructions.  At runtime, HWCAP_S390_VXE decides if we can use the
cu24 instruction.

ChangeLog:

	* sysdeps/s390/utf16-utf32-z9.c (__from_utf16_loop_vx_cu):
	Use vector and cu24 instruction.
    	* sysdeps/s390/multiarch/utf16-utf32-z9.c:
    	Add __from_utf16_loop_vx_cu in ifunc resolver.
2017-06-27 17:09:43 +02:00
Stefan Liebler
593e4da186 S390: Use cu42 instruction for converting from utf32 to utf16.
This patch adds an ifunc variant to use the cu instruction on arch12 CPUs.
This new ifunc variant can be built if binutils support z13 vector
instructions.  At runtime, HWCAP_S390_VXE decides if we can use the
cu42 instruction.

ChangeLog:

	* sysdeps/s390/utf16-utf32-z9.c (__to_utf16_loop_vx_cu):
	Use vector and cu42 instruction.
	* sysdeps/s390/multiarch/utf16-utf32-z9.c:
	Add __to_utf16_loop_vx_cu in ifunc resolver.
2017-06-27 17:09:43 +02:00
Stefan Liebler
23ea69a9d6 S390: Use cu41 instruction for converting from utf32 to utf8.
This patch adds an ifunc variant to use the cu instruction on arch12 CPUs.
This new ifunc variant can be built if binutils support z13 vector
instructions.  At runtime, HWCAP_S390_VXE decides if we can use the
cu41 instruction.

ChangeLog:

	* sysdeps/s390/utf8-utf32-z9.c (__to_utf8_loop_vx_cu):
	Use vector and cu41 instruction.
	* sysdeps/s390/multiarch/utf8-utf32-z9.c: Add __to_utf8_loop_vx_cu
	in ifunc resolver.
2017-06-27 17:09:42 +02:00
Zack Weinberg
09a596cc2c Remove bits/string.h.
These machine-dependent inline string functions have never been on by
default, and even if they were a good idea at the time they were
introduced, they haven't really been touched in ten to fifteen years
and probably aren't a good idea on current-gen processors.  Current
thinking is that this class of optimization is best left to the
compiler.

	* bits/string.h, string/bits/string.h
	* sysdeps/aarch64/bits/string.h
	* sysdeps/m68k/m680x0/m68020/bits/string.h
	* sysdeps/s390/bits/string.h, sysdeps/sparc/bits/string.h
	* sysdeps/x86/bits/string.h: Delete file.

	* string/string.h: Don't include bits/string.h.
	* string/bits/string3.h: Rename to bits/string_fortified.h.
	No need to undef various symbols that the removed headers
	might have defined as macros.
	* string/Makefile (headers): Remove bits/string.h, change
	bits/string3.h to bits/string_fortified.h.
	* string/string-inlines.c: Update commentary.  Remove definitions
	of various macros that nothing looks at anymore.  Don't directly
	include bits/string.h. Set _STRING_INLINE_unaligned here, based on
	compiler-predefined macros.
	* string/strncat.c: If STRNCAT is not defined, or STRNCAT_PRIMARY
	_is_ defined, provide internal hidden alias __strncat.
	* include/string.h: Declare internal hidden alias __strncat.
	Only forward __stpcpy to __builtin_stpcpy if __NO_STRING_INLINES is
	not defined.
	* include/bits/string3.h: Rename to bits/string_fortified.h,
	update to match above.

	* sysdeps/i386/string-inlines.c: Define compat symbols for
	everything formerly defined by sysdeps/x86/bits/string.h.
	Make existing definitions into compat symbols as well.
	Remove some no-longer-necessary messing around with macros.

	* sysdeps/powerpc/powerpc32/power4/multiarch/mempcpy.c
	* sysdeps/powerpc/powerpc64/multiarch/mempcpy.c
	* sysdeps/powerpc/powerpc64/multiarch/stpcpy.c
	* sysdeps/s390/multiarch/mempcpy.c
	No need to define _HAVE_STRING_ARCH_mempcpy.
	Do define __NO_STRING_INLINES and NO_MEMPCPY_STPCPY_REDIRECT.

	* sysdeps/i386/i686/multiarch/strncat-c.c
	* sysdeps/s390/multiarch/strncat-c.c
	* sysdeps/x86_64/multiarch/strncat-c.c
	Define STRNCAT_PRIMARY.  Don't change definition of libc_hidden_def.
2017-06-20 08:21:24 -04:00
Stefan Liebler
5ea9ce3749 S390: Move utf8-utf32-z9.c to multiarch folder and use s390_libc_ifunc_expr macro.
The utf8-utf32-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder.  Otherwise ifunc is used even if you configure
with --disable-multi-arch.

This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf8-utf32-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.

The ifunc versions are implemented in sysdeps/s390/utf8-utf32-z9.c.
Each version is only implemented if needed or supported.  Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level.  This block defines HAVE_[FROM|TO]_[C|CU|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|CU|VX] == 1.  There is no functional change.

The cu instructions are z9 zarch instructions.  As the major distros are
already using the newer z196 as architecture level set, those instructions
can be used as fallback version instead of the c-code.  This behaviour is
decided at compile time via HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT.

ChangeLog:

	* sysdeps/s390/multiarch/utf8-utf32-z9.c: New File.
	* sysdeps/s390/utf8-utf32-z9.c: Move ifunc resolvers to multiarch
	folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|CU|VX].
	(HAVE_FROM_C, HAVE_FROM_CU, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX,
	FROM_LOOP_DEFAULT, FROM_LOOP_C, FROM_LOOP_CU, FROM_LOOP_VX,
	TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX): New Define.
2017-04-21 15:30:00 +02:00
Stefan Liebler
85286aaf1d S390: Move utf16-utf32-z9.c to multiarch folder and use s390_libc_ifunc_expr macro.
The utf16-utf32-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder.  Otherwise ifunc is used even if you configure
with --disable-multi-arch.

This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf16-utf32-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.

The ifunc versions are implemented in sysdeps/s390/utf16-utf32-z9.c.
Each version is only implemented if needed or supported.  Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level.  This block defines HAVE_[FROM|TO]_[C|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|VX] == 1.  There is no functional change.

ChangeLog:

	* sysdeps/s390/multiarch/utf16-utf32-z9.c: New File.
	* sysdeps/s390/utf16-utf32-z9.c: Move ifunc resolvers to multiarch
	folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|VX].
	(HAVE_FROM_C, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX, FROM_LOOP_DEFAULT,
	FROM_LOOP_C, FROM_LOOP_VX, TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX):
	New Define.
2017-04-21 15:30:00 +02:00
Stefan Liebler
df6cc7ee3b S390: Move utf8-utf16-z9.c to multiarch folder and use s390_libc_ifunc_expr macro.
The utf8-utf16-z9.c iconv module is using ifunc and thus the ifunc part should
be in multiarch folder.  Otherwise ifunc is used even if you configure
with --disable-multi-arch.

This patch moves the ifunc resolvers to the new file
sysdeps/s390/multiarch/utf8-utf16-z9.c. The resolvers are now implemented
with s390_libc_ifunc_expr macro instead of using gcc attribute ifunc directly.

The ifunc versions are implemented in sysdeps/s390/utf8-utf16-z9.c.
Each version is only implemented if needed or supported.  Therefore there is
a block at beginning of the file which selects the versions which should be
defined depending on support for multiarch, vector-support and used minimum
architecture level.  This block defines HAVE_[FROM|TO]_[C|CU|VX] to 1 or 0.
The code below is rearranged and surrounded
by #if HAVE_[FROM|TO]_[C|CU|VX] == 1.  There is no functional change.

The cu instructions are z9 zarch instructions.  As the major distros are
already using the newer z196 as architecture level set, those instructions
can be used as fallback version instead of the c-code.  This behaviour is
decided at compile time via HAVE_S390_MIN_Z196_ZARCH_ASM_SUPPORT.

ChangeLog:

	* sysdeps/s390/multiarch/utf8-utf16-z9.c: New File.
	* sysdeps/s390/utf8-utf16-z9.c: Move ifunc resolvers to multiarch
	folder and define ifunc versions depending on HAVE_[FROM|TO]_[C|CU|VX].
	(HAVE_FROM_C, HAVE_FROM_CU, HAVE_FROM_VX, HAVE_TO_C, HAVE_TO_VX,
	FROM_LOOP_DEFAULT, FROM_LOOP_C, FROM_LOOP_CU, FROM_LOOP_VX,
	TO_LOOP_DEFAULT, TO_LOOP_C, TO_LOOP_VX): New Define.
2017-04-21 15:30:00 +02:00
Stefan Liebler
51213e2b8d S390: Use new s390_libc_ifunc_expr macro in s390 8bit-generic.c.
This patch adds s390_libc_ifunc_expr macro which uses the __ifunc base macro
in include/libc-symbols.h and lets the user define a generic expression to
choose the correct ifunc variant.  Furthermore as the base macro is used,
the ifunc resolver functions are now also using inhibit_stack_protector.
S390 needs its own version due to the hwcap argument of the ifunc resolver.

This new macro is now used in iconv code in 8bit-generic.c instead of using
gcc attribute ifunc directly.

ChangeLog:

	* sysdeps/s390/multiarch/ifunc-resolve.h
	(s390_libc_ifunc_expr_init, s390_libc_ifunc_expr): New Define.
	* sysdeps/s390/multiarch/8bit-generic.c
	(__to_generic, __from_generic): Use s390_libc_ifunc_expr to
	define ifunc resolvers.
2017-04-21 15:30:00 +02:00
Joseph Myers
bfff8b1bec Update copyright dates with scripts/update-copyrights. 2017-01-01 00:14:16 +00:00
Stefan Liebler
18d6c45e12 s390: Refactor ifunc resolvers due to false debuginfo.
This patch adjusts the s390 specific ifunc helper macros in ifunc-resolve.h to
use the common __ifunc macro, which uses gcc attribute ifunc to get rid of the
false debuginfo. Therefore the redirection construct is applied where needed.

Perhaps in future we can switch some of the internal symbols __GI_* from the
fallback variant to the ifunc function. But this change is not
straightforward due to a segmentation fault while linking libc.so with older
binutils on s390.

ChangeLog:

	[BZ #20478]
	* sysdeps/s390/multiarch/ifunc-resolve.h
	(s390_vx_libc_ifunc2, s390_libc_ifunc): Use __ifunc from libc-symbols.h
	to create ifunc symbols.
	(s390_vx_libc_ifunc_init, s390_vx_libc_ifunc_redirected
	, s390_vx_libc_ifunc2_redirected, s390_libc_ifunc_init): New define.
	* sysdeps/s390/multiarch/memchr.c: Redirect ifunced function in header
	for using it as type for ifunc function.
	* sysdeps/s390/multiarch/mempcpy.c: Likewise.
	* sysdeps/s390/multiarch/rawmemchr.c: Likewise.
	* sysdeps/s390/multiarch/stpcpy.c: Likewise.
	* sysdeps/s390/multiarch/stpncpy.c: Likewise.
	* sysdeps/s390/multiarch/strcat.c: Likewise.
	* sysdeps/s390/multiarch/strchr.c: Likewise.
	* sysdeps/s390/multiarch/strcmp.c: Likewise.
	* sysdeps/s390/multiarch/strcpy.c: Likewise.
	* sysdeps/s390/multiarch/strcspn.c: Likewise.
	* sysdeps/s390/multiarch/strlen.c: Likewise.
	* sysdeps/s390/multiarch/strncmp.c: Likewise.
	* sysdeps/s390/multiarch/strncpy.c: Likewise.
	* sysdeps/s390/multiarch/strnlen.c: Likewise.
	* sysdeps/s390/multiarch/strpbrk.c: Likewise.
	* sysdeps/s390/multiarch/strrchr.c: Likewise.
	* sysdeps/s390/multiarch/strspn.c: Likewise.
	* sysdeps/s390/multiarch/wcschr.c: Likewise.
	* sysdeps/s390/multiarch/wcscmp.c: Likewise.
	* sysdeps/s390/multiarch/wcspbrk.c: Likewise.
	* sysdeps/s390/multiarch/wcsspn.c: Likewise.
	* sysdeps/s390/multiarch/wmemchr.c: Likewise.
	* sysdeps/s390/multiarch/wmemset.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-32/multiarch/memset.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcmp.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memcpy.c: Likewise.
	* sysdeps/s390/s390-64/multiarch/memset.c: Likewise.
2016-10-07 10:11:21 +02:00
Stefan Liebler
3b704e26b3 S390: Optimize builtin iconv-modules.
This patch introduces a s390 specific gconv_simple.c file which provides
optimized versions for z13 with vector instructions, which will be chosen at
runtime via ifunc.
The optimized conversions can convert between internal and ascii, ucs4, ucs4le,
ucs2, ucs2le.
If the build-environment lacks vector support, then iconv/gconv_simple.c
is used wihtout any change. Otherwise iconvdata/gconv_simple.c is used to create
conversion loop routines without vector instructions as fallback, if vector
instructions aren't available at runtime.

ChangeLog:

	* sysdeps/s390/multiarch/gconv_simple.c: New File.
	* sysdeps/s390/multiarch/Makefile (sysdep_routines): Add gconv_simple.
2016-05-25 17:18:04 +02:00