diff options
author | Noah Goldstein <goldstein.w.n@gmail.com> | 2022-11-08 17:38:40 -0800 |
---|---|---|
committer | Noah Goldstein <goldstein.w.n@gmail.com> | 2022-11-08 19:22:33 -0800 |
commit | 64b8b6516b3cba19dba4c8f4f9b97daa0556fd98 (patch) | |
tree | 93e9e1c8bd54c3a10eb9c00db604bd74696adb10 /sysdeps/x86_64/wcsncat-generic.c | |
parent | 642933158e7cf072d873231b1a9bb03291f2b989 (diff) | |
download | glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.tar glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.tar.gz glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.tar.bz2 glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.zip |
x86: Add evex optimized functions for the wchar_t strcpy family
Implemented:
wcscat-evex (+ 905 bytes)
wcscpy-evex (+ 674 bytes)
wcpcpy-evex (+ 709 bytes)
wcsncpy-evex (+1358 bytes)
wcpncpy-evex (+1467 bytes)
wcsncat-evex (+1213 bytes)
Performance Changes:
Times are from N = 10 runs of the benchmark suite and are reported
as geometric mean of all ratios of New Implementation / Best Old
Implementation. Best Old Implementation was determined with the
highest ISA implementation.
wcscat-evex -> 0.991
wcscpy-evex -> 0.587
wcpcpy-evex -> 0.695
wcsncpy-evex -> 0.719
wcpncpy-evex -> 0.694
wcsncat-evex -> 0.979
Code Size Changes:
This change increase the size of libc.so by ~6.3kb bytes. For
reference the patch optimizing the normal strcpy family functions
decreases libc.so by ~5.7kb.
Full check passes on x86-64 and build succeeds for all ISA levels w/
and w/o multiarch.
Diffstat (limited to 'sysdeps/x86_64/wcsncat-generic.c')
-rw-r--r-- | sysdeps/x86_64/wcsncat-generic.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/sysdeps/x86_64/wcsncat-generic.c b/sysdeps/x86_64/wcsncat-generic.c new file mode 100644 index 0000000000..86e20d9028 --- /dev/null +++ b/sysdeps/x86_64/wcsncat-generic.c @@ -0,0 +1,31 @@ +/* ISA level static dispatch for wcsncat .c files. + Copyright (C) 2022 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* wcsncat non-multiarch build is split into two files, + wcsncat-generic.c and wcsncat.S. The wcsncat-generic.c build is + for ISA level <= 1 and just uses multiarch/wcsncat-generic.c. + This must be split into two files because we cannot include C + code from assembly or vice versa. */ + +#include <isa-level.h> + +#if MINIMUM_X86_ISA_LEVEL <= 3 + +# include <wcsmbs/wcsncat.c> + +#endif |