11.6Sskrll/* $NetBSD: __setjmp14.S,v 1.6 2023/10/11 09:12:21 skrll Exp $ */ 21.1Stsubai 31.5Smatt#include "SYS.h" 41.5Smatt#include "assym.h" 51.1Stsubai 61.1Stsubai#if defined(LIBC_SCCS) 71.6Sskrll__RCSID("$NetBSD: __setjmp14.S,v 1.6 2023/10/11 09:12:21 skrll Exp $") 81.1Stsubai#endif 91.1Stsubai 101.1Stsubai/* 111.1Stsubai * C library -- _setjmp, _longjmp 121.1Stsubai * 131.1Stsubai * longjmp(a,v) 141.1Stsubai * will generate a "return(v?v:1)" from the last call to 151.1Stsubai * setjmp(a) 161.1Stsubai * by restoring registers from the stack. 171.1Stsubai * The previous signal state is restored. 181.1Stsubai */ 191.1Stsubai 201.1StsubaiENTRY(__setjmp14) 211.2Smatt mr %r6,%r3 221.6Sskrll li %r3,0 # how is ignored 231.6Sskrll li %r4,0 # set = NULL 241.5Smatt addi %r5,%r6,4*(1+24) # &sigmask 251.5Smatt _DOSYSCALL(__sigprocmask14) # assume no error XXX 261.2Smatt mflr %r11 271.2Smatt mfcr %r12 281.2Smatt mr %r10,%r1 291.2Smatt mr %r9,%r2 301.2Smatt stmw %r8,4(%r6) # save r8-r31 311.2Smatt li %r3,0 321.1Stsubai blr 331.5SmattEND(__setjmp14) 341.1Stsubai 351.1StsubaiENTRY(__longjmp14) 361.2Smatt lmw %r8,4(%r3) # load r8-r31 371.2Smatt mr %r6,%r4 381.2Smatt mtlr %r11 391.2Smatt mtcr %r12 401.2Smatt mr %r2,%r9 411.2Smatt mr %r1,%r10 421.5Smatt addi %r4,%r3,4*(1+24) # &sigmask 431.5Smatt li %r3,SIG_SETMASK 441.2Smatt li %r5,0 451.5Smatt _DOSYSCALL(__sigprocmask14) # assume no error XXX 461.2Smatt or. %r3,%r6,%r6 471.1Stsubai bnelr 481.2Smatt li %r3,1 491.1Stsubai blr 501.5SmattEND(__longjmp14) 51