Path: blob/main/sys/contrib/openzfs/module/lua/setjmp/setjmp_ppc.S
48534 views
/* $FreeBSD$ */1/* from: NetBSD: setjmp.S,v 1.1 1998/01/27 15:13:12 sakamoto Exp $ */2/* from: OpenBSD: setjmp.S,v 1.2 1996/12/28 06:22:18 rahnds Exp */3/* kernel version of this file, does not have signal goop */4/* int setjmp(jmp_buf env) */56#define _ASM7#include <asm/types.h>89#ifdef __powerpc64__10#if !defined(PPC64_ELF_ABI_v2) && !defined(PPC64_ELF_ABI_v1)11#if defined(_CALL_ELF) && _CALL_ELF == 212#define PPC64_ELF_ABI_v213#endif /* _CALL_ELF */14#endif /* PPC64_ELF_ABI_ */15#endif /* __powerpc64__ */1617#ifdef __powerpc64__18#define LD_REG ld19#define ST_REG std20#define REGWIDTH 821#else22#define LD_REG lwz23#define ST_REG stw24#define REGWIDTH 425#endif /* __powerpc64__ */2627#define JMP_r1 1*REGWIDTH28#define JMP_r2 2*REGWIDTH29#define JMP_r14 3*REGWIDTH30#define JMP_r15 4*REGWIDTH31#define JMP_r16 5*REGWIDTH32#define JMP_r17 6*REGWIDTH33#define JMP_r18 7*REGWIDTH34#define JMP_r19 8*REGWIDTH35#define JMP_r20 9*REGWIDTH36#define JMP_r21 10*REGWIDTH37#define JMP_r22 11*REGWIDTH38#define JMP_r23 12*REGWIDTH39#define JMP_r24 13*REGWIDTH40#define JMP_r25 14*REGWIDTH41#define JMP_r26 15*REGWIDTH42#define JMP_r27 16*REGWIDTH43#define JMP_r28 17*REGWIDTH44#define JMP_r29 18*REGWIDTH45#define JMP_r30 19*REGWIDTH46#define JMP_r31 20*REGWIDTH47#define JMP_lr 21*REGWIDTH48#define JMP_cr 22*REGWIDTH49#define JMP_ctr 23*REGWIDTH50#define JMP_xer 24*REGWIDTH5152#ifdef __powerpc64__53#ifdef PPC64_ELF_ABI_v25455#define ENTRY(name) \56.balign 2 ; \57.type name,@function; \58.weak name; \59name:6061#else /* PPC64_ELF_ABI_v1 */6263#define XGLUE(a,b) a##b64#define GLUE(a,b) XGLUE(a,b)65#define ENTRY(name) \66.balign 2 ; \67.weak name; \68.weak GLUE(.,name); \69.pushsection ".opd","aw"; \70name: \71.quad GLUE(.,name); \72.quad .TOC.@tocbase; \73.quad 0; \74.popsection; \75.type GLUE(.,name),@function; \76GLUE(.,name):7778#endif /* PPC64_ELF_ABI_v2 */7980#else /* 32-bit */8182#define ENTRY(name) \83.text; \84.p2align 4; \85.weak name; \86.type name,@function; \87name:8889#endif /* __powerpc64__ */909192ENTRY(setjmp)93ST_REG 31, JMP_r31(3)94/* r1, r2, r14-r30 */95ST_REG 1, JMP_r1 (3)96ST_REG 2, JMP_r2 (3)97ST_REG 14, JMP_r14(3)98ST_REG 15, JMP_r15(3)99ST_REG 16, JMP_r16(3)100ST_REG 17, JMP_r17(3)101ST_REG 18, JMP_r18(3)102ST_REG 19, JMP_r19(3)103ST_REG 20, JMP_r20(3)104ST_REG 21, JMP_r21(3)105ST_REG 22, JMP_r22(3)106ST_REG 23, JMP_r23(3)107ST_REG 24, JMP_r24(3)108ST_REG 25, JMP_r25(3)109ST_REG 26, JMP_r26(3)110ST_REG 27, JMP_r27(3)111ST_REG 28, JMP_r28(3)112ST_REG 29, JMP_r29(3)113ST_REG 30, JMP_r30(3)114/* cr, lr, ctr, xer */115mfcr 0116ST_REG 0, JMP_cr(3)117mflr 0118ST_REG 0, JMP_lr(3)119mfctr 0120ST_REG 0, JMP_ctr(3)121mfxer 0122ST_REG 0, JMP_xer(3)123/* f14-f31, fpscr */124li 3, 0125blr126127ENTRY(longjmp)128LD_REG 31, JMP_r31(3)129/* r1, r2, r14-r30 */130LD_REG 1, JMP_r1 (3)131LD_REG 2, JMP_r2 (3)132LD_REG 14, JMP_r14(3)133LD_REG 15, JMP_r15(3)134LD_REG 16, JMP_r16(3)135LD_REG 17, JMP_r17(3)136LD_REG 18, JMP_r18(3)137LD_REG 19, JMP_r19(3)138LD_REG 20, JMP_r20(3)139LD_REG 21, JMP_r21(3)140LD_REG 22, JMP_r22(3)141LD_REG 23, JMP_r23(3)142LD_REG 24, JMP_r24(3)143LD_REG 25, JMP_r25(3)144LD_REG 26, JMP_r26(3)145LD_REG 27, JMP_r27(3)146LD_REG 28, JMP_r28(3)147LD_REG 29, JMP_r29(3)148LD_REG 30, JMP_r30(3)149/* cr, lr, ctr, xer */150LD_REG 0, JMP_cr(3)151mtcr 0152LD_REG 0, JMP_lr(3)153mtlr 0154LD_REG 0, JMP_ctr(3)155mtctr 0156LD_REG 0, JMP_xer(3)157mtxer 0158/* f14-f31, fpscr */159mr 3, 4160blr161162#ifdef __ELF__163.section .note.GNU-stack,"",%progbits164#endif165166167