[PATCH] Optimize epilogue in thumb __aeabi_{memmove,memset} implementations

Richard Earnshaw (lists) Richard.Earnshaw@arm.com
Mon Sep 30 15:37:00 GMT 2019


On 30/09/2019 16:31, Richard Earnshaw (lists) wrote:
> On 30/09/2019 15:55, Christos Gentsos wrote:
>> 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
>>
> 
> No.  That isn't interworking clean on armv4t, which we still need to 
> support.
> 
> Sorry.
> 
> R.

However, a patch that tests __ARM_ARCH >=5 and uses your improved 
sequence only in that case (preserving the old code otherwise) would 
probably be OK :-)

R.



More information about the Newlib mailing list