ibex_demo/startup.s

103 lines
1.5 KiB
ArmAsm

.section .text
.global Reset_Handler
Reset_Handler:
mv x1, x0
mv x2, x1
mv x3, x1
mv x4, x1
mv x5, x1
mv x6, x1
mv x7, x1
mv x8, x1
mv x9, x1
mv x10, x1
mv x11, x1
mv x12, x1
mv x13, x1
mv x14, x1
mv x15, x1
mv x16, x1
mv x17, x1
mv x18, x1
mv x19, x1
mv x20, x1
mv x21, x1
mv x22, x1
mv x23, x1
mv x24, x1
mv x25, x1
mv x26, x1
mv x27, x1
mv x28, x1
mv x29, x1
mv x30, x1
mv x31, x1
.option push
.option norelax
la gp, __global_pointer$
.option pop
la sp, _estack
la x25, _sidata
la x26, _sdata
la x27, _edata
bge x26, x27, copy_data_end
copy_data:
lw x24, 0(x25)
sw x24, 0(x26)
addi x25, x25, 4
addi x26, x26, 4
blt x26, x27, copy_data
copy_data_end:
/* Zero .bss section */
la x26, _sbss
la x27, _ebss
bge x26, x27, zero_bss_end
zero_bss:
sw x0, 0(x26)
addi x26, x26, 4
blt x26, x27, zero_bss
zero_bss_end:
jal x1, System_Init
addi x10, x0, 0
addi x11, x0, 0
jal x1, main
inf_loop:
jal x0, inf_loop
Default_IRQHandler:
jal x0, Generic_ExceptionCallback
Timer_IRQHandler:
jal x0, Generic_TimerCallback
/* ISR vector table */
.section .isr_vectors, "ax"
.option norvc;
.org 0x00
.rept 7
jal x0, Default_IRQHandler
.endr
jal x0, Timer_IRQHandler
.rept 23
jal x0, Default_IRQHandler
.endr
.org 0x80
jal x0, Reset_Handler