mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 04:49:25 +08:00
5c86f0da5f
This patch adds implementations of memcpy, memmove, memset and strcmp optimized for size. The changes have been tested in riscv/riscv-gnu-toolchain by riscv-dejagnu with riscv-sim.exp/riscv-sim-nano.exp.
41 lines
919 B
ArmAsm
41 lines
919 B
ArmAsm
/* Copyright (c) 2019 SiFive Inc. All rights reserved.
|
|
|
|
This copyrighted material is made available to anyone wishing to use,
|
|
modify, copy, or redistribute it subject to the terms and conditions
|
|
of the FreeBSD License. This program is distributed in the hope that
|
|
it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
|
|
including the implied warranties of MERCHANTABILITY or FITNESS FOR
|
|
A PARTICULAR PURPOSE. A copy of this license is available at
|
|
http://www.opensource.org/licenses.
|
|
*/
|
|
|
|
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
|
|
.text
|
|
.global memmove
|
|
.type memmove, @function
|
|
memmove:
|
|
beqz a2, 2f
|
|
|
|
mv t1, a0
|
|
li a3, 1
|
|
bgtu a1, a0, 1f
|
|
|
|
li a3, -1
|
|
addi a4, a2 , -1
|
|
add t1, t1, a4
|
|
add a1, a1, a4
|
|
|
|
1:
|
|
lb t2, 0(a1)
|
|
sb t2, 0(t1)
|
|
add a2, a2, -1
|
|
add t1, t1, a3
|
|
add a1, a1, a3
|
|
bnez a2, 1b
|
|
|
|
2:
|
|
ret
|
|
|
|
.size memmove, .-memmove
|
|
#endif
|