xref: /utopia/UTPA2-700.0.x/projects/tools/lint/aeon_include/machine/setjmp.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi 
2*53ee8cc1Swenshuai.xi _BEGIN_STD_C
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #if defined(__arm__) || defined(__thumb__)
5*53ee8cc1Swenshuai.xi /*
6*53ee8cc1Swenshuai.xi  * All callee preserved registers:
7*53ee8cc1Swenshuai.xi  * v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7
8*53ee8cc1Swenshuai.xi  */
9*53ee8cc1Swenshuai.xi #define _JBLEN 23
10*53ee8cc1Swenshuai.xi #endif
11*53ee8cc1Swenshuai.xi 
12*53ee8cc1Swenshuai.xi #if defined(__AVR__)
13*53ee8cc1Swenshuai.xi #define _JBLEN 24
14*53ee8cc1Swenshuai.xi #endif
15*53ee8cc1Swenshuai.xi 
16*53ee8cc1Swenshuai.xi #ifdef __sparc__
17*53ee8cc1Swenshuai.xi /*
18*53ee8cc1Swenshuai.xi  * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
19*53ee8cc1Swenshuai.xi  * All else recovered by under/over(flow) handling.
20*53ee8cc1Swenshuai.xi  */
21*53ee8cc1Swenshuai.xi #define	_JBLEN	13
22*53ee8cc1Swenshuai.xi #endif
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi /* necv70 was 9 as well. */
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi #ifdef __mc68000__
27*53ee8cc1Swenshuai.xi /*
28*53ee8cc1Swenshuai.xi  * onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6,
29*53ee8cc1Swenshuai.xi  * fp2-fp7	for 68881.
30*53ee8cc1Swenshuai.xi  * All else recovered by under/over(flow) handling.
31*53ee8cc1Swenshuai.xi  */
32*53ee8cc1Swenshuai.xi #define	_JBLEN	34
33*53ee8cc1Swenshuai.xi #endif
34*53ee8cc1Swenshuai.xi 
35*53ee8cc1Swenshuai.xi #if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
36*53ee8cc1Swenshuai.xi /*
37*53ee8cc1Swenshuai.xi  * D, X, Y are not saved.
38*53ee8cc1Swenshuai.xi  * Only take into account the pseudo soft registers (max 32).
39*53ee8cc1Swenshuai.xi  */
40*53ee8cc1Swenshuai.xi #define _JBLEN  32
41*53ee8cc1Swenshuai.xi #endif
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi #if defined(__Z8001__) || defined(__Z8002__)
44*53ee8cc1Swenshuai.xi /* 16 regs + pc */
45*53ee8cc1Swenshuai.xi #define _JBLEN 20
46*53ee8cc1Swenshuai.xi #endif
47*53ee8cc1Swenshuai.xi 
48*53ee8cc1Swenshuai.xi #ifdef _AM29K
49*53ee8cc1Swenshuai.xi /*
50*53ee8cc1Swenshuai.xi  * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
51*53ee8cc1Swenshuai.xi  * All else recovered by under/over(flow) handling.
52*53ee8cc1Swenshuai.xi  */
53*53ee8cc1Swenshuai.xi #define	_JBLEN	9
54*53ee8cc1Swenshuai.xi #endif
55*53ee8cc1Swenshuai.xi 
56*53ee8cc1Swenshuai.xi #if defined(__CYGWIN__) && !defined (_JBLEN)
57*53ee8cc1Swenshuai.xi #define _JBLEN (13 * 4)
58*53ee8cc1Swenshuai.xi #elif defined (__i386__)
59*53ee8cc1Swenshuai.xi #if defined(__unix__) || defined(__rtems__)
60*53ee8cc1Swenshuai.xi # define _JBLEN	9
61*53ee8cc1Swenshuai.xi #else
62*53ee8cc1Swenshuai.xi #include "setjmp-dj.h"
63*53ee8cc1Swenshuai.xi #endif
64*53ee8cc1Swenshuai.xi #endif
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi #ifdef __i960__
67*53ee8cc1Swenshuai.xi #define _JBLEN 35
68*53ee8cc1Swenshuai.xi #endif
69*53ee8cc1Swenshuai.xi 
70*53ee8cc1Swenshuai.xi #ifdef __M32R__
71*53ee8cc1Swenshuai.xi /* Only 8 words are currently needed.  10 gives us some slop if we need
72*53ee8cc1Swenshuai.xi    to expand.  */
73*53ee8cc1Swenshuai.xi #define _JBLEN 10
74*53ee8cc1Swenshuai.xi #endif
75*53ee8cc1Swenshuai.xi 
76*53ee8cc1Swenshuai.xi #ifdef __mips__
77*53ee8cc1Swenshuai.xi #ifdef __mips64
78*53ee8cc1Swenshuai.xi #define _JBTYPE long long
79*53ee8cc1Swenshuai.xi #endif
80*53ee8cc1Swenshuai.xi #ifdef __mips_soft_float
81*53ee8cc1Swenshuai.xi #define _JBLEN 11
82*53ee8cc1Swenshuai.xi #else
83*53ee8cc1Swenshuai.xi #define _JBLEN 23
84*53ee8cc1Swenshuai.xi #endif
85*53ee8cc1Swenshuai.xi #endif
86*53ee8cc1Swenshuai.xi 
87*53ee8cc1Swenshuai.xi #ifdef __m88000__
88*53ee8cc1Swenshuai.xi #define _JBLEN 21
89*53ee8cc1Swenshuai.xi #endif
90*53ee8cc1Swenshuai.xi 
91*53ee8cc1Swenshuai.xi #ifdef __H8300__
92*53ee8cc1Swenshuai.xi #define _JBLEN 5
93*53ee8cc1Swenshuai.xi #define _JBTYPE int
94*53ee8cc1Swenshuai.xi #endif
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi #ifdef __H8300H__
97*53ee8cc1Swenshuai.xi /* same as H8/300 but registers are twice as big */
98*53ee8cc1Swenshuai.xi #define _JBLEN 5
99*53ee8cc1Swenshuai.xi #define _JBTYPE long
100*53ee8cc1Swenshuai.xi #endif
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #if defined (__H8300S__) || defined (__H8300SX__)
103*53ee8cc1Swenshuai.xi /* same as H8/300 but registers are twice as big */
104*53ee8cc1Swenshuai.xi #define _JBLEN 5
105*53ee8cc1Swenshuai.xi #define _JBTYPE long
106*53ee8cc1Swenshuai.xi #endif
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi #ifdef __H8500__
109*53ee8cc1Swenshuai.xi #define _JBLEN 4
110*53ee8cc1Swenshuai.xi #endif
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi #ifdef  __sh__
113*53ee8cc1Swenshuai.xi #if __SH5__
114*53ee8cc1Swenshuai.xi #define _JBLEN 50
115*53ee8cc1Swenshuai.xi #define _JBTYPE long long
116*53ee8cc1Swenshuai.xi #else
117*53ee8cc1Swenshuai.xi #define _JBLEN 20
118*53ee8cc1Swenshuai.xi #endif /* __SH5__ */
119*53ee8cc1Swenshuai.xi #endif
120*53ee8cc1Swenshuai.xi 
121*53ee8cc1Swenshuai.xi #ifdef  __v800
122*53ee8cc1Swenshuai.xi #define _JBLEN 28
123*53ee8cc1Swenshuai.xi #endif
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi #ifdef __PPC__
126*53ee8cc1Swenshuai.xi #ifdef __ALTIVEC__
127*53ee8cc1Swenshuai.xi #define _JBLEN 64
128*53ee8cc1Swenshuai.xi #else
129*53ee8cc1Swenshuai.xi #define _JBLEN 32
130*53ee8cc1Swenshuai.xi #endif
131*53ee8cc1Swenshuai.xi #define _JBTYPE double
132*53ee8cc1Swenshuai.xi #endif
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi #ifdef __hppa__
135*53ee8cc1Swenshuai.xi /* %r30, %r2-%r18, %r27, pad, %fr12-%fr15.
136*53ee8cc1Swenshuai.xi    Note space exists for the FP registers, but they are not
137*53ee8cc1Swenshuai.xi    saved.  */
138*53ee8cc1Swenshuai.xi #define _JBLEN 28
139*53ee8cc1Swenshuai.xi #endif
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi #if defined(__mn10300__) || defined(__mn10200__)
142*53ee8cc1Swenshuai.xi #ifdef __AM33_2__
143*53ee8cc1Swenshuai.xi #define _JBLEN 26
144*53ee8cc1Swenshuai.xi #else
145*53ee8cc1Swenshuai.xi /* A guess */
146*53ee8cc1Swenshuai.xi #define _JBLEN 10
147*53ee8cc1Swenshuai.xi #endif
148*53ee8cc1Swenshuai.xi #endif
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi #ifdef __v850
151*53ee8cc1Swenshuai.xi /* I think our setjmp is saving 15 regs at the moment.  Gives us one word
152*53ee8cc1Swenshuai.xi    slop if we need to expand.  */
153*53ee8cc1Swenshuai.xi #define _JBLEN 16
154*53ee8cc1Swenshuai.xi #endif
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi #if defined(_C4x)
157*53ee8cc1Swenshuai.xi #define _JBLEN 10
158*53ee8cc1Swenshuai.xi #endif
159*53ee8cc1Swenshuai.xi #if defined(_C3x)
160*53ee8cc1Swenshuai.xi #define _JBLEN 9
161*53ee8cc1Swenshuai.xi #endif
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi #ifdef __TIC80__
164*53ee8cc1Swenshuai.xi #define _JBLEN 13
165*53ee8cc1Swenshuai.xi #endif
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi #ifdef __D10V__
168*53ee8cc1Swenshuai.xi #define _JBLEN 8
169*53ee8cc1Swenshuai.xi #endif
170*53ee8cc1Swenshuai.xi 
171*53ee8cc1Swenshuai.xi #ifdef __D30V__
172*53ee8cc1Swenshuai.xi #define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2)
173*53ee8cc1Swenshuai.xi #define _JBTYPE double
174*53ee8cc1Swenshuai.xi #endif
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi #ifdef __frv__
177*53ee8cc1Swenshuai.xi #define _JBLEN (68/2)  /* room for 68 32-bit regs */
178*53ee8cc1Swenshuai.xi #define _JBTYPE double
179*53ee8cc1Swenshuai.xi #endif
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi #ifdef __CRX__
182*53ee8cc1Swenshuai.xi #define _JBLEN 9
183*53ee8cc1Swenshuai.xi #endif
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi #ifdef __fr30__
186*53ee8cc1Swenshuai.xi #define _JBLEN 10
187*53ee8cc1Swenshuai.xi #endif
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi #ifdef __iq2000__
190*53ee8cc1Swenshuai.xi #define _JBLEN 32
191*53ee8cc1Swenshuai.xi #endif
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi #ifdef __mcore__
194*53ee8cc1Swenshuai.xi #define _JBLEN 16
195*53ee8cc1Swenshuai.xi #endif
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi #ifdef __MMIX__
198*53ee8cc1Swenshuai.xi /* Using a layout compatible with GCC's built-in.  */
199*53ee8cc1Swenshuai.xi #define _JBLEN 5
200*53ee8cc1Swenshuai.xi #define _JBTYPE unsigned long
201*53ee8cc1Swenshuai.xi #endif
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi #ifdef __mt__
204*53ee8cc1Swenshuai.xi #define _JBLEN 16
205*53ee8cc1Swenshuai.xi #endif
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi #ifdef __xstormy16__
208*53ee8cc1Swenshuai.xi /* 4 GPRs plus SP plus PC. */
209*53ee8cc1Swenshuai.xi #define _JBLEN 8
210*53ee8cc1Swenshuai.xi #endif
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi #ifdef __CRIS__
213*53ee8cc1Swenshuai.xi #define _JBLEN 18
214*53ee8cc1Swenshuai.xi #endif
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi #ifdef __m32c__
217*53ee8cc1Swenshuai.xi #if defined(__r8c_cpu__) || defined(__m16c_cpu__)
218*53ee8cc1Swenshuai.xi #define _JBLEN (22/2)
219*53ee8cc1Swenshuai.xi #else
220*53ee8cc1Swenshuai.xi #define _JBLEN (34/2)
221*53ee8cc1Swenshuai.xi #endif
222*53ee8cc1Swenshuai.xi #define _JBTYPE unsigned short
223*53ee8cc1Swenshuai.xi #endif /* __m32c__ */
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi #if defined (__aeon__) || defined (__AEON__) || defined (__ba__) || defined (__BA__)
226*53ee8cc1Swenshuai.xi /* For now, save the whole register file.  */
227*53ee8cc1Swenshuai.xi #define _JBLEN 31
228*53ee8cc1Swenshuai.xi #define _JBTYPE unsigned long
229*53ee8cc1Swenshuai.xi #endif
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi #ifdef _JBLEN
232*53ee8cc1Swenshuai.xi #ifdef _JBTYPE
233*53ee8cc1Swenshuai.xi typedef	_JBTYPE jmp_buf[_JBLEN];
234*53ee8cc1Swenshuai.xi #else
235*53ee8cc1Swenshuai.xi typedef	int jmp_buf[_JBLEN];
236*53ee8cc1Swenshuai.xi #endif
237*53ee8cc1Swenshuai.xi #endif
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi _END_STD_C
240*53ee8cc1Swenshuai.xi 
241*53ee8cc1Swenshuai.xi #if defined(__CYGWIN__) || defined(__rtems__)
242*53ee8cc1Swenshuai.xi #include <signal.h>
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi #ifdef __cplusplus
245*53ee8cc1Swenshuai.xi extern "C" {
246*53ee8cc1Swenshuai.xi #endif
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi /* POSIX sigsetjmp/siglongjmp macros */
249*53ee8cc1Swenshuai.xi typedef int sigjmp_buf[_JBLEN+2];
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi #define _SAVEMASK	_JBLEN
252*53ee8cc1Swenshuai.xi #define _SIGMASK	(_JBLEN+1)
253*53ee8cc1Swenshuai.xi 
254*53ee8cc1Swenshuai.xi #ifdef __CYGWIN__
255*53ee8cc1Swenshuai.xi # define _CYGWIN_WORKING_SIGSETJMP
256*53ee8cc1Swenshuai.xi #endif
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi #if defined(__GNUC__)
259*53ee8cc1Swenshuai.xi 
260*53ee8cc1Swenshuai.xi #define sigsetjmp(env, savemask) \
261*53ee8cc1Swenshuai.xi             ({ \
262*53ee8cc1Swenshuai.xi               sigjmp_buf *_sjbuf = &(env); \
263*53ee8cc1Swenshuai.xi               ((*_sjbuf)[_SAVEMASK] = savemask,\
264*53ee8cc1Swenshuai.xi               sigprocmask (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
265*53ee8cc1Swenshuai.xi               setjmp (*_sjbuf)); \
266*53ee8cc1Swenshuai.xi             })
267*53ee8cc1Swenshuai.xi 
268*53ee8cc1Swenshuai.xi #define siglongjmp(env, val) \
269*53ee8cc1Swenshuai.xi             ({ \
270*53ee8cc1Swenshuai.xi               sigjmp_buf *_sjbuf = &(env); \
271*53ee8cc1Swenshuai.xi               ((((*_sjbuf)[_SAVEMASK]) ? \
272*53ee8cc1Swenshuai.xi                sigprocmask (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
273*53ee8cc1Swenshuai.xi                : 0), \
274*53ee8cc1Swenshuai.xi                longjmp (*_sjbuf, val)); \
275*53ee8cc1Swenshuai.xi             })
276*53ee8cc1Swenshuai.xi 
277*53ee8cc1Swenshuai.xi #else /* !__GNUC__ */
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi #define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
280*53ee8cc1Swenshuai.xi                sigprocmask (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
281*53ee8cc1Swenshuai.xi                setjmp (env))
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi #define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
284*53ee8cc1Swenshuai.xi                sigprocmask (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
285*53ee8cc1Swenshuai.xi                longjmp (env, val))
286*53ee8cc1Swenshuai.xi 
287*53ee8cc1Swenshuai.xi #endif
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi #ifdef __cplusplus
290*53ee8cc1Swenshuai.xi }
291*53ee8cc1Swenshuai.xi #endif
292*53ee8cc1Swenshuai.xi #endif /* __CYGWIN__ or __rtems__ */
293