Hello mao jiu,
Please refer to the following code from CodeWarrior sample project.
##############################################################################
#
# isr_prologue
#
# Saves the necessary registers for an interrupt service routine
#
##############################################################################
isr_prologue: .macro
stwu rsp,-80(rsp)
stw r0,8(rsp)
mfctr r0
stw r0,12(rsp)
mfxer r0
stw r0,16(rsp)
mfcr r0
stw r0,20(rsp)
mflr r0
stw r0,24(rsp)
stw r3,40(rsp)
stw r4,44(rsp)
stw r5,48(rsp)
stw r6,52(rsp)
stw r7,56(rsp)
stw r8,60(rsp)
stw r9,64(rsp)
stw r10,68(rsp)
stw r11,72(rsp)
stw r12,76(rsp)
mfsrr0 r0
stw r0,28(rsp)
mfsrr1 r0
stw r0,32(rsp)
.endm
##############################################################################
#
# isr_epilogue
#
# Restores the necessary registers for an interrupt service routine
#
##############################################################################
isr_epilogue: .macro
lwz r0,32(rsp)
mtsrr1 r0
lwz r0,28(rsp)
mtsrr0 r0
lwz r3,40(rsp)
lwz r4,44(rsp)
lwz r5,48(rsp)
lwz r6,52(rsp)
lwz r7,56(rsp)
lwz r8,60(rsp)
lwz r9,64(rsp)
lwz r10,68(rsp)
lwz r11,72(rsp)
lwz r12,76(rsp)
lwz r0,24(rsp)
mtlr r0
lwz r0,20(rsp)
mtcrf 0xff,r0
lwz r0,16(rsp)
mtxer r0
lwz r0,12(rsp)
mtctr r0
lwz r0,8(rsp)
addi rsp,rsp,80
rfi
.endm
gInterruptVectorTable:
Have a great day,
Yiping
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------