This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
[PATCH] Optimize epilogue in thumb __aeabi_{memmove,memset} implementations
- From: Christos Gentsos <christos dot gentsos at cern dot ch>
- To: <newlib at sourceware dot org>
- Date: Mon, 30 Sep 2019 16:55:10 +0200
- Subject: [PATCH] Optimize epilogue in thumb __aeabi_{memmove,memset} implementations
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 188.184.36.50) smtp.rcpttodomain=sourceware.org smtp.mailfrom=cern.ch; dmarc=bestguesspass action=none header.from=cern.ch; dkim=none (message not signed); arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZFUmCM3nGX6z7ohtqWuCrR+PA0Y8T8qI0pKkDGRxPfk=; b=IqrZf2T8Ew5pw9CK/r9xh16Ege6KldkX+wO+C7LtiHVhpBHAIA8d/aAmzcUPgmn/jn8f3jabfj8wMCChb3C5+fyygoYC5rws3cxSJ5cOZQFJo4ghtGFuacjTXRZAoVVpCVpqA7WPt6fsc6DIIPscylIxihuPJbhsedjsfE+BnVgBoiZbMdIvl6ewTHKVL+na66oSpOvLhZn2MP9ThEAscMnDBJ4NZhZ+PJTVu1W7x2MO11Q30xWsU2ARQd78e7P+oXr0fkjlD/I8/T3Pe4TCwqJihh4yZvcP2jQrZpuPDNj1mvjPoW0AgHCQX1gV7dMzYt2RR2WcJeNzJefSTjAfZA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=I72z9ULLftKoP2ahapA52OhwmMCyQIJh0fhNBqlH+ay6Zxq2IrklFIMo2eDdbLWyfFCla56KpZ5CiK89L2LlU49Qg9u2sO+TzRbqqxQGxwCJOwjGVM54eTuL0ETvTSjK5Tunev9KlGUPfKUvOgfpTIE8Qfoj7tywhXybSdMQnDWUmPqbOGU9KplOKiezaF1D0iIYTMiJPg/JeltRgt7ukAMbv/C29Nmlhsc7cpBUWuSFz062NcL9PEec1ozz1fyDxpIE0FJ6canGxj1ipe9BqdBeXJxUp7K4vAvhVn7zZUgNfBIfEGTSkV6GkBMNCVjpI4shSQiJRu+T4VtoJWEofA==
The same pop instruction that is used to restore registers can be used
to return from the function (as it is already done in other function
implementations).
---
newlib/libc/machine/arm/aeabi_memmove-thumb.S | 4 +---
newlib/libc/machine/arm/aeabi_memset-thumb.S | 4 +---
2 files changed, 2 insertions(+), 6 deletions(-)
diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb.S b/newlib/libc/machine/arm/aeabi_memmove-thumb.S
index 61a72581..a0aad852 100644
--- a/newlib/libc/machine/arm/aeabi_memmove-thumb.S
+++ b/newlib/libc/machine/arm/aeabi_memmove-thumb.S
@@ -49,9 +49,7 @@ __aeabi_memmove:
subs r3, r3, #1
bcs 1b
2:
- pop {r4}
- pop {r1}
- bx r1
+ pop {r4, pc}
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 aa8f2719..5bb80b20 100644
--- a/newlib/libc/machine/arm/aeabi_memset-thumb.S
+++ b/newlib/libc/machine/arm/aeabi_memset-thumb.S
@@ -110,9 +110,7 @@ __aeabi_memset:
cmp r4, r3
bne 8b
9:
- pop {r4, r5, r6}
- pop {r1}
- bx r1
+ pop {r4, r5, r6, pc}
10:
movs r3, r0
movs r4, r1
--
2.23.0