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/wcsncpy-generic.c | |
parent | 642933158e7cf072d873231b1a9bb03291f2b989 (diff) | |
download | glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.tar.gz glibc-64b8b6516b3cba19dba4c8f4f9b97daa0556fd98.tar.xz 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/wcsncpy-generic.c')
-rw-r--r-- | sysdeps/x86_64/wcsncpy-generic.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/sysdeps/x86_64/wcsncpy-generic.c b/sysdeps/x86_64/wcsncpy-generic.c new file mode 100644 index 0000000000..0f0ee65b65 --- /dev/null +++ b/sysdeps/x86_64/wcsncpy-generic.c @@ -0,0 +1,31 @@ +/* ISA level static dispatch for wcsncpy .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/>. */ + +/* wcsncpy non-multiarch build is split into two files, + wcsncpy-generic.c and wcsncpy.S. The wcsncpy-generic.c build is + for ISA level <= 1 and just uses multiarch/wcsncpy-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/wcsncpy.c> + +#endif |