about summary refs log tree commit diff
path: root/sysdeps/s390/utf16-utf32-z9.c
Commit message (Collapse)AuthorAgeFilesLines
* S390: Use cu24 instruction for converting from utf16 to utf32.Stefan Liebler2017-06-271-1/+112
| | | | | | | | | | | | | | 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.
* S390: Use cu42 instruction for converting from utf32 to utf16.Stefan Liebler2017-06-271-1/+106
| | | | | | | | | | | | | | 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.
* S390: Move utf16-utf32-z9.c to multiarch folder and use s390_libc_ifunc_expr ↵Stefan Liebler2017-04-211-72/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Update copyright dates with scripts/update-copyrights.Joseph Myers2017-01-011-1/+1
|
* S390: Fix utf32 to utf16 handling of low surrogates (disable cu42).Stefan Liebler2016-05-251-93/+62
| | | | | | | | | | | | | | | | | According to the latest Unicode standard, a conversion from/to UTF-xx has to report an error if the character value is in range of an utf16 surrogate (0xd800..0xdfff). See https://sourceware.org/ml/libc-help/2015-12/msg00015.html. Thus the cu42 instruction, which converts from utf32 to utf16, has to be disabled because it does not report an error in case of a value in range of a low surrogate (0xdc00..0xdfff). The etf3eh variant is removed and the c, vector variant is adjusted to handle the value in range of an utf16 low surrogate correctly. ChangeLog: * sysdeps/s390/utf16-utf32-z9.c: Disable cu42 instruction and report an error in case of a value in range of an utf16 low surrogate.
* S390: Use s390-64 specific ionv-modules on s390-32, too.Stefan Liebler2016-05-251-0/+636
This patch reworks the existing s390 64bit specific iconv modules in order to use them on s390 31bit, too. Thus the parts for subdirectory iconvdata in sysdeps/s390/s390-64/Makefile were moved to sysdeps/s390/Makefile so that they apply on 31bit, too. All those modules are moved from sysdeps/s390/s390-64 directory to sysdeps/s390. The iso-8859-1 to/from cp037 module was adjusted, to use brct (branch relative on count) instruction on 31bit s390 instead of brctg, because the brctg is a zarch instruction and is not available on a 31bit kernel. The utf modules are using zarch instructions, thus the directive machinemode zarch_nohighgprs was added to the inline assemblies to omit the high-gprs flag in the shared libraries. Otherwise they can't be loaded on a 31bit kernel. The ifunc resolvers were adjusted in order to call the etf3eh or vector variants only if zarch instructions are available (64bit kernel in 31bit compat-mode). Furthermore some variable types were changed. E.g. unsigned long long would be a register pair on s390 31bit, but we want only one single register. For variables of type size_t the register contents have to be enlarged from a 32bit to a 64bit value on 31bit, because the inline assemblies uses 64bit values in such cases. ChangeLog: * sysdeps/s390/s390-64/Makefile (iconvdata-subdirectory): Move to ... * sysdeps/s390/Makefile: ... here. * sysdeps/s390/s390-64/iso-8859-1_cp037_z900.c: Move to ... * sysdeps/s390/iso-8859-1_cp037_z900.c: ... here. (BRANCH_ON_COUNT): New define. (TR_LOOP): Use BRANCH_ON_COUNT instead of brctg. * sysdeps/s390/s390-64/utf16-utf32-z9.c: Move to ... * sysdeps/s390/utf16-utf32-z9.c: ... here and adjust to run on s390-32, too. * sysdeps/s390/s390-64/utf8-utf16-z9.c: Move to ... * sysdeps/s390/utf8-utf16-z9.c: ... here and adjust to run on s390-32, too. * sysdeps/s390/s390-64/utf8-utf32-z9.c: Move to ... * sysdeps/s390/utf8-utf32-z9.c: ... here and adjust to run on s390-32, too.