rt-thread-official/libcpu/nios/nios_ii/vector.S

52 lines
1.1 KiB
ArmAsm

.set noat
.globl .Lexception_exit
.section .exceptions.exit.label
.Lexception_exit:
.section .exceptions.exit, "xa"
ldw r5, 68(sp)
/* get exception back */
ldw ea, 72(sp)
/* if(rt_thread_switch_interrupt_flag == 0) goto no_need_context */
ldw r4,%gprel(rt_thread_switch_interrupt_flag)(gp)
beq r4,zero,no_need_context
need_context:
movia ea, rt_hw_context_switch_interrupt_do
/* disable interrupt */
mov r5, zero
no_need_context:
ldw ra, 0(sp)
wrctl estatus, r5
/*
* Leave a gap in the stack frame at 4(sp) for the muldiv handler to
* store zero into.
*/
ldw r1, 8(sp)
ldw r2, 12(sp)
ldw r3, 16(sp)
ldw r4, 20(sp)
ldw r5, 24(sp)
ldw r6, 28(sp)
ldw r7, 32(sp)
ldw r8, 36(sp)
ldw r9, 40(sp)
ldw r10, 44(sp)
ldw r11, 48(sp)
ldw r12, 52(sp)
ldw r13, 56(sp)
ldw r14, 60(sp)
ldw r15, 64(sp)
addi sp, sp, 76
eret