.globl .ontop_fcontext
.globl ontop_fcontext[DS]
.align 2
.csect ontop_fcontext[DS]
ontop_fcontext:
.long .ontop_fcontext
.ontop_fcontext:
# reserve space on stack
subi 1, 1, 92
stw 13, 0(1) # save R13
stw 14, 4(1) # save R14
stw 15, 8(1) # save R15
stw 16, 12(1) # save R16
stw 17, 16(1) # save R17
stw 18, 20(1) # save R18
stw 19, 24(1) # save R19
stw 20, 28(1) # save R20
stw 21, 32(1) # save R21
stw 22, 36(1) # save R22
stw 23, 40(1) # save R23
stw 24, 44(1) # save R24
stw 25, 48(1) # save R25
stw 26, 52(1) # save R26
stw 27, 56(1) # save R27
stw 28, 60(1) # save R28
stw 29, 64(1) # save R29
stw 30, 68(1) # save R30
stw 31, 72(1) # save R31
stw 3, 76(1) # save hidden
# save CR
mfcr 0
stw 0, 80(1)
# save LR
mflr 0
stw 0, 84(1)
# save LR as PC
stw 0, 88(1)
# store RSP (pointing to context-data) in R6
mr 7, 1
# restore RSP (pointing to context-data) from R4
mr 1, 4
lwz 13, 0(1) # restore R13
lwz 14, 4(1) # restore R14
lwz 15, 8(1) # restore R15
lwz 16, 12(1) # restore R16
lwz 17, 16(1) # restore R17
lwz 18, 20(1) # restore R18
lwz 19, 24(1) # restore R19
lwz 20, 28(1) # restore R20
lwz 21, 32(1) # restore R21
lwz 22, 36(1) # restore R22
lwz 23, 40(1) # restore R23
lwz 24, 44(1) # restore R24
lwz 25, 48(1) # restore R25
lwz 26, 52(1) # restore R26
lwz 27, 56(1) # restore R27
lwz 28, 60(1) # restore R28
lwz 29, 64(1) # restore R29
lwz 30, 68(1) # restore R30
lwz 31, 72(1) # restore R31
lwz 4, 76(1) # restore hidden
# restore CR
lwz 0, 80(1)
mtcr 0
# restore LR
lwz 0, 84(1)
mtlr 0
# ignore PC
# adjust stack
addi 1, 1, 92
# return transfer_t
stw 7, 0(3)
stw 5, 4(3)
# restore CTR
mtctr 6
# jump to context
bctr