[PATCH 0/6] riscv: add vectorized mem* routines

Pincheng Wang <[email protected]> Wed, 13 May 2026 23:38:29 +0800
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi all,

This is a follow-up series to the previous patches that added RVV
support for memset, memcpy, and memmove. This patch series implements
RVV (RISC-V Vector Extension) support for several remaining mem*
interfaces.

Please note that some implementations, such as memrchr, do not use the
e8 element size and m8 LMUL combination, since they did not show good
acceleration results during testing on our Muse Pi (Spacemit X60 core).

I have also noticed that other architectures rarely implement all mem*
interfaces with architecture-specific optimizations, and I fully
understand the maintenance burden introduced by too many hand-written
assembly implementations. Therefore, although I submitted RVV
implementations for all mem* interfaces, it may make sense to discuss
whether only a subset of these patches should be merged.

Comments and suggestions are greatly appreciated. Thank you for your
time and review!

Best regards,
Pincheng Wang

Pincheng Wang (6):
  riscv: add vectorized memccpy
  riscv: add vectorized memchr
  riscv: add vectorized memcmp
  riscv: add vectorized mempcpy
  riscv: add vectorized memrchr
  riscv: add vectorized rawmemchr

 newlib/libc/machine/riscv/Makefile.inc    | 26 ++++++++++-
 newlib/libc/machine/riscv/memccpy-asm.S   | 39 ++++++++++++++++
 newlib/libc/machine/riscv/memccpy.c       |  5 ++
 newlib/libc/machine/riscv/memchr-asm.S    | 37 +++++++++++++++
 newlib/libc/machine/riscv/memchr.c        |  4 ++
 newlib/libc/machine/riscv/memcmp-asm.S    | 43 +++++++++++++++++
 newlib/libc/machine/riscv/memcmp.c        |  5 ++
 newlib/libc/machine/riscv/mempcpy-asm.S   | 57 +++++++++++++++++++++++
 newlib/libc/machine/riscv/mempcpy.c       |  5 ++
 newlib/libc/machine/riscv/memrchr-asm.S   | 40 ++++++++++++++++
 newlib/libc/machine/riscv/memrchr.c       |  4 ++
 newlib/libc/machine/riscv/rawmemchr-asm.S | 30 ++++++++++++
 newlib/libc/machine/riscv/rawmemchr.c     |  5 ++
 13 files changed, 298 insertions(+), 2 deletions(-)
 create mode 100644 newlib/libc/machine/riscv/memccpy-asm.S
 create mode 100644 newlib/libc/machine/riscv/memccpy.c
 create mode 100644 newlib/libc/machine/riscv/memchr-asm.S
 create mode 100644 newlib/libc/machine/riscv/memcmp-asm.S
 create mode 100644 newlib/libc/machine/riscv/memcmp.c
 create mode 100644 newlib/libc/machine/riscv/mempcpy-asm.S
 create mode 100644 newlib/libc/machine/riscv/mempcpy.c
 create mode 100644 newlib/libc/machine/riscv/memrchr-asm.S
 create mode 100644 newlib/libc/machine/riscv/rawmemchr-asm.S
 create mode 100644 newlib/libc/machine/riscv/rawmemchr.c

-- 
2.39.5