OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [m32r/] [crt0.S] - Diff between revs 57 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 57 Rev 1765
        .text
        .text
        .balign 4
        .balign 4
        .global _start
        .global _start
_start:
_start:
        ld24    sp, _stack
        ld24    sp, _stack
        ldi     fp, #0
        ldi     fp, #0
# Clear the BSS.  Do it in two parts for efficiency: longwords first
# Clear the BSS.  Do it in two parts for efficiency: longwords first
# for most of it, then the remaining 0 to 3 bytes.
# for most of it, then the remaining 0 to 3 bytes.
        seth    r2, #shigh(__bss_start)
        seth    r2, #shigh(__bss_start)
        add3    r2, r2, #low(__bss_start); R2 = start of BSS
        add3    r2, r2, #low(__bss_start); R2 = start of BSS
        seth    r3, #shigh(_end)
        seth    r3, #shigh(_end)
        add3    r3, r3, #low(_end)      ; R3 = end of BSS + 1
        add3    r3, r3, #low(_end)      ; R3 = end of BSS + 1
        sub     r3, r2          ; R3 = BSS size in bytes
        sub     r3, r2          ; R3 = BSS size in bytes
        mv      r4, r3
        mv      r4, r3
        srli    r4, #2          ; R4 = BSS size in longwords (rounded down)
        srli    r4, #2          ; R4 = BSS size in longwords (rounded down)
        ldi     r1, #0          ; clear R1 for longword store
        ldi     r1, #0          ; clear R1 for longword store
        addi    r2, #-4         ; account for pre-inc store
        addi    r2, #-4         ; account for pre-inc store
        beqz    r4, .Lendloop1  ; any more to go?
        beqz    r4, .Lendloop1  ; any more to go?
.Lloop1:
.Lloop1:
        st      r1, @+r2        ; yep, zero out another longword
        st      r1, @+r2        ; yep, zero out another longword
        addi    r4, #-1         ; decrement count
        addi    r4, #-1         ; decrement count
        bnez    r4, .Lloop1     ; go do some more
        bnez    r4, .Lloop1     ; go do some more
.Lendloop1:
.Lendloop1:
        and3    r4, r3, #3      ; get no. of remaining BSS bytes to clear
        and3    r4, r3, #3      ; get no. of remaining BSS bytes to clear
        addi    r2, #4          ; account for pre-inc store
        addi    r2, #4          ; account for pre-inc store
        beqz    r4, .Lendloop2  ; any more to go?
        beqz    r4, .Lendloop2  ; any more to go?
.Lloop2:
.Lloop2:
        stb     r1, @r2         ; yep, zero out another byte
        stb     r1, @r2         ; yep, zero out another byte
        addi    r2, #1          ; bump address
        addi    r2, #1          ; bump address
        addi    r4, #-1         ; decrement count
        addi    r4, #-1         ; decrement count
        bnez    r4, .Lloop2     ; go do some more
        bnez    r4, .Lloop2     ; go do some more
.Lendloop2:
.Lendloop2:
# Run code in the .init section.
# Run code in the .init section.
# This will queue the .fini section to be run with atexit.
# This will queue the .fini section to be run with atexit.
        bl      __init
        bl      __init
# Call main, then exit.
# Call main, then exit.
        bl      main
        bl      main
        bl      exit
        bl      exit
# If that fails just loop.
# If that fails just loop.
.Lexit:
.Lexit:
        bra     .Lexit
        bra     .Lexit
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.