From: Graeme Russ Date: Tue, 27 Dec 2011 11:46:41 +0000 (+1100) Subject: x86: Speed up copy-to-RAM and clear BSS operations X-Git-Tag: v2012.04-rc1~156^2^2~15 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=1176a7067a89e68bbb1872b234f67bd2f4651051;p=u-boot x86: Speed up copy-to-RAM and clear BSS operations The implementations of memcpy and memset are now the optimised versions from glibc, so use them instead of simple copy loops -- Changes for v2: - Removed unneeded brackets --- diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c index d742fec928..f9eb15bed3 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; - while (src_addr < end_addr) - *dst_addr++ = *src_addr++; + memcpy((void *)gd->relocaddr, (void *)&__text_start, len); return 0; } static int clear_bss(void) { - void *bss_start = &__bss_start; - void *bss_end = &__bss_end; + ulong dst_addr = (ulong)&__bss_start + gd->reloc_off; + size_t len = (size_t)&__bss_end - (size_t)&__bss_start; - ulong *dst_addr = (ulong *)(bss_start + gd->reloc_off); - ulong *end_addr = (ulong *)(bss_end + gd->reloc_off); - - while (dst_addr < end_addr) - *dst_addr++ = 0x00000000; + memset((void *)dst_addr, 0x00, len); return 0; }