]> sourceware.org Git - newlib-cygwin.git/commitdiff
2014-11-26 Matthew Fortune <Matthew.Fortune@imgtec.com>
authorJeff Johnston <jjohnstn@redhat.com>
Thu, 27 Nov 2014 00:28:09 +0000 (00:28 +0000)
committerJeff Johnston <jjohnstn@redhat.com>
Thu, 27 Nov 2014 00:28:09 +0000 (00:28 +0000)
        * mips/crt0.S: Remove .set noreorder throughout.
        (zerobss): Open code the bltu macro instruction so that the
        zero-loop does not have a NOP in the branch delay slot.

libgloss/ChangeLog
libgloss/mips/crt0.S

index 0caaa2d737d5a642be638e2784c76445071e5272..f4d5fd4861397d68372fa82bfe7e739023c2de8d 100644 (file)
@@ -1,3 +1,9 @@
+2014-11-26  Matthew Fortune  <Matthew.Fortune@imgtec.com>
+
+       * mips/crt0.S: Remove .set noreorder throughout.
+       (zerobss): Open code the bltu macro instruction so that the
+       zero-loop does not have a NOP in the branch delay slot.
+
 2014-11-13  Nick Clifton  <nickc@redhat.com>
 
        * msp430/Makefile.in (CRT_OBJS): Add crt_high_bss.o.
index 599e79c60e0063b898626e3ceea9d342dd140212..f66ef1bc3655760183f8b6049b982abcf9f55d84 100644 (file)
        .globl  _start
        .ent    _start
 _start:
-       .set    noreorder
 #ifdef __mips_embedded_pic
 #define PICBASE start_PICBASE
+       .set    noreorder
        PICBASE = .+8
         bal    PICBASE
        nop
        move    s0,$31
+       .set    reorder
 #endif
 #if __mips<3
 #  define STATUS_MASK (SR_CU1|SR_PE)
@@ -89,9 +90,7 @@ _start:
        /* Avoid hazard from FPU enable and other SR changes.  */
        LA (t0, hardware_hazard_hook)
        beq     t0,zero,1f
-       nop
-       jal     t0
-       nop
+       jalr    t0
 1:
 
 /* Check for FPU presence.  Don't check if we know that soft_float is
@@ -105,11 +104,8 @@ _start:
        mfc1    t1,fp1
        nop
        bne     t0,t2,1f        /* check for match */
-       nop
        bne     t1,zero,1f      /* double check */
-       nop
        j       2f              /* FPU is present. */
-       nop
 #endif
 1:
        /* FPU is not present.  Set status register to say that. */
@@ -119,9 +115,7 @@ _start:
        /* Avoid hazard from FPU disable.  */
        LA (t0, hardware_hazard_hook)
        beq     t0,zero,2f
-       nop
-       jal     t0
-       nop
+       jalr    t0
 2:
 
 
@@ -129,7 +123,6 @@ _start:
    doesn't get confused.  */
        LA (v0, 3f)
        jr      v0
-       nop
 3:
        LA (gp, _gp)                            # set the global data pointer
        .end _start
@@ -145,21 +138,20 @@ _start:
 zerobss:
        LA (v0, _fbss)
        LA (v1, _end)
-3:
-       sw      zero,0(v0)
-       bltu    v0,v1,3b
-       addiu   v0,v0,4                         # executed in delay slot
-
+       beq     v0,v1,2f
+1:
+       addiu   v0,v0,4
+       sw      zero,-4(v0)
+       bne     v0,v1,1b
+2:
        la      t0, __lstack                    # make a small stack so we
        addiu   sp, t0, STARTUP_STACK_SIZE      # can run some C code
        la      a0, __memsize                   # get the usable memory size
        jal     get_mem_info
-       nop
 
        /* setup the stack pointer */
        LA (t0, __stack)                        # is __stack set ?
        bne     t0,zero,4f
-       nop
 
        /* NOTE: a0[0] contains the amount of memory available, and
                 not the last memory address. */
@@ -189,19 +181,14 @@ zerobss:
 init:
        LA (t9, hardware_init_hook)             # init the hardware if needed
        beq     t9,zero,6f
-       nop
-       jal     t9
-       nop
+       jalr    t9
 6:
        LA (t9, software_init_hook)             # init the hardware if needed
        beq     t9,zero,7f
-       nop
-       jal     t9
-       nop
+       jalr    t9
 7:
        LA (a0, _fini)
        jal     atexit
-       nop
 
 #ifdef GCRT0
        .globl  _ftext
@@ -209,12 +196,10 @@ init:
        LA (a0, _ftext)
        LA (a1, _etext)
        jal     monstartup
-       nop
 #endif
 
 
        jal     _init                           # run global constructors
-       nop
 
        addiu   a1,sp,32                        # argv = sp + 32
        addiu   a2,sp,40                        # envp = sp + 40
@@ -225,13 +210,13 @@ init:
        sw      zero,(a1)
        sw      zero,(a2)
 #endif
-       jal     main                            # call the program start function
        move    a0,zero                         # set argc to 0
+       jal     main                            # call the program start function
 
        # fall through to the "exit" routine
+       move    a0,v0                           # pass through the exit code
        jal     exit                            # call libc exit to run the G++
                                                # destructors
-       move    a0,v0                           # pass through the exit code
        .end    init
 
  
@@ -257,27 +242,25 @@ _exit:
        /* Need to reinit PICBASE, since we might be called via exit()
           rather than via a return path which would restore old s0.  */
 #define PICBASE exit_PICBASE
+       .set    noreorder
        PICBASE = .+8
        bal     PICBASE
        nop
        move    s0,$31
+       .set    reorder
 #endif
 #ifdef GCRT0
        LA (t0, _mcleanup)
-       jal     t0
-       nop
+       jalr    t0
 #endif
        LA (t0, hardware_exit_hook)
        beq     t0,zero,1f
-       nop
-       jal     t0
-       nop
+       jalr    t0
 1:
 
        # break instruction can cope with 0xfffff, but GAS limits the range:
        break   1023
        b       7b                              # but loop back just in-case
-       nop
        .end _exit
  
 /* Assume the PICBASE set up above is no longer valid below here.  */
This page took 0.043443 seconds and 5 git commands to generate.