1 /*******************************************************************************
\r
2 * (c) Copyright 2016-2018 Microsemi SoC Products Group. All rights reserved.
\r
5 * @author Microsemi SoC Products Group
\r
6 * @brief Mi-V soft processor vectors, trap handling and startup code.
\r
8 * SVN $Revision: 9947 $
\r
9 * SVN $Date: 2018-04-30 20:28:49 +0530 (Mon, 30 Apr 2018) $
\r
14 #include "encoding.h"
\r
16 #if __riscv_xlen == 64
\r
26 .section .text.entry
\r
44 /*Floating point support configuration*/
\r
60 # Ensure the instruction is not optimized, since gp is not yet set
\r
63 # initialize global pointer
\r
64 la gp, __global_pointer$
\r
68 # initialize stack pointer
\r
71 # perform the rest of initialization in C
\r
76 addi sp, sp, -32*REGBYTES
\r
78 SREG x1, 0 * REGBYTES(sp)
\r
79 SREG x2, 1 * REGBYTES(sp)
\r
80 SREG x3, 2 * REGBYTES(sp)
\r
81 SREG x4, 3 * REGBYTES(sp)
\r
82 SREG x5, 4 * REGBYTES(sp)
\r
83 SREG x6, 5 * REGBYTES(sp)
\r
84 SREG x7, 6 * REGBYTES(sp)
\r
85 SREG x8, 7 * REGBYTES(sp)
\r
86 SREG x9, 8 * REGBYTES(sp)
\r
87 SREG x10, 9 * REGBYTES(sp)
\r
88 SREG x11, 10 * REGBYTES(sp)
\r
89 SREG x12, 11 * REGBYTES(sp)
\r
90 SREG x13, 12 * REGBYTES(sp)
\r
91 SREG x14, 13 * REGBYTES(sp)
\r
92 SREG x15, 14 * REGBYTES(sp)
\r
93 SREG x16, 15 * REGBYTES(sp)
\r
94 SREG x17, 16 * REGBYTES(sp)
\r
95 SREG x18, 17 * REGBYTES(sp)
\r
96 SREG x19, 18 * REGBYTES(sp)
\r
97 SREG x20, 19 * REGBYTES(sp)
\r
98 SREG x21, 20 * REGBYTES(sp)
\r
99 SREG x22, 21 * REGBYTES(sp)
\r
100 SREG x23, 22 * REGBYTES(sp)
\r
101 SREG x24, 23 * REGBYTES(sp)
\r
102 SREG x25, 24 * REGBYTES(sp)
\r
103 SREG x26, 25 * REGBYTES(sp)
\r
104 SREG x27, 26 * REGBYTES(sp)
\r
105 SREG x28, 27 * REGBYTES(sp)
\r
106 SREG x29, 28 * REGBYTES(sp)
\r
107 SREG x30, 29 * REGBYTES(sp)
\r
108 SREG x31, 30 * REGBYTES(sp)
\r
112 SREG t0, 31 * REGBYTES(sp)
\r
120 # Remain in M-mode after mret
\r
124 LREG x1, 0 * REGBYTES(sp)
\r
125 LREG x2, 1 * REGBYTES(sp)
\r
126 LREG x3, 2 * REGBYTES(sp)
\r
127 LREG x4, 3 * REGBYTES(sp)
\r
128 LREG x5, 4 * REGBYTES(sp)
\r
129 LREG x6, 5 * REGBYTES(sp)
\r
130 LREG x7, 6 * REGBYTES(sp)
\r
131 LREG x8, 7 * REGBYTES(sp)
\r
132 LREG x9, 8 * REGBYTES(sp)
\r
133 LREG x10, 9 * REGBYTES(sp)
\r
134 LREG x11, 10 * REGBYTES(sp)
\r
135 LREG x12, 11 * REGBYTES(sp)
\r
136 LREG x13, 12 * REGBYTES(sp)
\r
137 LREG x14, 13 * REGBYTES(sp)
\r
138 LREG x15, 14 * REGBYTES(sp)
\r
139 LREG x16, 15 * REGBYTES(sp)
\r
140 LREG x17, 16 * REGBYTES(sp)
\r
141 LREG x18, 17 * REGBYTES(sp)
\r
142 LREG x19, 18 * REGBYTES(sp)
\r
143 LREG x20, 19 * REGBYTES(sp)
\r
144 LREG x21, 20 * REGBYTES(sp)
\r
145 LREG x22, 21 * REGBYTES(sp)
\r
146 LREG x23, 22 * REGBYTES(sp)
\r
147 LREG x24, 23 * REGBYTES(sp)
\r
148 LREG x25, 24 * REGBYTES(sp)
\r
149 LREG x26, 25 * REGBYTES(sp)
\r
150 LREG x27, 26 * REGBYTES(sp)
\r
151 LREG x28, 27 * REGBYTES(sp)
\r
152 LREG x29, 28 * REGBYTES(sp)
\r
153 LREG x30, 29 * REGBYTES(sp)
\r
154 LREG x31, 30 * REGBYTES(sp)
\r
156 addi sp, sp, 32*REGBYTES
\r