diff --git a/portable/GCC/NiosII/port_asm.S b/portable/GCC/NiosII/port_asm.S index 06cf5d287..a28677ede 100644 --- a/portable/GCC/NiosII/port_asm.S +++ b/portable/GCC/NiosII/port_asm.S @@ -27,12 +27,12 @@ */ .extern vTaskSwitchContext - + .set noat # Exported to start the first task. -.globl restore_sp_from_pxCurrentTCB - +.globl restore_sp_from_pxCurrentTCB + # Entry point for exceptions. .section .exceptions.entry.user, "xa" @@ -41,15 +41,15 @@ save_context: addi sp, sp, -116 # Create space on the stack. stw ra, 0(sp) # Leave a gap for muldiv 0 - stw at, 8(sp) + stw at, 8(sp) stw r2, 12(sp) stw r3, 16(sp) stw r4, 20(sp) - stw r5, 24(sp) - stw r6, 28(sp) - stw r7, 32(sp) - stw r8, 36(sp) - stw r9, 40(sp) + stw r5, 24(sp) + stw r6, 28(sp) + stw r7, 32(sp) + stw r8, 36(sp) + stw r9, 40(sp) stw r10, 44(sp) stw r11, 48(sp) stw r12, 52(sp) @@ -76,12 +76,12 @@ save_sp_to_pxCurrentTCB: ldw et, (et) # Load the value of the pxCurrentTCB pointer stw sp, (et) # Store the stack pointer into the top of the TCB - br irq_test_user # skip the section .exceptions.entry + br irq_test_user # skip the section .exceptions.entry - .section .exceptions.irqtest, "xa" + .section .exceptions.irqtest, "xa" irq_test_user: - .section .exceptions.exit.user, "xa" + .section .exceptions.exit.user, "xa" restore_sp_from_pxCurrentTCB: movia et, pxCurrentTCB # Load the address of the pxCurrentTCB pointer ldw et, (et) # Load the value of the pxCurrentTCB pointer @@ -94,11 +94,11 @@ restore_context: 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 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) @@ -120,8 +120,8 @@ restore_context: ldw fp, 112(sp) addi sp, sp, 116 # Release stack space - eret # Return to address ea, loading eStatus into Status. - + eret # Return to address ea, loading eStatus into Status. + .section .exceptions.soft, "xa" soft_exceptions: movhi r3, 0x003b /* upper half of trap opcode */ @@ -131,8 +131,9 @@ soft_exceptions: call_scheduler: stw ea, 72(sp) # EA is PC+4 so will skip over instruction causing exception - call vTaskSwitchContext # Pick the next context. - br restore_sp_from_pxCurrentTCB # Switch in the task context and restore. + movia r15, vTaskSwitchContext # Pick the next context - use long call version in place of "call" + callr r15 + br restore_sp_from_pxCurrentTCB # Switch in the task context and restore. .section .exceptions.unknown.user exceptions_unknown_user: