[PATCH v3 1/3] riscv: memcpy_noalignment: Make register allocation Zca-friendly
Yao Zihong
zihong.plct@isrc.iscas.ac.cn
Thu Sep 18 14:04:53 GMT 2025
Tidy the temporary register allocation to favor registers eligible for
compressed encodings when Zca/Zcb are enabled. This keeps the ABI and
clobber set unchanged and does not alter control flow or memory access
behavior.
No functional change.
sysdeps/riscv/multiarch/memcpy_noalignment.S: Reassign temps to improve
compressed encoding opportunities.
Signed-off-by: Yao Zihong <zihong.plct@isrc.iscas.ac.cn>
---
sysdeps/riscv/multiarch/memcpy_noalignment.S | 30 ++++++++++----------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/sysdeps/riscv/multiarch/memcpy_noalignment.S b/sysdeps/riscv/multiarch/memcpy_noalignment.S
index dd135f4a4d..db8654fb59 100644
--- a/sysdeps/riscv/multiarch/memcpy_noalignment.S
+++ b/sysdeps/riscv/multiarch/memcpy_noalignment.S
@@ -121,10 +121,10 @@ L(word_copy_loop):
andi a2, a2, SZREG-1
/* Copy the last word unaligned. */
- add a3, a1, a2
- add a4, a6, a2
- REG_L t0, -SZREG(a3)
- REG_S t0, -SZREG(a4)
+ add a1, a1, a2
+ add a2, a6, a2
+ REG_L a3, -SZREG(a1)
+ REG_S a3, -SZREG(a2)
ret
L(tail):
@@ -133,24 +133,24 @@ L(tail):
add a3, a1, a2
add a4, a6, a2
beq a5, zero, L(copy_0_3)
- lw t0, 0(a1)
+ lw a2, 0(a1)
lw t1, -4(a3)
- sw t0, 0(a6)
+ sw a2, 0(a6)
sw t1, -4(a4)
ret
/* Copy 0-3 bytes. */
L(copy_0_3):
beq a2, zero, L(ret)
- srli a2, a2, 1
- add t4, a1, a2
- add t5, a6, a2
- lbu t0, 0(a1)
- lbu t1, -1(a3)
- lbu t2, 0(t4)
- sb t0, 0(a6)
- sb t1, -1(a4)
- sb t2, 0(t5)
+ lbu a3, -1(a3)
+ srli a2, a2, 1
+ add a5, a1, a2
+ lbu a1, 0(a1)
+ sb a3, -1(a4)
+ lbu a4, 0(a5)
+ add a2, a6, a2
+ sb a1, 0(a6)
+ sb a4, 0(a2)
L(ret):
ret
L(tail_adjust):
--
2.47.2
More information about the Libc-alpha
mailing list