+\r
+.macro int_epilogue\r
+\r
+ # Get the address of the TCB.\r
+ xor R0, R0, R0\r
+ addis SP, R0, pxCurrentTCB@ha\r
+ lwz SP, pxCurrentTCB@l( SP )\r
+\r
+ # Get the task stack pointer from the TCB.\r
+ lwz SP, 0( SP )\r
+ \r
+ # Restore MSR register to SRR1.\r
+ lwz R0,MSRField(R1)\r
+ mtsrr1 R0\r
+ \r
+ # Restore current PC location to SRR0.\r
+ lwz R0,PCField(R1)\r
+ mtsrr0 R0\r
+\r
+ # Save USPRG0 register\r
+ lwz R0,USPRG0Field(R1)\r
+ mtspr 0x100,R0\r
+ \r
+ # Restore Condition register\r
+ lwz R0,CRField(R1)\r
+ mtcr R0\r
+ \r
+ # Restore Fixed Point Exception register\r
+ lwz R0,XERField(R1)\r
+ mtxer R0\r
+ \r
+ # Restore Counter register\r
+ lwz R0,CTRField(R1)\r
+ mtctr R0\r
+ \r
+ # Restore Link register\r
+ lwz R0,LRField(R1)\r
+ mtlr R0\r
+ \r
+ # Restore remaining GPR registers.\r
+ lmw R3,r3r31Field(R1)\r
+ \r
+ # Restore r0 and r2.\r
+ lwz R0,r0Field(R1)\r
+ lwz R2,r2Field(R1)\r
+ \r
+ # Remove frame from stack\r
+ addi R1,R1,IFrameSize\r
+ \r
+.endm\r
+\r
+.macro portENTER_SWITCHING_ISR\r
+\r
+ # Get the address of the TCB. \r
+ xor R0, R0, R0\r
+ addis R2, R0, pxCurrentTCB@ha\r
+ lwz R2, pxCurrentTCB@l( R2 )\r
+\r
+ # Store the stack pointer into the TCB\r
+ stw SP, 0( R2 )\r
+\r
+.endm\r
+\r
+.macro portEXIT_SWITCHING_ISR\r
+\r
+ # Get the address of the TCB.\r
+ xor R0, R0, R0\r
+ addis SP, R0, pxCurrentTCB@ha\r
+ lwz SP, pxCurrentTCB@l( R1 )\r
+\r
+ # Get the task stack pointer from the TCB.\r
+ lwz SP, 0( SP )\r
+\r
+ # Load up the LR for the correct return.\r
+ lwz R0,LRField(R1)\r
+ mtlr R0\r
+\r
+\r
+.endm\r
+\r
+\r