NextVOD_Baremetal_Hello/startup_stx7105.S

68 lines
1.1 KiB
ArmAsm
Raw Normal View History

2022-06-21 15:16:14 +00:00
.section .text.init, "ax"
.global _start
2022-06-21 01:28:16 +00:00
_start:
nop
2022-06-21 15:16:14 +00:00
nop
mov.l stack_k, sp /* Setup R15(SP) */
copy_data:
mov.l sidata_k, r0
mov.l sdata_k, r1
mov.l edata_k, r2
loop_copy_data:
mov.l @r0+, r3 /* Load a word to r3 from [sidata], with post-increment of 4 */
mov.l r3, @r1 /* Store the word in r3 to [sdata] */
add #4, r1 /* Increment sdata pointer */
cmp/ge r1, r2
bt loop_copy_data
zero_bss:
mov.l edata_k, r0
mov.l end_k, r1
mov #0, r2
loop_zero_bss:
mov.l r2, @r0
add #4, r0
cmp/ge r0, r1
bt loop_zero_bss
setup_fpu:
mov.l set_fpscr_k, r1
jsr @r1
mov #0, r4
lds r3, fpscr
mov.l main_k,r0
jsr @r0
or r0, r0
mov r0, r4
mov.l exit_k, r0
jsr @r0
or r0, r0
/* It would be more efficient by using indirect addressing instead of 8 instructions... */
.align 2
set_fpscr_k:
.long ___set_fpscr
stack_k:
.long _stack
sidata_k:
.long _sidata
sdata_k:
.long _sdata
edata_k:
.long _edata
end_k:
.long _end
main_k:
.long _main /* Same address as main */
exit_k:
.long _exit