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