[U-Boot] [PATCH 02/17] x86: Speed up copy-to-RAM and clear BSS operations

Graeme Russ graeme.russ at gmail.com
Wed Jan 4 11:04:36 CET 2012


Hi Simon,

On 04/01/12 16:21, Simon Glass wrote:
> Hi Graeme,
> 
> On Sun, Jan 1, 2012 at 8:09 PM, Graeme Russ <graeme.russ at gmail.com> wrote:
>> The implementations of memcpy and memset are now the optimised versions
>> from glibc, so use them instead of simple copy loops
>>
>> Signed-off-by: Graeme Russ <graeme.russ at gmail.com>
>> ---
>>  arch/x86/lib/board.c |   17 +++++------------
>>  1 files changed, 5 insertions(+), 12 deletions(-)
>>
>> diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
>> index d742fec..ba6b59f 100644
>> --- a/arch/x86/lib/board.c
>> +++ b/arch/x86/lib/board.c
>> @@ -188,26 +188,19 @@ static int calculate_relocation_address(void)
>>
>>  static int copy_uboot_to_ram(void)
>>  {
>> -       ulong *dst_addr = (ulong *)gd->relocaddr;
>> -       ulong *src_addr = (ulong *)&__text_start;
>> -       ulong *end_addr = (ulong *)&__data_end;
>> +       size_t len = (size_t)(&__data_end) - (size_t)(&__text_start);
> 
> Extra brackets here. Also is the type of these not char[] already? Same Q below.

I removed the brackets for v2 - The cast is required because &__data_end is
a ulong *

Actually:

	size_t len = &__data_end - &__text_start;

works, but is dangerous - I have been caught out several times in this code
doing raw arithmetic, particularly using increment and decrement operators.
I prefer to make the casts explicit now

Regards,

Graeme


More information about the U-Boot mailing list