[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