@@ -60,7 +60,7 @@ _start:
60
60
csrw mtvec, a0
61
61
62
62
/* Setup int vectors */
63
- la a0, vectors
63
+ la a0, irq_handler
64
64
csrw mtvt, a0
65
65
66
66
/* Setup stack */
@@ -168,4 +168,90 @@ vectors:
168
168
LREG x30, 30 * REGSZ(a0)
169
169
LREG x31, 31 * REGSZ(a0)
170
170
LREG x10, 10 * REGSZ(a0)
171
- mret
171
+ mret
172
+
173
+ /*
174
+ * IRQ vectors.
175
+ */
176
+ .align 6
177
+ .globl irq_handler
178
+ irq_handler:
179
+ csrw mscratch, sp
180
+ addi sp, sp, -(37 * REGSZ)
181
+ SREG x1, 1 * REGSZ(x2)
182
+ SREG x3, 3 * REGSZ(x2)
183
+ SREG x4, 4 * REGSZ(x2)
184
+ SREG x5, 5 * REGSZ(x2)
185
+ SREG x6, 6 * REGSZ(x2)
186
+ SREG x7, 7 * REGSZ(x2)
187
+ SREG x8, 8 * REGSZ(x2)
188
+ SREG x9, 9 * REGSZ(x2)
189
+ SREG x10, 10 * REGSZ(x2)
190
+ SREG x11, 11 * REGSZ(x2)
191
+ SREG x12, 12 * REGSZ(x2)
192
+ SREG x13, 13 * REGSZ(x2)
193
+ SREG x14, 14 * REGSZ(x2)
194
+ SREG x15, 15 * REGSZ(x2)
195
+ SREG x16, 16 * REGSZ(x2)
196
+ SREG x17, 17 * REGSZ(x2)
197
+ SREG x18, 18 * REGSZ(x2)
198
+ SREG x19, 19 * REGSZ(x2)
199
+ SREG x20, 20 * REGSZ(x2)
200
+ SREG x21, 21 * REGSZ(x2)
201
+ SREG x22, 22 * REGSZ(x2)
202
+ SREG x23, 23 * REGSZ(x2)
203
+ SREG x24, 24 * REGSZ(x2)
204
+ SREG x25, 25 * REGSZ(x2)
205
+ SREG x26, 26 * REGSZ(x2)
206
+ SREG x27, 27 * REGSZ(x2)
207
+ SREG x28, 28 * REGSZ(x2)
208
+ SREG x29, 29 * REGSZ(x2)
209
+ SREG x30, 30 * REGSZ(x2)
210
+ SREG x31, 31 * REGSZ(x2)
211
+ csrrw t0, mscratch, x0
212
+ csrr s0, mstatus
213
+ csrr t1, mepc
214
+ csrr t2, mbadaddr
215
+ csrr t3, mcause
216
+ SREG t0, 2 * REGSZ(x2)
217
+ SREG s0, 32 * REGSZ(x2)
218
+ SREG t1, 33 * REGSZ(x2)
219
+ SREG t2, 34 * REGSZ(x2)
220
+ SREG t3, 35 * REGSZ(x2)
221
+ li x5, -1
222
+ SREG x5, 36 * REGSZ(x2)
223
+ move a0, sp
224
+ jal riscv_handle_exception
225
+ csrr a0, mscratch
226
+ LREG x1, 1 * REGSZ(a0)
227
+ LREG x2, 2 * REGSZ(a0)
228
+ LREG x3, 3 * REGSZ(a0)
229
+ LREG x4, 4 * REGSZ(a0)
230
+ LREG x5, 5 * REGSZ(a0)
231
+ LREG x6, 6 * REGSZ(a0)
232
+ LREG x7, 7 * REGSZ(a0)
233
+ LREG x8, 8 * REGSZ(a0)
234
+ LREG x9, 9 * REGSZ(a0)
235
+ LREG x11, 11 * REGSZ(a0)
236
+ LREG x12, 12 * REGSZ(a0)
237
+ LREG x13, 13 * REGSZ(a0)
238
+ LREG x14, 14 * REGSZ(a0)
239
+ LREG x15, 15 * REGSZ(a0)
240
+ LREG x16, 16 * REGSZ(a0)
241
+ LREG x17, 17 * REGSZ(a0)
242
+ LREG x18, 18 * REGSZ(a0)
243
+ LREG x19, 19 * REGSZ(a0)
244
+ LREG x20, 20 * REGSZ(a0)
245
+ LREG x21, 21 * REGSZ(a0)
246
+ LREG x22, 22 * REGSZ(a0)
247
+ LREG x23, 23 * REGSZ(a0)
248
+ LREG x24, 24 * REGSZ(a0)
249
+ LREG x25, 25 * REGSZ(a0)
250
+ LREG x26, 26 * REGSZ(a0)
251
+ LREG x27, 27 * REGSZ(a0)
252
+ LREG x28, 28 * REGSZ(a0)
253
+ LREG x29, 29 * REGSZ(a0)
254
+ LREG x30, 30 * REGSZ(a0)
255
+ LREG x31, 31 * REGSZ(a0)
256
+ LREG x10, 10 * REGSZ(a0)
257
+ mret
0 commit comments