20000317 sourceware import
This commit is contained in:
140
libgloss/pa/setjmp.S
Normal file
140
libgloss/pa/setjmp.S
Normal file
@ -0,0 +1,140 @@
|
||||
/*
|
||||
* 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
|
Reference in New Issue
Block a user