[U-Boot] [PATCH RFC 1/3] arm920t: do not set register useless

Andreas Bießmann andreas.devel at googlemail.com
Tue Nov 30 09:28:44 CET 2010


Dear Albert ARIBAUD,

Am 30.11.2010 09:07, schrieb Albert ARIBAUD:
> Hi Andreas,
> 
> Le 30/11/2010 08:06, Andreas Bießmann a écrit :
> 
>> diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S
>> index 01edb9b..71de373 100644
>> --- a/arch/arm/cpu/arm920t/start.S
>> +++ b/arch/arm/cpu/arm920t/start.S
>> @@ -208,15 +208,16 @@ stack_setup:
>>       mov    sp, r4
>>
>>       adr    r0, _start
>> +    cmp    r0, r6
>> +    beq    clear_bss        /* skip relocation */
>> +    mov    r1, r6
> 
> Why use r1?

Use a scratch register here cause stmia Rn! does increment Rn.

> 
>>       ldr    r2, _TEXT_BASE
>>       ldr    r3, _bss_start_ofs
>>       add    r2, r0, r3        /* r2<- source end address        */
>> -    cmp    r0, r6
>> -    beq    clear_bss
>>
>>   copy_loop:
>>       ldmia    r0!, {r9-r10}        /* copy from source address
>> [r0]    */
>> -    stmia    r6!, {r9-r10}        /* copy to   target address [r1]    */
>> +    stmia    r1!, {r9-r10}        /* copy to   target address [r1]    */

Therefore usage of r6 here would destroy the saved 'addr of
destination'. Cause that fact we have saved the 'addr of destination' @
beginning of relocate_code twice, once to r6 and once to r7. This is
obviously not needed iv we change the register in copy_loop (which was
already used in comment .. if you saw that on the end of the line).

I doubt if this a 'speed up' but we can have a cleaner interface. We
have r4, r5, r6 as storage of input values to relocate_code. We do only
use scratch registers for copy_loop, fixloop for relocation, clear_bss
later on. We do decide if we need fixloop for relocation or if we can
skip that and then setup the relevant scratch registers.

Well this is only an RFC. I found that plus the NULL pointer stuff worth
to mention. It is not that important to get this special patch in cause
the current implementation do also work.

regards

Andreas Bießmann


More information about the U-Boot mailing list