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.
This commit is contained in:
Christos Gentsos 2019-10-07 14:38:14 +01:00 committed by Ken Brown
parent 0ec5f38550
commit a253992ad5
2 changed files with 12 additions and 0 deletions

View File

@ -26,6 +26,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "acle-compat.h"
.thumb .thumb
.syntax unified .syntax unified
.global __aeabi_memmove .global __aeabi_memmove
@ -49,9 +51,13 @@ __aeabi_memmove:
subs r3, r3, #1 subs r3, r3, #1
bcs 1b bcs 1b
2: 2:
#if __ARM_ARCH >= 5
pop {r4, pc}
#else
pop {r4} pop {r4}
pop {r1} pop {r1}
bx r1 bx r1
#endif
3: 3:
movs r3, #0 movs r3, #0
cmp r2, #0 cmp r2, #0

View File

@ -26,6 +26,8 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include "acle-compat.h"
.thumb .thumb
.syntax unified .syntax unified
.global __aeabi_memset .global __aeabi_memset
@ -110,9 +112,13 @@ __aeabi_memset:
cmp r4, r3 cmp r4, r3
bne 8b bne 8b
9: 9:
#if __ARM_ARCH >= 5
pop {r4, r5, r6, pc}
#else
pop {r4, r5, r6} pop {r4, r5, r6}
pop {r1} pop {r1}
bx r1 bx r1
#endif
10: 10:
movs r3, r0 movs r3, r0
movs r4, r1 movs r4, r1