Re: [PATCH] Optimize epilogue in thumb __aeabi_{memmove,memset} implementations
"Richard Earnshaw (lists)" <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
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.