Re: [PATCH v2 0/1] riscv: add vectorized memset, memcpy and memmove
Richárd Szalay <[email protected]> Tue, 6 Jan 2026 12:27:13 +0100
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <CAPZGRWahgrvYCdU7eqTrJ+NE5Mma3Ln8LxDtE3s+X3Egihj75g@mail.gmail.com> |
On Sat, 3 Jan 2026 at 16:22, Pincheng Wang <[email protected]> wrote: > Hi all, > > Happy new year! > > Just a gentle ping on this patch series. Please let me know if there are > any remaining concerns that I can help address. Happy to update the > series if needed. :) Dear Pincheng, I have some high-level questions from a purely user perspective. Please do not consider this as a "review". :) > On 2025/12/26 0:08, Pincheng Wang wrote: > > This v2 patch adds RISC-V Vector (RVV) optimized implementations for > > memset, memcpy and memmove. > > > > Changes since v1: > > - Switch the conditional compilation macro from __riscv_v to __riscv_vector. > > - Replaced '.option arch,+v' with '.option arch,+zve32x'. What is the implication of this change? I'm a newbie to RVV, and "Zve32x" looks like a subset implementation. Is it possible to compile the standard library post-patch if a target usually blanket-enables "+v"? ("rv64imafdcv") > > - Removed an unnecessary unconditional jump instruction in memmove-asm.S > > - In memcpy and memmove, when __riscv_misaligned_fast is not defined, > > the destination address is now aligned to SZREG to improve performance > > on systems with slow misaligned accesses. > > > > These implementations use the RVV extension with e8 element size and m8 > > LMUL, and are conditionally compiled only when __riscv_vector is > > defined, ensuring compatibility with non-vector RISC-V systems. Is the condition for this conditional compilation decided at the moment of compiling 'newlib'? So, if someone wants to create a distribution where it is possible to compile for both non-RVV and RVV-capable target configurations, this essentially means having to distribute two versions of the newlib binary archive? Am I right to think that "pre-compiling" newlib with vectorised mem{cpy,move,set} and linking it with a binary that is otherwise non-RVV, and execute the whole image on a non-RVV platform would simply result in a corrupted execution? > > Benchmark results on Spacemit X60 (Muse-pi) and Canaan K230 show significant > > improvements. > > > > memcpy: Up to 4.84x on Muse-pi and 4.66x on K230. > > memset: Up to 4.31x on Muse-pi and 3.14x on K230. > > memmove: Up to 2.87x on Muse-pi and 1.48x on K230. > > > > With newly added alignment handling, these improvements are consistent > > across both aligned and misaligned memory acesses.