| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | /* setjmp for SH-5.   Copyright (C) 2001 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the GNU C Library; see the file COPYING.LIB.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */#define _SETJMP_H#define _ASM#include <bits/setjmp.h>#define	INTEGER(reg,offset)	st.q	r2, offset*8, reg#define	DOUBLE(reg,offset)	fst.d	r2, offset*8, reg	.file	"setjmp.S"	.section .text64,"xa"	.align 2	.global	__sigsetjmp		.type	__sigsetjmp,@function__sigsetjmp:	/*	 *	extern int __sigsetjmp(jmp_buf env, int savemask);	 *	 *	r2 == env	 *	r3 == savemask	 *	r4 == temporary	 */			/* callee-save registers R10-R16 */	INTEGER(r10, __SETJMP_INT(0))	INTEGER(r11, __SETJMP_INT(1))	INTEGER(r12, __SETJMP_INT(2))	INTEGER(r13, __SETJMP_INT(3))	INTEGER(r14, __SETJMP_INT(4))	INTEGER(r15, __SETJMP_INT(5))	INTEGER(r16, __SETJMP_INT(6))			/* callee-save registers R28-R35 */	INTEGER(r28, __SETJMP_INT(7))	INTEGER(r29, __SETJMP_INT(8))	INTEGER(r30, __SETJMP_INT(9))	INTEGER(r31, __SETJMP_INT(10))	INTEGER(r32, __SETJMP_INT(11))	INTEGER(r33, __SETJMP_INT(12))	INTEGER(r34, __SETJMP_INT(13))	INTEGER(r35, __SETJMP_INT(14))			/* callee-save registers R44-R59 */	INTEGER(r44, __SETJMP_INT(15))	INTEGER(r45, __SETJMP_INT(16))	INTEGER(r46, __SETJMP_INT(17))	INTEGER(r47, __SETJMP_INT(18))	INTEGER(r48, __SETJMP_INT(19))	INTEGER(r49, __SETJMP_INT(20))	INTEGER(r50, __SETJMP_INT(21))	INTEGER(r51, __SETJMP_INT(22))	INTEGER(r52, __SETJMP_INT(23))	INTEGER(r53, __SETJMP_INT(24))	INTEGER(r54, __SETJMP_INT(25))	INTEGER(r55, __SETJMP_INT(26))	INTEGER(r56, __SETJMP_INT(27))	INTEGER(r57, __SETJMP_INT(28))	INTEGER(r58, __SETJMP_INT(29))	INTEGER(r59, __SETJMP_INT(30))	#if __SETJMP_NUM_INT != 31	#error	__SETJMP_NUM_INT does agree with expected value	#endif#if __SETJMP_NUM_DBL > 0			/* callee-save registers FR12-FR15 */	DOUBLE(d12, __SETJMP_DBL(0))	DOUBLE(d14, __SETJMP_DBL(1))			/* callee-save registers FR36-FR63 */	DOUBLE(d36, __SETJMP_DBL(2))	DOUBLE(d38, __SETJMP_DBL(3))	DOUBLE(d40, __SETJMP_DBL(4))	DOUBLE(d42, __SETJMP_DBL(5))	DOUBLE(d44, __SETJMP_DBL(6))	DOUBLE(d46, __SETJMP_DBL(7))	DOUBLE(d48, __SETJMP_DBL(8))	DOUBLE(d50, __SETJMP_DBL(9))	DOUBLE(d52, __SETJMP_DBL(10))	DOUBLE(d54, __SETJMP_DBL(11))	DOUBLE(d56, __SETJMP_DBL(12))	DOUBLE(d58, __SETJMP_DBL(13))	DOUBLE(d60, __SETJMP_DBL(14))	DOUBLE(d62, __SETJMP_DBL(15))	#if __SETJMP_NUM_DBL != 16	#error	__SETJMP_NUM_DBL does agree with expected value	#endif#endif	/* __SETJMP_NUM_DBL > 0 */			/* callee-save registers TR5-TR7 */	gettr   tr5, r4	INTEGER(r4, __SETJMP_TRG(0))	gettr   tr6, r4	INTEGER(r4, __SETJMP_TRG(1))	gettr   tr7, r4	INTEGER(r4, __SETJMP_TRG(2))	#if __SETJMP_NUM_TRG != 3	#error	__SETJMP_NUM_TRG does agree with expected value	#endif			/* save Linkage Register (LR) for longjmp return */	INTEGER(r18, __SETJMP_LR)			/*			 *	return a value of zero if call is __sigsetjmp().			 *	This is so that caller of setjmp() knows			 *	we have retruned via setjmp, and not via longjmp.			 *	R0 is the result register.			 */	ptabs/l	r18, tr0	/* return to caller */	movi	0, r2	/* return value */	blink	tr0, r63
 |