OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [newlib-1.17.0/] [libgloss/] [xstormy16/] [crt0.s] - Blame information for rev 831

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 148 jeremybenn
# XSTORMY16 startup code
2
 
3
# Interrupt vectors at 0x8000.
4
        .section .int_vec,"ax"
5
        .global _start
6
        .align 1
7
_start:
8
        ;; Reset, watchdog timer interrupt
9
        jmpf _int_reset
10
        ;; base timer interrupt
11
        jmpf _int_basetimer
12
        ;; timer 0
13
        jmpf _int_timer0
14
        ;; timer 1
15
        jmpf _int_timer1
16
        ;; SIO0 interrupt
17
        jmpf _int_sio0
18
        ;; SIO1 interrupt
19
        jmpf _int_sio1
20
        ;; port0 interrupt
21
        jmpf _int_port0
22
        ;; port1 interrupt
23
        jmpf _int_port1
24
 
25
# Reset code, set up memory and call main.
26
        .section        .rodata
27
2:      .word   __rdata
28
        .text
29
_int_reset:
30
        ;; Set up the stack pointer.
31
        mov r0,#__stack
32
        bz  r0,#0,0f
33
        mov sp,r0
34
0:
35
        ;; Zero the data space
36
        mov r0,#_edata
37
        mov r1,#_end
38
        mov r2,#0
39
0:       mov.w (r0++),r2
40
        blt r0,r1,0b
41
 
42
        ;; Copy data from ROM into RAM.  ROM area may be above 64k,
43
        ;; but RAM may not.
44
        mov r1,#__data
45
        mov r3,#_edata
46
        mov r4,#2b
47
        mov.w r0,(r4++)
48
        mov.w r2,(r4)
49
        mov r8,r2
50
        ;; If _data == _rdata there's no need to copy anything.
51
        bnz r0,r1,0f
52
        bz r2,#0,1f
53
0:       movf.w r2,(r0++)
54
        bnz r0,#0,2f
55
        add r8,#1
56
2:      mov.w (r1++),r2
57
        blt r1,r3,0b
58
1:
59
        ;; Call hardware init routine
60
        callf _hwinit
61
        ;; Call initialization routines
62
        callf _init
63
        ;; Set up fini routines to be called from exit
64
        mov r2,#@fptr(_fini)
65
        callf atexit
66
        ;; Call main() with empty argc/argv/envp
67
        mov r2,#0
68
        mov r3,#0
69
        mov r4,#0
70
        callf main
71
        ;; Exit.
72
        callf exit
73
        ;; Should never reach this code.
74
        halt
75
1:      .size _int_reset,1b-_int_reset
76
 
77
# Stub interrupt routines.
78
        .globl _int_timer0
79
        .weak _int_timer0
80
        .globl _int_timer1
81
        .weak _int_timer1
82
        .globl _int_sio0
83
        .weak _int_sio0
84
        .globl _int_sio1
85
        .weak _int_sio1
86
        .globl _int_port0
87
        .weak _int_port0
88
        .globl _int_port1
89
        .weak _int_port1
90
        .globl _int_basetimer
91
        .weak _int_basetimer
92
_int_timer0:
93
_int_timer1:
94
_int_sio0:
95
_int_sio1:
96
_int_port0:
97
_int_port1:
98
_int_basetimer:
99
        iret
100
1:      .size _int_timer0,1b-_int_timer0
101
 
102
# Stub hardware init
103
        .globl _hwinit
104
        .weak _hwinit
105
_hwinit:
106
        ret
107
1:      .size _int_hwinit,1b-_int_hwinit
108
 
109
# The first word in .data has address 0, so it's not a good
110
# idea to use it as its address conflicts with NULL.
111
# Place a HALT instruction there to try to catch NULL pointer
112
# dereferences.
113
        .data
114
        halt

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.