Skip to content

riscv: optimized mem* functions

Matteo Croce linux-arch linux-riscv lkml 5 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v5 Latest3 patches 8 repliesIn review
  2. v43 patches 5 repliesSuperseded
  3. v33 patches 17 repliesSuperseded
Earlier versions · 2
VersionPostedPatchesRepliesStatus
v23 patches0 repliesSuperseded
v13 patches19 repliesSuperseded

Changes in v5 from the cover letter

- call __memcpy() instead of memcpy() in memmove()

Patches in v5 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3riscv: optimized memcpyarch/riscv/include/asm/string.h arch/riscv/kernel/riscv_ksyms.c arch/riscv/lib/Makefile +2 more+97 -1136 replies
2/3riscv: optimized memmovearch/riscv/include/asm/string.h arch/riscv/kernel/riscv_ksyms.c arch/riscv/lib/Makefile +2 more+26 -700 replies
3/3riscv: optimized memsetarch/riscv/include/asm/string.h arch/riscv/kernel/Makefile arch/riscv/kernel/riscv_ksyms.c +3 more+44 -1352 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v5 yet.

Read the v5 thread

Cover letter [PATCH v5 0/3] riscv: optimized mem* functions

From: Matteo Croce <[email protected]>

Replace the assembly mem{cpy,move,set} with C equivalent.

Try to access RAM with the largest bit width possible, but without doing unaligned accesses.

A further improvement could be to use multiple read and writes as the assembly version was trying to do.

Tested on a BeagleV Starlight with a SiFive U74 core, where the improvement is noticeable.

v4 -> v5:
- call __memcpy() instead of memcpy() in memmove()

v3 -> v4:
- incorporate changes from proposed generic version:
https://lore.kernel.org/lkml/[email protected]/

v2 -> v3:
- alias mem* to __mem* and not viceversa
- use __alias instead of a tail call

v1 -> v2:
- reduce the threshold from 64 to 16 bytes
- fix KASAN build
- optimize memset

Matteo Croce (3):
riscv: optimized memcpy
riscv: optimized memmove
riscv: optimized memset

 arch/riscv/include/asm/string.h |  18 ++--
 arch/riscv/kernel/Makefile      |   1 -
 arch/riscv/kernel/riscv_ksyms.c |  17 ----
 arch/riscv/lib/Makefile         |   4 +-
 arch/riscv/lib/memcpy.S         | 108 ----------------------
 arch/riscv/lib/memmove.S        |  64 -------------
 arch/riscv/lib/memset.S         | 113 -----------------------
 arch/riscv/lib/string.c         | 154 ++++++++++++++++++++++++++++++++
 8 files changed, 164 insertions(+), 315 deletions(-)
 delete mode 100644 arch/riscv/kernel/riscv_ksyms.c
 delete mode 100644 arch/riscv/lib/memcpy.S
 delete mode 100644 arch/riscv/lib/memmove.S
 delete mode 100644 arch/riscv/lib/memset.S
 create mode 100644 arch/riscv/lib/string.c
Signature · 1 line
2.31.1