mirror of
https://sourceware.org/git/glibc.git
synced 2025-11-17 02:43:26 +03:00
riscv: memcpy_noalignment: Reorder to store via a3, then bump a3
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 <zihong.plct@isrc.iscas.ac.cn>
Reviewed-by: Peter Bergner <bergner@tenstorrent.com>
This commit is contained in:
committed by
Peter Bergner
parent
0698fd462a
commit
09a94c86ca
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user