78 lines
1.5 KiB
ArmAsm
78 lines
1.5 KiB
ArmAsm
# NEC V850 startup code
|
|
|
|
.section .text
|
|
.global _start
|
|
|
|
_start:
|
|
|
|
#if defined __v850e__ || defined __v850ea__
|
|
|
|
movea 255, r0, r20
|
|
mov 65535, r21
|
|
mov hilo(_stack), sp
|
|
mov hilo(__ep), ep
|
|
mov hilo(__gp), gp
|
|
mov hilo(__ctbp), r6
|
|
ldsr r6, ctbp
|
|
mov hilo(_edata), r6
|
|
mov hilo(_end), r7
|
|
.L0:
|
|
st.w r0, 0[r6]
|
|
addi 4, r6, r6
|
|
cmp r7, r6
|
|
bl .L0
|
|
.L1:
|
|
jarl ___main, r31
|
|
addi -12, sp, sp
|
|
mov 0, r6
|
|
mov 0, r7
|
|
mov 0, r8
|
|
jarl _main, r31
|
|
mov r10, r6
|
|
jarl _exit, r31
|
|
|
|
# else
|
|
movea 255, r0, r20
|
|
mov r0, r21
|
|
ori 65535, r0, r21
|
|
movhi hi(_stack), r0, sp
|
|
movea lo(_stack), sp, sp
|
|
movhi hi(__ep), r0, ep
|
|
movea lo(__ep), ep, ep
|
|
movhi hi(__gp), r0, gp
|
|
movea lo(__gp), gp, gp
|
|
|
|
/* Initialise the call table base pointer.
|
|
We do this even though we are supposedly
|
|
assembling this file for the v850 as this
|
|
allows us to use the same binary for all
|
|
versions of the v850 architecture. */
|
|
|
|
movhi hi(__ctbp), r0, r6
|
|
movea lo(__ctbp), r6, r6
|
|
ldsr r6, ctbp
|
|
|
|
movhi hi(_edata), r0, r6
|
|
movea lo(_edata), r6, r6
|
|
movhi hi(_end), r0, r7
|
|
movea lo(_end), r7, r7
|
|
.L0:
|
|
st.b r0, 0[r6]
|
|
addi 1, r6, r6
|
|
cmp r7, r6
|
|
bl .L0
|
|
.L1:
|
|
jarl ___main, r31
|
|
addi -12, sp, sp
|
|
mov 0, r6
|
|
mov 0, r7
|
|
mov 0, r8
|
|
jarl _main, r31
|
|
mov r10, r6
|
|
jarl _exit, r31
|
|
|
|
# endif
|
|
|
|
.section .stack
|
|
_stack: .long 1
|