[PATCH v2] riscv: Fix alignment-ignorant memcpy implementation
Evan Green
evan@rivosinc.com
Tue Mar 5 19:30:18 GMT 2024
On Tue, Mar 5, 2024 at 9:03 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> The memcpy optimization (commit 587a1290a1af7bee6db) has a series
> of mistakes:
>
> - The implementation is wrong: the chunk size calculation is wrong
> leading to invalid memory access.
>
> - It adds ifunc supports as default, so --disable-multi-arch does
> not work as expected for riscv.
>
> - It mixes Linux files (memcpy ifunc selection which requires the
> vDSO/syscall mechanism) with generic support (the memcpy
> optimization itself).
>
> - There is no __libc_ifunc_impl_list, which makes testing only
> check the selected implementation instead of all supported
> by the system.
>
> This patch also simplifies the required bits to enable ifunc: there
> is no need to memcopy.h; nor to add Linux-specific files.
>
> The __memcpy_noalignment tail handling now uses a branchless strategy
> similar to aarch64 (overlap 32-bits copies for sizes 4..7 and byte
> copies for size 1..3).
>
> Checked on riscv64 and riscv32 by explicitly enabling the function
> on __libc_ifunc_impl_list on qemu-system.
>
> Changes from v1:
> * Implement the memcpy in assembly to correctly handle RISCV
> strict-alignment.
>
> ---
Thanks again for the quick fixup.
Reviewed-by: Evan Green <evan@rivosinc.com>
More information about the Libc-alpha
mailing list