1/* 2 * Copyright 2005, Ingo Weinhold <bonefish@cs.tu-berlin.de>. All rights 3 * reserved. Distributed under the terms of the Haiku License. 4 */ 5 6#include "setjmp_internal.h" 7 8/* int __siglongjmp(jmp_buf buffer, int value) */ 9FUNCTION(siglongjmp): 10FUNCTION(longjmp): 11FUNCTION(_longjmp): 12 // r3: buffer, r4: saveMask 13 14 // restore non-volatile general purpose registers 15 lwz %r1, JMP_REGS_R1(3) 16 lwz %r2, JMP_REGS_R2(3) 17 lwz %r13, JMP_REGS_R13(3) 18 lwz %r14, JMP_REGS_R14(3) 19 lwz %r15, JMP_REGS_R15(3) 20 lwz %r16, JMP_REGS_R16(3) 21 lwz %r17, JMP_REGS_R17(3) 22 lwz %r18, JMP_REGS_R18(3) 23 lwz %r19, JMP_REGS_R19(3) 24 lwz %r20, JMP_REGS_R20(3) 25 lwz %r21, JMP_REGS_R21(3) 26 lwz %r22, JMP_REGS_R22(3) 27 lwz %r23, JMP_REGS_R23(3) 28 lwz %r24, JMP_REGS_R24(3) 29 lwz %r25, JMP_REGS_R25(3) 30 lwz %r26, JMP_REGS_R26(3) 31 lwz %r27, JMP_REGS_R27(3) 32 lwz %r28, JMP_REGS_R28(3) 33 lwz %r29, JMP_REGS_R29(3) 34 lwz %r30, JMP_REGS_R30(3) 35 lwz %r31, JMP_REGS_R31(3) 36 37 // restore special registers (link, condition) 38 lwz %r0, JMP_REGS_LR(3) 39 mtlr %r0 40 lwz %r0, JMP_REGS_CR(3) 41 mtcr %r0 42 43 b __longjmp_return 44 45#pragma weak longjmp=siglongjmp 46