From a253992ad5bfec77495eacac8c916f2c47b302d8 Mon Sep 17 00:00:00 2001 From: Christos Gentsos Date: Mon, 7 Oct 2019 14:38:14 +0100 Subject: [PATCH] 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. --- newlib/libc/machine/arm/aeabi_memmove-thumb.S | 6 ++++++ newlib/libc/machine/arm/aeabi_memset-thumb.S | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb.S b/newlib/libc/machine/arm/aeabi_memmove-thumb.S index 61a72581c..fadeb9a3b 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 aa8f2719e..ed6ce8860 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