1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include "sys.h"
- #include "picorv32.h"
- #define GP_IS_ZERO 1
- // The code in this file is sensitive to alignment, so
- // don't use compressed instructions (there are very few anyway)
- .option norvc
- // NULL pointer guard area
- // This needs to be an explicitly allocated section or the binary
- // memory initialization file ends up broken.
- //
- // This also contains a pointer to the ROM area associated
- // with this image. For a non-primary image it is patched to
- // the preferred value.
- .section ".null","a"
- .globl _NULL
- _NULL:
- .space 12
- .type _NULL, @object
- .size _NULL, . - _NULL
- .globl __rom_offset
- __rom_offset:
- .long ROM_OFFSET
- .type __rom_offset, @object
- .size __rom_offset, . - __rom_offset
- // The linker will always assign this to _PC_RESET
- .section ".init.reset","ax"
- .globl _reset
- _reset:
- rdtime s0 // Record timer at reset
- li sp,STACK_TOP // Cheaper than using la sp,___stack_top
- j __start
- .type _reset, @function
- .size _reset, . - _reset
- .section ".init","ax"
- .globl __start
- __start:
- not t0,zero
- maskirq zero,t0,zero
- #if !GP_IS_ZERO
- .option push
- .option norelax // Can't make gp references to set up gp...
- la gp, __global_pointer$
- .option pop
- #else
- // Zero gp (linker will usually replace with the zero reg)
- li gp,0
- #endif
- addqxi gp,gp,0 // Set gp for interrupt code too
- // Clear bss
- la a0,__BSS_START__
- la a1,__BSS_END__
- .L_clear_bss_loop:
- sw zero,(a0)
- sw zero,4(a0)
- sw zero,8(a0)
- sw zero,12(a0)
- sw zero,16(a0)
- sw zero,20(a0)
- sw zero,24(a0)
- sw zero,28(a0)
- addi a0,a0,32
- bltu a0,a1,.L_clear_bss_loop
- sw s0, time_zero, t0
- j main
- .type __start, @function
- .size __start, . - __start
- __sbss
- .balign 4
- .globl time_zero
- time_zero:
- .space 4
- .type time_zero, @object
- .size time_zero, . - time_zero
- .popsection
- .section ".stack","aw",@nobits
- .balign 4
- .globl ___stack_bottom
- ___stack:
- .space STACK_SIZE
- .type ___stack, @object
- .size ___stack, STACK_SIZE
- .globl ___stack_top
- ___stack_top:
|