diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/crt0.S | 76 |
1 files changed, 14 insertions, 62 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/crt0.S b/firmware/target/mips/ingenic_jz47xx/crt0.S index 6ac40c2f52..af82ad5d12 100644 --- a/firmware/target/mips/ingenic_jz47xx/crt0.S +++ b/firmware/target/mips/ingenic_jz47xx/crt0.S | |||
@@ -216,10 +216,10 @@ _init_stack_loop: | |||
216 | .section .vectors, "ax", %progbits | 216 | .section .vectors, "ax", %progbits |
217 | real_exception_handler: | 217 | real_exception_handler: |
218 | addiu sp, -0x80 | 218 | addiu sp, -0x80 |
219 | sw ra, 0(sp) | 219 | sw ra, 0(sp) |
220 | sw fp, 4(sp) | 220 | sw fp, 4(sp) |
221 | sw gp, 8(sp) | 221 | sw gp, 8(sp) |
222 | sw t9, 0xC(sp) | 222 | sw t9, 0xC(sp) |
223 | sw t8, 0x10(sp) | 223 | sw t8, 0x10(sp) |
224 | sw s7, 0x14(sp) | 224 | sw s7, 0x14(sp) |
225 | sw s6, 0x18(sp) | 225 | sw s6, 0x18(sp) |
@@ -274,60 +274,10 @@ real_exception_handler: | |||
274 | _int: | 274 | _int: |
275 | jal intr_handler | 275 | jal intr_handler |
276 | nop | 276 | nop |
277 | lw ra, 0(sp) | 277 | j _exception_return |
278 | lw fp, 4(sp) | ||
279 | sw gp, 8(sp) | ||
280 | lw t9, 0xC(sp) | ||
281 | lw t8, 0x10(sp) | ||
282 | lw s7, 0x14(sp) | ||
283 | lw s6, 0x18(sp) | ||
284 | lw s5, 0x1C(sp) | ||
285 | lw s4, 0x20(sp) | ||
286 | lw s3, 0x24(sp) | ||
287 | lw s2, 0x28(sp) | ||
288 | lw s1, 0x2C(sp) | ||
289 | lw s0, 0x30(sp) | ||
290 | lw t7, 0x34(sp) | ||
291 | lw t6, 0x38(sp) | ||
292 | lw t5, 0x3C(sp) | ||
293 | lw t4, 0x40(sp) | ||
294 | lw t3, 0x44(sp) | ||
295 | lw t2, 0x48(sp) | ||
296 | lw t1, 0x4C(sp) | ||
297 | lw t0, 0x50(sp) | ||
298 | lw a3, 0x54(sp) | ||
299 | lw a2, 0x58(sp) | ||
300 | lw a1, 0x5C(sp) | ||
301 | lw a0, 0x60(sp) | ||
302 | lw v1, 0x64(sp) | ||
303 | lw v0, 0x68(sp) | ||
304 | lw $1, 0x6C(sp) | ||
305 | lw k0, 0x70(sp) | ||
306 | mtlo k0 | ||
307 | nop | ||
308 | lw k0, 0x74(sp) | ||
309 | mthi k0 | ||
310 | nop | ||
311 | lw k0, 0x78(sp) | ||
312 | nop | ||
313 | mtc0 k0, C0_STATUS # Status register | ||
314 | sll zero, 1 | ||
315 | sll zero, 1 | ||
316 | sll zero, 1 | ||
317 | sll zero, 1 | ||
318 | lw k0, 0x7C(sp) | ||
319 | nop | ||
320 | mtc0 k0, C0_EPC # Exception Program Counter | ||
321 | sll zero, 1 | ||
322 | sll zero, 1 | ||
323 | sll zero, 1 | ||
324 | sll zero, 1 | ||
325 | addiu sp, 0x80 | ||
326 | eret # Exception Return | ||
327 | nop | ||
328 | 278 | ||
329 | _exception: | 279 | _exception: |
330 | add a0, sp, $0 | 280 | move a0, sp |
331 | mfc0 a1, C0_CAUSE # C0_CAUSE of last exception | 281 | mfc0 a1, C0_CAUSE # C0_CAUSE of last exception |
332 | sll zero, 1 | 282 | sll zero, 1 |
333 | sll zero, 1 | 283 | sll zero, 1 |
@@ -340,10 +290,12 @@ _exception: | |||
340 | sll zero, 1 | 290 | sll zero, 1 |
341 | jal exception_handler | 291 | jal exception_handler |
342 | nop | 292 | nop |
343 | lw ra, 0(sp) | 293 | |
344 | lw fp, 4(sp) | 294 | _exception_return: |
345 | sw gp, 8(sp) | 295 | lw ra, 0(sp) |
346 | lw t9, 0xC(sp) | 296 | lw fp, 4(sp) |
297 | lw gp, 8(sp) | ||
298 | lw t9, 0xC(sp) | ||
347 | lw t8, 0x10(sp) | 299 | lw t8, 0x10(sp) |
348 | lw s7, 0x14(sp) | 300 | lw s7, 0x14(sp) |
349 | lw s6, 0x18(sp) | 301 | lw s6, 0x18(sp) |
@@ -375,15 +327,15 @@ _exception: | |||
375 | mthi k0 | 327 | mthi k0 |
376 | nop | 328 | nop |
377 | lw k0, 0x78(sp) | 329 | lw k0, 0x78(sp) |
378 | nop | ||
379 | mtc0 k0, C0_STATUS # Status register | 330 | mtc0 k0, C0_STATUS # Status register |
331 | nop | ||
380 | sll zero, 1 | 332 | sll zero, 1 |
381 | sll zero, 1 | 333 | sll zero, 1 |
382 | sll zero, 1 | 334 | sll zero, 1 |
383 | sll zero, 1 | 335 | sll zero, 1 |
384 | lw k0, 0x7C(sp) | 336 | lw k0, 0x7C(sp) |
385 | nop | ||
386 | mtc0 k0, C0_EPC # Exception Program Counter | 337 | mtc0 k0, C0_EPC # Exception Program Counter |
338 | nop | ||
387 | sll zero, 1 | 339 | sll zero, 1 |
388 | sll zero, 1 | 340 | sll zero, 1 |
389 | sll zero, 1 | 341 | sll zero, 1 |