| /* |
| * Copyright (c) 1990,1994 The University of Utah and |
| * the Computer Systems Laboratory (CSL). All rights reserved. |
| * |
| * Permission to use, copy, modify and distribute this software is hereby |
| * granted provided that (1) source code retains these copyright, permission, |
| * and disclaimer notices, and (2) redistributions including binaries |
| * reproduce the notices in supporting documentation, and (3) all advertising |
| * materials mentioning features or use of this software display the following |
| * acknowledgement: ``This product includes software developed by the |
| * Computer Systems Laboratory at the University of Utah.'' |
| * |
| * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS |
| * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF |
| * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. |
| * |
| * CSL requests users of this software to return to csl-dist@cs.utah.edu any |
| * improvements that they make and grant CSL redistribution rights. |
| * |
| * Utah $Hdr: _setjmp.s 1.9 94/12/16$ |
| */ |
| |
| .space $TEXT$ |
| .subspa $CODE$ |
| |
| /* |
| * The PA jmp_buf is 48 words arranged as follows: |
| * |
| * 0- 9: sigcontext |
| * 10-26: callee save GRs (r3-r18) and DP (r27) |
| * 27: callee save SRs (sr3) |
| * 28-47: callee save FRs (fr12-fr21) |
| */ |
| |
| /* |
| * int |
| * setjmp(env) |
| * jmp_buf env; |
| * |
| * This routine does not restore signal state. |
| */ |
| |
| .export setjmp,entry |
| .export _setjmp,entry |
| .proc |
| .callinfo |
| setjmp |
| _setjmp |
| .entry |
| |
| /* |
| * save sp and rp in sigcontext, skip the rest |
| */ |
| stw %r30,8(%r26) |
| stw %r2,24(%r26) |
| ldo 40(%r26),%r26 |
| |
| /* |
| * save dp and the callee saves registers |
| */ |
| stwm %r3,4(%r26) |
| stwm %r4,4(%r26) |
| stwm %r5,4(%r26) |
| stwm %r6,4(%r26) |
| stwm %r7,4(%r26) |
| stwm %r8,4(%r26) |
| stwm %r9,4(%r26) |
| stwm %r10,4(%r26) |
| stwm %r11,4(%r26) |
| stwm %r12,4(%r26) |
| stwm %r13,4(%r26) |
| stwm %r14,4(%r26) |
| stwm %r15,4(%r26) |
| stwm %r16,4(%r26) |
| stwm %r17,4(%r26) |
| stwm %r18,4(%r26) |
| stwm %r27,4(%r26) |
| |
| mfsp %sr3,%r9 |
| stwm %r9,4(%r26) |
| |
| bv 0(%r2) |
| copy %r0,%r28 |
| .exit |
| .procend |
| |
| /* |
| * void |
| * longjmp(env, val) |
| * jmp_buf env; |
| * int val; |
| * |
| * This routine does not retore signal state. |
| * This routine does not override a zero val. |
| */ |
| |
| .export longjmp,entry |
| .export _longjmp,entry |
| .proc |
| .callinfo |
| longjmp |
| _longjmp |
| |
| .entry |
| |
| /* |
| * restore sp and rp |
| */ |
| ldw 8(%r26),%r30 |
| ldw 24(%r26),%r2 |
| ldo 40(%r26),%r26 |
| |
| /* |
| * restore callee saves registers |
| */ |
| ldwm 4(%r26),%r3 |
| ldwm 4(%r26),%r4 |
| ldwm 4(%r26),%r5 |
| ldwm 4(%r26),%r6 |
| ldwm 4(%r26),%r7 |
| ldwm 4(%r26),%r8 |
| ldwm 4(%r26),%r9 |
| ldwm 4(%r26),%r10 |
| ldwm 4(%r26),%r11 |
| ldwm 4(%r26),%r12 |
| ldwm 4(%r26),%r13 |
| ldwm 4(%r26),%r14 |
| ldwm 4(%r26),%r15 |
| ldwm 4(%r26),%r16 |
| ldwm 4(%r26),%r17 |
| ldwm 4(%r26),%r18 |
| ldwm 4(%r26),%r27 |
| |
| ldwm 4(%r26),%r9 |
| mtsp %r9,%sr3 |
| |
| bv 0(%r2) |
| copy %r25,%r28 |
| .exit |
| .procend |