From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17256 invoked by alias); 12 Oct 2007 15:32:02 -0000 Received: (qmail 17215 invoked by uid 22791); 12 Oct 2007 15:32:00 -0000 X-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,DK_POLICY_SIGNSOME,FORGED_RCVD_HELO,TW_DN,TW_LW,TW_PL,TW_SR,TW_WZ X-Spam-Check-By: sourceware.org Received: from 204-133-123-27.dia.static.slbbi.com (HELO mail.chez-thomas.org) (204.133.123.27) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 12 Oct 2007 15:31:57 +0000 Received: by mail.chez-thomas.org (Postfix, from userid 999) id A9FD91950237; Fri, 12 Oct 2007 09:31:55 -0600 (MDT) X-Spam-Checker-Version: SpamAssassin 3.1.9 (2007-02-13) on hermes.chez-thomas.org X-Spam-Level: Received: from [192.168.1.101] (hermes_local [192.168.1.101]) by mail.chez-thomas.org (Postfix) with ESMTP id 059D719500FE; Fri, 12 Oct 2007 09:31:53 -0600 (MDT) Message-ID: <470F9368.8080400@mlbassoc.com> Date: Fri, 12 Oct 2007 15:32:00 -0000 From: Gary Thomas User-Agent: Thunderbird 1.5.0.12 (X11/20070530) MIME-Version: 1.0 To: eCos patches Subject: PowerPC - optimize system initialization X-Enigmail-Version: 0.94.3.0 Content-Type: multipart/mixed; boundary="------------010609070806020906090705" X-Virus-Checked: Checked by ClamAV on sourceware.org Mailing-List: contact ecos-patches-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-patches-owner@ecos.sourceware.org X-SW-Source: 2007-10/txt/msg00010.txt.bz2 This is a multi-part message in MIME format. --------------010609070806020906090705 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 278 ... something I've thought about for a long time :-) -- ------------------------------------------------------------ Gary Thomas | Consulting for the MLB Associates | Embedded world ------------------------------------------------------------ --------------010609070806020906090705 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 4322 Index: hal/powerpc/arch/current/ChangeLog =================================================================== RCS file: /misc/cvsfiles/ecos/packages/hal/powerpc/arch/current/ChangeLog,v retrieving revision 1.69 diff -u -5 -p -r1.69 ChangeLog --- hal/powerpc/arch/current/ChangeLog 18 Apr 2006 22:29:39 -0000 1.69 +++ hal/powerpc/arch/current/ChangeLog 12 Oct 2007 15:29:51 -0000 @@ -1,5 +1,9 @@ +2007-10-12 Gary Thomas + + * src/vectors.S: Optimize system initialization of DATA/BSS/etc. + 2006-04-18 Gary Thomas * include/hal_arch.h: Adjust stack sizes - they were too small (on machines with FPU) and didn't account for stack checking. Index: hal/powerpc/arch/current/src/vectors.S =================================================================== RCS file: /misc/cvsfiles/ecos/packages/hal/powerpc/arch/current/src/vectors.S,v retrieving revision 1.32 diff -u -5 -p -r1.32 vectors.S --- hal/powerpc/arch/current/src/vectors.S 8 Dec 2003 14:26:03 -0000 1.32 +++ hal/powerpc/arch/current/src/vectors.S 12 Oct 2007 15:29:08 -0000 @@ -301,14 +301,16 @@ _hal_hardware_init_done: #if !defined(CYG_HAL_STARTUP_ROM) && defined(CYGSEM_HAL_POWERPC_COPY_VECTORS) lwi r3,rom_vectors-4 lwi r4,((CYGHWR_HAL_POWERPC_VECTOR_BASE)-4) lwi r5,rom_vectors_end-4 + sub r5,r5,r3 # compute number of words to copy + srwi r5,r5,2 + mtctr r5 0: lwzu r0,4(r3) stwu r0,4(r4) - cmplw r3,r5 - bne 0b + bdnz 0b #endif # set up stack lwi sp,__interrupt_stack mtspr SPRG0,sp # save in sprg0 for later use @@ -316,52 +318,55 @@ _hal_hardware_init_done: # Set up exception handlers and VSR table, taking care not to # step on any ROM monitor''s toes. hal_mon_init #if defined(CYG_HAL_STARTUP_ROM) - # Copy data from ROM to ram lwi r3,__rom_data_start # r3 = rom start lwi r4,__ram_data_start # r4 = ram start lwi r5,__ram_data_end # r5 = ram end cmplw r4,r5 # skip if no data beq 2f - -1: - lwz r0,0(r3) # get word from ROM - stw r0,0(r4) # store in RAM - addi r3,r3,4 # increment by 1 word - addi r4,r4,4 # increment by 1 word - cmplw r4,r5 # compare - blt 1b # loop if not yet done + sub r5,r5,r4 # compute number of words to copy + srwi r5,r5,2 + mtctr r5 + subi r3,r3,4 + subi r4,r4,4 +1: lwzu r0,4(r3) # get word from ROM + stwu r0,4(r4) # store in RAM + bdnz 1b 2: #endif # clear BSS lwi r3,__bss_start # r3 = start lwi r4,__bss_end # r4 = end li r0,0 # r0 = 0 cmplw r3,r4 # skip if no bss beq 2f + sub r4,r4,r3 # compute number of words to clear + srwi r4,r4,2 + mtctr r4 + subi r3,r3,4 -1: stw r0,0(r3) # store zero - addi r3,r3,4 # increment by 1 word - cmplw r3,r4 # compare - blt 1b # loop if not yet done +1: stwu r0,4(r3) # store zero & increment pointer + bdnz 1b 2: # clear SBSS lwi r3,__sbss_start # r3 = start lwi r4,__sbss_end # r4 = end cmplw r3,r4 # skip if no sbss beq 2f + sub r4,r4,r3 # compute number of words to clear + srwi r4,r4,2 + mtctr r4 + subi r3,r3,4 -1: stw r0,0(r3) # store zero - addi r3,r3,4 # increment by 1 word - cmplw r3,r4 # compare - blt 1b # loop if not yet done +1: stwu r0,4(r3) # store zero & increment pointer + bdnz 1b 2: # It is now safe to call C functions which may rely on initialized # data. --------------010609070806020906090705--