mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-19 12:59:21 +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.
33 lines
814 B
ArmAsm
33 lines
814 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 memcpy
|
|
.type memcpy, @function
|
|
memcpy:
|
|
mv t1, a0
|
|
beqz a2, 2f
|
|
|
|
1:
|
|
lb t2, 0(a1)
|
|
sb t2, 0(t1)
|
|
add a2, a2, -1
|
|
add t1, t1, 1
|
|
add a1, a1, 1
|
|
bnez a2, 1b
|
|
|
|
2:
|
|
ret
|
|
|
|
.size memcpy, .-memcpy
|
|
#endif
|