1 |
584 |
jeremybenn |
###################################-*-asm*-
|
2 |
|
|
#
|
3 |
|
|
# Copyright (c) 2001 Xilinx, Inc. All rights reserved.
|
4 |
|
|
#
|
5 |
|
|
# Xilinx, Inc. CONFIDENTIAL
|
6 |
|
|
#
|
7 |
|
|
# XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
|
8 |
|
|
# COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
|
9 |
|
|
# ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
|
10 |
|
|
# STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
|
11 |
|
|
# IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
|
12 |
|
|
# FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
|
13 |
|
|
# XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
|
14 |
|
|
# THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
|
15 |
|
|
# ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
|
16 |
|
|
# FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
|
17 |
|
|
# AND FITNESS FOR A PARTICULAR PURPOSE.
|
18 |
|
|
#
|
19 |
|
|
# crt0.s
|
20 |
|
|
#
|
21 |
|
|
# C RunTime:
|
22 |
|
|
# Used for initialization of small data
|
23 |
|
|
# anchors and stack for programs compiled using
|
24 |
|
|
# Xilinx Gnu Tools. This routine also intializes the
|
25 |
|
|
# exception and interrupt handlers
|
26 |
|
|
#
|
27 |
|
|
# $Id: crt0.s 2 2011-07-17 20:13:17Z filepang@gmail.com $
|
28 |
|
|
#
|
29 |
|
|
#######################################
|
30 |
|
|
|
31 |
|
|
/* Vector map (Interrupts, Exceptions, Breakpoints) */
|
32 |
|
|
# # 0x00 # Jump to Start
|
33 |
|
|
# # 0x04 # nop
|
34 |
|
|
# # 0x08 # Imm instr for soft exception address [Hi halfword]
|
35 |
|
|
# # 0x0c # Jump to sof Exception handler [Lo halfword]
|
36 |
|
|
# # 0x10 # Imm instr for interrupt address [Hi halfword]
|
37 |
|
|
# # 0x14 # Jump to interrupt handler [Lo halfword]
|
38 |
|
|
# # 0x18 # nop - Reserved for breakpoint vector
|
39 |
|
|
# # 0x1C # nop - Reserved for breakpoint vector
|
40 |
|
|
# # 0x20 # Imm instr for hw exception address [Hi halfword]
|
41 |
|
|
# # 0x24 # Jump instr to hw exception handler [Lo halfword]
|
42 |
|
|
|
43 |
|
|
.globl _start
|
44 |
|
|
|
45 |
|
|
/* Set the exception and interrupt address vectors */
|
46 |
|
|
/* to jump to the appropriate handlers */
|
47 |
|
|
|
48 |
|
|
.align 2
|
49 |
|
|
.ent _start
|
50 |
|
|
_start:
|
51 |
|
|
bri _start1 # 0x00
|
52 |
|
|
nop # 0x04
|
53 |
|
|
nop # 0x08 # Reserve space for software exception vector
|
54 |
|
|
nop # 0x0c
|
55 |
|
|
nop # 0x10 # Reserve space for interrupt vector
|
56 |
|
|
nop # 0x14
|
57 |
|
|
nop # 0x18 # Reserve space for breakpoint vector
|
58 |
|
|
nop # 0x1c
|
59 |
|
|
nop # 0x18 # Reserve space for hw exception vector
|
60 |
|
|
nop # 0x1c
|
61 |
|
|
|
62 |
|
|
_start1:
|
63 |
|
|
/* Set the Small Data Anchors and the Stack pointer */
|
64 |
|
|
la r13, r0, _SDA_BASE_
|
65 |
|
|
la r2, r0, _SDA2_BASE_
|
66 |
|
|
la r1, r0, _stack-16 # 16 bytes (4 words are needed by
|
67 |
|
|
# crt for args and link reg )
|
68 |
|
|
|
69 |
|
|
/* Set the opcodes brai and imm for handlers */
|
70 |
|
|
la r6,r0,0xb8080000 # [opcode for brai ]
|
71 |
|
|
swi r6,r0,0x4 # [brai opcode for reset]
|
72 |
|
|
swi r6,r0,0xc # [brai opcode for exception]
|
73 |
|
|
swi r6,r0,0x14 # [brai opcode for interrupt]
|
74 |
|
|
swi r6,r0,0x24 # [brai opcode for hw exceptions]
|
75 |
|
|
|
76 |
|
|
la r6,r0,0xb0000000 # [opcode for imm ]
|
77 |
|
|
swi r6,r0,0x0 # [imm opcode for reset]
|
78 |
|
|
swi r6,r0,0x8 # [imm opcode for exception]
|
79 |
|
|
swi r6,r0,0x10 # [imm opocde for interrupt]
|
80 |
|
|
swi r6,r0,0x20 # [imm opocde for hw exceptions]
|
81 |
|
|
|
82 |
|
|
/* Set Reset vector */
|
83 |
|
|
la r6,r0,_start1
|
84 |
|
|
sw r6,r1,r0
|
85 |
|
|
lhu r7,r1,r0
|
86 |
|
|
shi r7,r0, 0x2 # [imm for reset]
|
87 |
|
|
shi r6,r0, 0x6 # [lower half for reset]
|
88 |
|
|
|
89 |
|
|
/* Set Software Exception Handler */
|
90 |
|
|
la r6,r0,_exception_handler
|
91 |
|
|
sw r6,r1,r0
|
92 |
|
|
lhu r7,r1,r0
|
93 |
|
|
shi r7,r0, 0xa # [imm for exception]
|
94 |
|
|
shi r6,r0, 0xe # [lower half for exception ]
|
95 |
|
|
|
96 |
|
|
/* Set Interrupt Handler */
|
97 |
|
|
la r6,r0,_interrupt_handler
|
98 |
|
|
sw r6,r1,r0
|
99 |
|
|
lhu r7,r1,r0
|
100 |
|
|
shi r7,r0, 0x12 # [imm for exception]
|
101 |
|
|
shi r6,r0, 0x16 # [lower half for intterupt ]
|
102 |
|
|
|
103 |
|
|
/* Set HW Exception Handler */
|
104 |
|
|
la r6,r0,_hw_exception_handler
|
105 |
|
|
sw r6,r1,r0
|
106 |
|
|
lhu r7,r1,r0
|
107 |
|
|
shi r7,r0, 0x22 # [imm for exception]
|
108 |
|
|
shi r6,r0, 0x26 # [lower half for hw exception]
|
109 |
|
|
|
110 |
|
|
/* initialize bss sections */
|
111 |
|
|
brlid r15,_crtinit
|
112 |
|
|
nop
|
113 |
|
|
|
114 |
|
|
/* Adjust the stack pointer */
|
115 |
|
|
addi r1,r1,16
|
116 |
|
|
|
117 |
|
|
/* Fall through to exit */
|
118 |
|
|
.end _start
|
119 |
|
|
|
120 |
|
|
/* Use this exit function */
|
121 |
|
|
.globl exit # exit library call
|
122 |
|
|
.ent exit
|
123 |
|
|
exit:
|
124 |
|
|
bri exit
|
125 |
|
|
.end exit
|
126 |
|
|
|