diff options
author | Evan Green <evan@rivosinc.com> | 2024-02-27 14:56:43 -0800 |
---|---|---|
committer | Palmer Dabbelt <palmer@rivosinc.com> | 2024-03-01 07:15:01 -0800 |
commit | 587a1290a1af7bee6dbb40ebadb7a4d71e698baf (patch) | |
tree | 1e01dbbb28f39cc0c24653f56d9482038fa25339 /sysdeps/unix | |
parent | a2b47f7d4679a01d56827e1aff2a40de173fab23 (diff) | |
download | glibc-587a1290a1af7bee6dbb40ebadb7a4d71e698baf.tar.gz glibc-587a1290a1af7bee6dbb40ebadb7a4d71e698baf.tar.xz glibc-587a1290a1af7bee6dbb40ebadb7a4d71e698baf.zip |
riscv: Add and use alignment-ignorant memcpy
For CPU implementations that can perform unaligned accesses with little or no performance penalty, create a memcpy implementation that does not bother aligning buffers. It will use a block of integer registers, a single integer register, and fall back to bytewise copy for the remainder. Signed-off-by: Evan Green <evan@rivosinc.com> Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/riscv/Makefile | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/riscv/memcpy-generic.c | 24 |
2 files changed, 33 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/riscv/Makefile b/sysdeps/unix/sysv/linux/riscv/Makefile index 04abf226ad..398ff7418b 100644 --- a/sysdeps/unix/sysv/linux/riscv/Makefile +++ b/sysdeps/unix/sysv/linux/riscv/Makefile @@ -15,6 +15,15 @@ ifeq ($(subdir),stdlib) gen-as-const-headers += ucontext_i.sym endif +ifeq ($(subdir),string) +sysdep_routines += \ + memcpy \ + memcpy-generic \ + memcpy_noalignment \ + # sysdep_routines + +endif + abi-variants := ilp32 ilp32d lp64 lp64d ifeq (,$(filter $(default-abi),$(abi-variants))) diff --git a/sysdeps/unix/sysv/linux/riscv/memcpy-generic.c b/sysdeps/unix/sysv/linux/riscv/memcpy-generic.c new file mode 100644 index 0000000000..f06f4bda15 --- /dev/null +++ b/sysdeps/unix/sysv/linux/riscv/memcpy-generic.c @@ -0,0 +1,24 @@ +/* Re-include the default memcpy implementation. + Copyright (C) 2024 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/>. */ + +#include <string.h> + +extern __typeof (memcpy) __memcpy_generic; +hidden_proto (__memcpy_generic) + +#include <string/memcpy.c> |