diff options
author | Christos Gentsos <christos.gentsos@cern.ch> | 2019-10-07 14:38:14 +0100 |
---|---|---|
committer | Richard Earnshaw <Richard.Earnshaw@arm.com> | 2019-10-07 14:38:14 +0100 |
commit | 175b215e054a8cee50d91317f3af22a3b2c3d320 (patch) | |
tree | 1043fb6a520d752e323f949c9ea543fa1a95a6f7 /newlib | |
parent | f88aece242178ff0c187d56e34a79645fbc44a23 (diff) | |
download | newlib-175b215e054a8cee50d91317f3af22a3b2c3d320.zip newlib-175b215e054a8cee50d91317f3af22a3b2c3d320.tar.gz newlib-175b215e054a8cee50d91317f3af22a3b2c3d320.tar.bz2 |
Optimize epilogue sequence for architectures with POP interworking.
ARMv5 and above supports arm/thumb interworking using POP, so we can
improve the exit sequence in this case.
Diffstat (limited to 'newlib')
-rw-r--r-- | newlib/libc/machine/arm/aeabi_memmove-thumb.S | 6 | ||||
-rw-r--r-- | newlib/libc/machine/arm/aeabi_memset-thumb.S | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb.S b/newlib/libc/machine/arm/aeabi_memmove-thumb.S index 61a7258..fadeb9a 100644 --- a/newlib/libc/machine/arm/aeabi_memmove-thumb.S +++ b/newlib/libc/machine/arm/aeabi_memmove-thumb.S @@ -26,6 +26,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "acle-compat.h" + .thumb .syntax unified .global __aeabi_memmove @@ -49,9 +51,13 @@ __aeabi_memmove: subs r3, r3, #1 bcs 1b 2: +#if __ARM_ARCH >= 5 + pop {r4, pc} +#else pop {r4} pop {r1} bx r1 +#endif 3: movs r3, #0 cmp r2, #0 diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb.S b/newlib/libc/machine/arm/aeabi_memset-thumb.S index aa8f271..ed6ce88 100644 --- a/newlib/libc/machine/arm/aeabi_memset-thumb.S +++ b/newlib/libc/machine/arm/aeabi_memset-thumb.S @@ -26,6 +26,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "acle-compat.h" + .thumb .syntax unified .global __aeabi_memset @@ -110,9 +112,13 @@ __aeabi_memset: cmp r4, r3 bne 8b 9: +#if __ARM_ARCH >= 5 + pop {r4, r5, r6, pc} +#else pop {r4, r5, r6} pop {r1} bx r1 +#endif 10: movs r3, r0 movs r4, r1 |