75 lines
1.9 KiB
C
Executable file
75 lines
1.9 KiB
C
Executable file
#include "game/jmp.h"
|
|
|
|
s32 gcsetjmp(register jmp_buf *jump)
|
|
{
|
|
// clang-format off
|
|
asm {
|
|
mflr r5
|
|
mfcr r6
|
|
stw r5, jump->lr
|
|
stw r6, jump->cr
|
|
stw r1, jump->sp
|
|
stw r2, jump->r2
|
|
stmw r13, jump->regs[0]
|
|
mffs f0
|
|
stfd f14, jump->flt_regs[0]
|
|
stfd f15, jump->flt_regs[1]
|
|
stfd f16, jump->flt_regs[2]
|
|
stfd f17, jump->flt_regs[3]
|
|
stfd f18, jump->flt_regs[4]
|
|
stfd f19, jump->flt_regs[5]
|
|
stfd f20, jump->flt_regs[6]
|
|
stfd f21, jump->flt_regs[7]
|
|
stfd f22, jump->flt_regs[8]
|
|
stfd f23, jump->flt_regs[9]
|
|
stfd f24, jump->flt_regs[10]
|
|
stfd f25, jump->flt_regs[11]
|
|
stfd f26, jump->flt_regs[12]
|
|
stfd f27, jump->flt_regs[13]
|
|
stfd f28, jump->flt_regs[14]
|
|
stfd f29, jump->flt_regs[15]
|
|
stfd f30, jump->flt_regs[16]
|
|
stfd f31, jump->flt_regs[17]
|
|
stfd f0, jump->flt_regs[18]
|
|
}
|
|
// clang-format on
|
|
return 0;
|
|
}
|
|
|
|
// clang-format off
|
|
asm s32 gclongjmp(register jmp_buf *jump, register s32 status) {
|
|
nofralloc
|
|
lwz r5, jump->lr
|
|
lwz r6, jump->cr
|
|
mtlr r5
|
|
mtcrf 255, r6
|
|
lwz r1, jump->sp
|
|
lwz r2, jump->r2
|
|
lmw r13, jump->regs[0]
|
|
lfd f14, jump->flt_regs[0]
|
|
lfd f15, jump->flt_regs[1]
|
|
lfd f16, jump->flt_regs[2]
|
|
lfd f17, jump->flt_regs[3]
|
|
lfd f18, jump->flt_regs[4]
|
|
lfd f19, jump->flt_regs[5]
|
|
lfd f20, jump->flt_regs[6]
|
|
lfd f21, jump->flt_regs[7]
|
|
lfd f22, jump->flt_regs[8]
|
|
lfd f23, jump->flt_regs[9]
|
|
lfd f24, jump->flt_regs[10]
|
|
lfd f25, jump->flt_regs[11]
|
|
lfd f26, jump->flt_regs[12]
|
|
lfd f27, jump->flt_regs[13]
|
|
lfd f28, jump->flt_regs[14]
|
|
lfd f29, jump->flt_regs[15]
|
|
lfd f30, jump->flt_regs[16]
|
|
lfd f0, jump->flt_regs[18]
|
|
lfd f31, jump->flt_regs[17]
|
|
cmpwi status, 0
|
|
mr r3, status
|
|
mtfsf 255, f0
|
|
bnelr
|
|
li r3, 1
|
|
blr
|
|
}
|
|
// clang-format on
|