summaryrefslogtreecommitdiffstats
path: root/bsps/v850/gdbv850sim/start/start.S
blob: 419e6353937ac444a1de624f12f5f7eb9a91e2e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# NEC V850 startup code

	.section .text
	.global	_start

_start:

#if defined(__v850e__) || defined(__v850e2__) || defined(__v850e2v3__)

	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    -16,		sp,	sp
	mov     0,		r6
	mov     0,		r7
	mov     0,		r8
	/* jarl    _main,		r31 */
	jarl    _boot_card,		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

	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    -16,		sp,	sp
	mov     0,		r6
	mov     0,		r7
	mov     0,		r8
	/* jarl    _main,		r31 */
	jarl    _boot_card,		r31
	mov     r10,		r6
.L2:
	br	.L2
	/* jarl    _exit,		r31 */
# endif

#if 0
	.section .stack
_stack:	.long 	1
#endif

	.section .data
	.global ___dso_handle
	.weak   ___dso_handle
___dso_handle:
	.long	0