141 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* 
 | 
						|
 * 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
 |