1*0a6a1f1dSLionel Sambuc/* $NetBSD: __setjmp14.S,v 1.3 2014/08/23 02:24:22 matt Exp $ */ 22fe8fb19SBen Gras 3*0a6a1f1dSLionel Sambuc#include "SYS.h" 42fe8fb19SBen Gras 52fe8fb19SBen Gras#if defined(LIBC_SCCS) 6*0a6a1f1dSLionel Sambuc__RCSID("$NetBSD: __setjmp14.S,v 1.3 2014/08/23 02:24:22 matt Exp $") 72fe8fb19SBen Gras#endif 82fe8fb19SBen Gras 92fe8fb19SBen Gras/* 102fe8fb19SBen Gras * C library -- _setjmp, _longjmp 112fe8fb19SBen Gras * 122fe8fb19SBen Gras * longjmp(a,v) 132fe8fb19SBen Gras * will generate a "return(v?v:1)" from the last call to 142fe8fb19SBen Gras * setjmp(a) 152fe8fb19SBen Gras * by restoring registers from the stack. 162fe8fb19SBen Gras * The previous signal state is restored. 172fe8fb19SBen Gras */ 182fe8fb19SBen Gras 192fe8fb19SBen GrasENTRY(__setjmp14) 202fe8fb19SBen Gras mr %r6,%r3 212fe8fb19SBen Gras li %r3,1 # SIG_BLOCK 222fe8fb19SBen Gras li %r4,0 232fe8fb19SBen Gras addi %r5,%r6,100 # &sigmask 24*0a6a1f1dSLionel Sambuc _DOSYSCALL(__sigprocmask14) # assume no error XXX 252fe8fb19SBen Gras mflr %r11 262fe8fb19SBen Gras mfcr %r12 272fe8fb19SBen Gras mr %r10,%r1 282fe8fb19SBen Gras mr %r9,%r2 292fe8fb19SBen Gras 302fe8fb19SBen Gras std %r8,8(%r6) # save r8-r31 312fe8fb19SBen Gras std %r9,16(%r6) 322fe8fb19SBen Gras std %r10,24(%r6) 332fe8fb19SBen Gras std %r11,32(%r6) 342fe8fb19SBen Gras std %r12,40(%r6) 352fe8fb19SBen Gras std %r13,48(%r6) 362fe8fb19SBen Gras std %r14,56(%r6) 372fe8fb19SBen Gras std %r15,64(%r6) 382fe8fb19SBen Gras std %r16,72(%r6) 392fe8fb19SBen Gras std %r17,80(%r6) 402fe8fb19SBen Gras std %r18,88(%r6) 412fe8fb19SBen Gras std %r19,96(%r6) 422fe8fb19SBen Gras std %r20,104(%r6) 432fe8fb19SBen Gras std %r21,112(%r6) 442fe8fb19SBen Gras std %r22,120(%r6) 452fe8fb19SBen Gras std %r23,128(%r6) 462fe8fb19SBen Gras std %r24,136(%r6) 472fe8fb19SBen Gras std %r25,144(%r6) 482fe8fb19SBen Gras std %r26,152(%r6) 492fe8fb19SBen Gras std %r27,160(%r6) 502fe8fb19SBen Gras std %r28,168(%r6) 512fe8fb19SBen Gras std %r29,176(%r6) 522fe8fb19SBen Gras std %r30,184(%r6) 532fe8fb19SBen Gras std %r31,192(%r6) 542fe8fb19SBen Gras 552fe8fb19SBen Gras li %r3,0 562fe8fb19SBen Gras blr 57*0a6a1f1dSLionel SambucEND(__setjmp14) 582fe8fb19SBen Gras 592fe8fb19SBen GrasENTRY(__longjmp14) 602fe8fb19SBen Gras ld %r8,8(%r6) # load r8-r31 612fe8fb19SBen Gras ld %r9,16(%r6) 622fe8fb19SBen Gras ld %r10,24(%r6) 632fe8fb19SBen Gras ld %r11,32(%r6) 642fe8fb19SBen Gras ld %r12,40(%r6) 652fe8fb19SBen Gras ld %r13,48(%r6) 662fe8fb19SBen Gras ld %r14,56(%r6) 672fe8fb19SBen Gras ld %r15,64(%r6) 682fe8fb19SBen Gras ld %r16,72(%r6) 692fe8fb19SBen Gras ld %r17,80(%r6) 702fe8fb19SBen Gras ld %r18,88(%r6) 712fe8fb19SBen Gras ld %r19,96(%r6) 722fe8fb19SBen Gras ld %r20,104(%r6) 732fe8fb19SBen Gras ld %r21,112(%r6) 742fe8fb19SBen Gras ld %r22,120(%r6) 752fe8fb19SBen Gras ld %r23,128(%r6) 762fe8fb19SBen Gras ld %r24,136(%r6) 772fe8fb19SBen Gras ld %r25,144(%r6) 782fe8fb19SBen Gras ld %r26,152(%r6) 792fe8fb19SBen Gras ld %r27,160(%r6) 802fe8fb19SBen Gras ld %r28,168(%r6) 812fe8fb19SBen Gras ld %r29,176(%r6) 822fe8fb19SBen Gras ld %r30,184(%r6) 832fe8fb19SBen Gras ld %r31,192(%r6) 842fe8fb19SBen Gras 852fe8fb19SBen Gras mr %r6,%r4 862fe8fb19SBen Gras mtlr %r11 872fe8fb19SBen Gras mtcr %r12 882fe8fb19SBen Gras mr %r2,%r9 892fe8fb19SBen Gras mr %r1,%r10 902fe8fb19SBen Gras addi %r4,%r3,100 # &sigmask 912fe8fb19SBen Gras li %r3,3 # SIG_SETMASK 922fe8fb19SBen Gras li %r5,0 93*0a6a1f1dSLionel Sambuc _DOSYSCALL(__sigprocmask14) # assume no error XXX 942fe8fb19SBen Gras or. %r3,%r6,%r6 952fe8fb19SBen Gras bnelr 962fe8fb19SBen Gras li %r3,1 972fe8fb19SBen Gras blr 98*0a6a1f1dSLionel SambucEND(__longjmp14) 99