1*ea952cb8Sskrll/* $NetBSD: __setjmp14.S,v 1.5 2023/10/11 09:12:21 skrll Exp $ */ 260ce5dccSross 338dcdc34Smatt#include "SYS.h" 460ce5dccSross 560ce5dccSross#if defined(LIBC_SCCS) 6*ea952cb8Sskrll__RCSID("$NetBSD: __setjmp14.S,v 1.5 2023/10/11 09:12:21 skrll Exp $") 760ce5dccSross#endif 860ce5dccSross 960ce5dccSross/* 1060ce5dccSross * C library -- _setjmp, _longjmp 1160ce5dccSross * 1260ce5dccSross * longjmp(a,v) 1360ce5dccSross * will generate a "return(v?v:1)" from the last call to 1460ce5dccSross * setjmp(a) 1560ce5dccSross * by restoring registers from the stack. 1660ce5dccSross * The previous signal state is restored. 1760ce5dccSross */ 1860ce5dccSross 1960ce5dccSrossENTRY(__setjmp14) 2060ce5dccSross mr %r6,%r3 21*ea952cb8Sskrll li %r3,0 2260ce5dccSross li %r4,0 2360ce5dccSross addi %r5,%r6,100 # &sigmask 2438dcdc34Smatt _DOSYSCALL(__sigprocmask14) # assume no error XXX 2560ce5dccSross mflr %r11 2660ce5dccSross mfcr %r12 2760ce5dccSross mr %r10,%r1 2860ce5dccSross mr %r9,%r2 295da54c35She 305da54c35She std %r8,8(%r6) # save r8-r31 315da54c35She std %r9,16(%r6) 325da54c35She std %r10,24(%r6) 335da54c35She std %r11,32(%r6) 345da54c35She std %r12,40(%r6) 355da54c35She std %r13,48(%r6) 365da54c35She std %r14,56(%r6) 375da54c35She std %r15,64(%r6) 385da54c35She std %r16,72(%r6) 395da54c35She std %r17,80(%r6) 405da54c35She std %r18,88(%r6) 415da54c35She std %r19,96(%r6) 425da54c35She std %r20,104(%r6) 435da54c35She std %r21,112(%r6) 445da54c35She std %r22,120(%r6) 455da54c35She std %r23,128(%r6) 465da54c35She std %r24,136(%r6) 475da54c35She std %r25,144(%r6) 485da54c35She std %r26,152(%r6) 495da54c35She std %r27,160(%r6) 505da54c35She std %r28,168(%r6) 515da54c35She std %r29,176(%r6) 525da54c35She std %r30,184(%r6) 535da54c35She std %r31,192(%r6) 545da54c35She 5560ce5dccSross li %r3,0 5660ce5dccSross blr 5738dcdc34SmattEND(__setjmp14) 5860ce5dccSross 5960ce5dccSrossENTRY(__longjmp14) 605da54c35She ld %r8,8(%r6) # load r8-r31 615da54c35She ld %r9,16(%r6) 625da54c35She ld %r10,24(%r6) 635da54c35She ld %r11,32(%r6) 645da54c35She ld %r12,40(%r6) 655da54c35She ld %r13,48(%r6) 665da54c35She ld %r14,56(%r6) 675da54c35She ld %r15,64(%r6) 685da54c35She ld %r16,72(%r6) 695da54c35She ld %r17,80(%r6) 705da54c35She ld %r18,88(%r6) 715da54c35She ld %r19,96(%r6) 725da54c35She ld %r20,104(%r6) 735da54c35She ld %r21,112(%r6) 745da54c35She ld %r22,120(%r6) 755da54c35She ld %r23,128(%r6) 765da54c35She ld %r24,136(%r6) 775da54c35She ld %r25,144(%r6) 785da54c35She ld %r26,152(%r6) 795da54c35She ld %r27,160(%r6) 805da54c35She ld %r28,168(%r6) 815da54c35She ld %r29,176(%r6) 825da54c35She ld %r30,184(%r6) 835da54c35She ld %r31,192(%r6) 845da54c35She 8560ce5dccSross mr %r6,%r4 8660ce5dccSross mtlr %r11 8760ce5dccSross mtcr %r12 8860ce5dccSross mr %r2,%r9 8960ce5dccSross mr %r1,%r10 9060ce5dccSross addi %r4,%r3,100 # &sigmask 9160ce5dccSross li %r3,3 # SIG_SETMASK 9260ce5dccSross li %r5,0 9338dcdc34Smatt _DOSYSCALL(__sigprocmask14) # assume no error XXX 9460ce5dccSross or. %r3,%r6,%r6 9560ce5dccSross bnelr 9660ce5dccSross li %r3,1 9760ce5dccSross blr 9838dcdc34SmattEND(__longjmp14) 99