From 09a94c86ca30e2ec5c07a23eae0d9855b631de04 Mon Sep 17 00:00:00 2001 From: Yao Zihong Date: Thu, 30 Oct 2025 17:49:21 -0500 Subject: [PATCH] =?utf8?q?=EF=BB=BFriscv:=20memcpy=5Fnoalignment:=20Reorde?= =?utf8?q?r=20to=20store=20via=20a3,=20then=20bump=20a3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Rewrite the copy micro-step from: REG_L a4, 0(a5) addi a3, a3, SZREG addi a5, a5, SZREG REG_S a4, -SZREG(a3) to: REG_L a4, 0(a5) addi a5, a5, SZREG REG_S a4, 0(a3) addi a3, a3, SZREG Semantics are unchanged: both read *(a5_old), write *(a3_old), and then increment a3/a5 by SZREG. memcpy assumes non-overlapping regions, so the reordering preserves correctness. No functional change. Signed-off-by: Yao Zihong Reviewed-by: Peter Bergner --- sysdeps/riscv/multiarch/memcpy_noalignment.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sysdeps/riscv/multiarch/memcpy_noalignment.S b/sysdeps/riscv/multiarch/memcpy_noalignment.S index 6917fc435b..43ce890657 100644 --- a/sysdeps/riscv/multiarch/memcpy_noalignment.S +++ b/sysdeps/riscv/multiarch/memcpy_noalignment.S @@ -109,9 +109,9 @@ L(word_copy): mv a5, a1 L(word_copy_loop): REG_L a4, 0(a5) - addi a3, a3, SZREG addi a5, a5, SZREG - REG_S a4, -SZREG(a3) + REG_S a4, 0(a3) + addi a3, a3, SZREG bne a3, a6, L(word_copy_loop) add a1, a1, a7 andi a2, a2, SZREG-1 -- 2.47.3