1.1 --- a/stage2/handlers.S Mon Feb 22 20:31:50 2016 +0100
1.2 +++ b/stage2/handlers.S Mon Feb 22 23:23:52 2016 +0100
1.3 @@ -19,12 +19,40 @@
1.4 */
1.5
1.6 .text
1.7 +.extern tlb_handle
1.8 .extern irq_handle
1.9 +.globl tlb_handler
1.10 .globl interrupt_handler
1.11 .set noreorder
1.12 .set noat
1.13
1.14 +tlb_handler:
1.15 + sw $ra, -112($sp)
1.16 + jal save_state
1.17 + nop
1.18 +
1.19 + /* Invoke the handler. */
1.20 +
1.21 + jal tlb_handle
1.22 + nop
1.23 +
1.24 + j load_and_return
1.25 + nop
1.26 +
1.27 interrupt_handler:
1.28 + sw $ra, -112($sp)
1.29 + jal save_state
1.30 + nop
1.31 +
1.32 + /* Invoke the handler. */
1.33 +
1.34 + jal irq_handle
1.35 + nop
1.36 +
1.37 + j load_and_return
1.38 + nop
1.39 +
1.40 +save_state:
1.41
1.42 /* Save the status, mask interrupts. */
1.43
1.44 @@ -61,18 +89,17 @@
1.45 sw $t9, -100($sp)
1.46 sw $gp, -104($sp)
1.47 sw $fp, -108($sp)
1.48 - sw $ra, -112($sp)
1.49 + /* sw $ra, -112($sp) */
1.50
1.51 mfc0 $k0, $14 /* CP0_EPC */
1.52 nop
1.53 sw $k0, -116($sp)
1.54
1.55 addi $sp, $sp, -120
1.56 -
1.57 - /* Invoke the handler. */
1.58 + j $ra
1.59 + nop
1.60
1.61 - jal irq_handle
1.62 - nop
1.63 +load_and_return:
1.64
1.65 addi $sp, $sp, 120
1.66