• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2013.11/arm-none-eabi/include/machine/
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(__aarch64__)
13#define _JBLEN 22
14#define _JBTYPE long long
15#endif
16
17#if defined(__AVR__)
18#define _JBLEN 24
19#endif
20
21#ifdef __sparc__
22/*
23 * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
24 * All else recovered by under/over(flow) handling.
25 */
26#define	_JBLEN	13
27#endif
28
29#ifdef __BFIN__
30#define _JBLEN  40
31#endif
32
33#ifdef __epiphany__
34/* All callee preserved registers: r4-r10,fp, sp, lr,r15, r32-r39  */
35#define _JBTYPE long long
36#define _JBLEN 10
37#endif
38
39/* necv70 was 9 as well. */
40
41#if defined(__m68k__) || defined(__mc68000__)
42/*
43 * onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6,
44 * fp2-fp7	for 68881.
45 * All else recovered by under/over(flow) handling.
46 */
47#define	_JBLEN	34
48#endif
49
50#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
51/*
52 * D, X, Y are not saved.
53 * Only take into account the pseudo soft registers (max 32).
54 */
55#define _JBLEN  32
56#endif
57
58#if defined(__Z8001__) || defined(__Z8002__)
59/* 16 regs + pc */
60#define _JBLEN 20
61#endif
62
63#ifdef _AM29K
64/*
65 * onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
66 * All else recovered by under/over(flow) handling.
67 */
68#define	_JBLEN	9
69#endif
70
71#ifdef __i386__
72# if defined(__CYGWIN__) && !defined (_JBLEN)
73#  define _JBLEN (13 * 4)
74# elif defined(__unix__) || defined(__rtems__)
75#  define _JBLEN	9
76# else
77#  include "setjmp-dj.h"
78# endif
79#endif
80
81#ifdef __x86_64__
82# ifdef __CYGWIN__
83#  define _JBTYPE long
84#  define _JBLEN  32
85# else
86#  define _JBTYPE long long
87#  define _JBLEN  8
88# endif
89#endif
90
91#ifdef __i960__
92#define _JBLEN 35
93#endif
94
95#ifdef __M32R__
96/* Only 8 words are currently needed.  10 gives us some slop if we need
97   to expand.  */
98#define _JBLEN 10
99#endif
100
101#ifdef __mips__
102#ifdef __mips64
103#define _JBTYPE long long
104#endif
105#ifdef __mips_soft_float
106#define _JBLEN 11
107#else
108#define _JBLEN 23
109#endif
110#endif
111
112#ifdef __m88000__
113#define _JBLEN 21
114#endif
115
116#ifdef __H8300__
117#define _JBLEN 5
118#define _JBTYPE int
119#endif
120
121#ifdef __H8300H__
122/* same as H8/300 but registers are twice as big */
123#define _JBLEN 5
124#define _JBTYPE long
125#endif
126
127#if defined (__H8300S__) || defined (__H8300SX__)
128/* same as H8/300 but registers are twice as big */
129#define _JBLEN 5
130#define _JBTYPE long
131#endif
132
133#ifdef __H8500__
134#define _JBLEN 4
135#endif
136
137#ifdef  __sh__
138#if __SH5__
139#define _JBLEN 50
140#define _JBTYPE long long
141#else
142#define _JBLEN 20
143#endif /* __SH5__ */
144#endif
145
146#ifdef  __v800
147#define _JBLEN 28
148#endif
149
150#ifdef __PPC__
151#ifdef __ALTIVEC__
152#define _JBLEN 64
153#else
154#define _JBLEN 32
155#endif
156#define _JBTYPE double
157#endif
158
159#ifdef __MICROBLAZE__
160#define _JBLEN  20
161#define _JBTYPE unsigned int
162#endif
163
164#ifdef __hppa__
165/* %r30, %r2-%r18, %r27, pad, %fr12-%fr15.
166   Note space exists for the FP registers, but they are not
167   saved.  */
168#define _JBLEN 28
169#endif
170
171#if defined(__mn10300__) || defined(__mn10200__)
172#ifdef __AM33_2__
173#define _JBLEN 26
174#else
175/* A guess */
176#define _JBLEN 10
177#endif
178#endif
179
180#ifdef __v850
181/* I think our setjmp is saving 15 regs at the moment.  Gives us one word
182   slop if we need to expand.  */
183#define _JBLEN 16
184#endif
185
186#if defined(_C4x)
187#define _JBLEN 10
188#endif
189#if defined(_C3x)
190#define _JBLEN 9
191#endif
192
193#ifdef __TMS320C6X__
194#define _JBLEN 13
195#endif
196
197#ifdef __TIC80__
198#define _JBLEN 13
199#endif
200
201#ifdef __D10V__
202#define _JBLEN 8
203#endif
204
205#ifdef __D30V__
206#define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2)
207#define _JBTYPE double
208#endif
209
210#ifdef __frv__
211#define _JBLEN (68/2)  /* room for 68 32-bit regs */
212#define _JBTYPE double
213#endif
214
215#ifdef __moxie__
216#define _JBLEN 16
217#endif
218
219#ifdef __CRX__
220#define _JBLEN 9
221#endif
222
223#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
224/* r6, r7, r8, r9, r10, r11, r12 (r12L, r12H),
225 * r13 (r13L, r13H), ra(raL, raH), sp(spL, spH) */
226#define _JBLEN 14
227#define _JBTYPE unsigned short
228#endif
229
230#ifdef __fr30__
231#define _JBLEN 10
232#endif
233
234#ifdef __iq2000__
235#define _JBLEN 32
236#endif
237
238#ifdef __mcore__
239#define _JBLEN 16
240#endif
241
242#ifdef __MMIX__
243/* Using a layout compatible with GCC's built-in.  */
244#define _JBLEN 5
245#define _JBTYPE unsigned long
246#endif
247
248#ifdef __mt__
249#define _JBLEN 16
250#endif
251
252#ifdef __SPU__
253#define _JBLEN 50
254#define _JBTYPE __vector signed int
255#endif
256
257#ifdef __xstormy16__
258/* 4 GPRs plus SP plus PC. */
259#define _JBLEN 8
260#endif
261
262#ifdef __mep__
263/* 16 GPRs, pc, hi, lo */
264#define _JBLEN 19
265#endif
266
267#ifdef __CRIS__
268#define _JBLEN 18
269#endif
270
271#ifdef __lm32__
272#define _JBLEN 19
273#endif
274
275#ifdef __m32c__
276#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
277#define _JBLEN (22/2)
278#else
279#define _JBLEN (34/2)
280#endif
281#define _JBTYPE unsigned short
282#endif /* __m32c__ */
283
284#ifdef __MSP430__
285#define _JBLEN 9
286
287#ifdef __MSP430X_LARGE__
288#define _JBTYPE unsigned long
289#else
290#define _JBTYPE unsigned short
291#endif
292#endif
293
294#ifdef __RL78__
295/* Three banks of registers, SP, CS, ES, PC */
296#define _JBLEN (8*3+8)
297#define _JBTYPE unsigned char
298#endif
299
300/*
301 * There are two versions of setjmp()/longjmp():
302 *   1) Compiler (gcc) built-in versions.
303 *   2) Function-call versions.
304 *
305 * The built-in versions are used most of the time.  When used, gcc replaces
306 * calls to setjmp()/longjmp() with inline assembly code.  The built-in
307 * versions save/restore a variable number of registers.
308
309 * _JBLEN is set to 40 to be ultra-safe with the built-in versions.
310 * It only needs to be 12 for the function-call versions
311 * but this data structure is used by both versions.
312 */
313#ifdef __NIOS2__
314#define _JBLEN 40
315#define _JBTYPE unsigned long
316#endif
317
318#ifdef __RX__
319#define _JBLEN 0x44
320#endif
321
322#ifdef _AEABI_PORTABLE
323#include <sys/_types.h>
324extern _CONST int __aeabi_JMP_BUF_SIZE;
325typedef __int64_t jmp_buf[];
326#else
327#ifdef _JBLEN
328#ifdef _JBTYPE
329typedef	_JBTYPE jmp_buf[_JBLEN];
330#else
331typedef	int jmp_buf[_JBLEN];
332#endif
333#endif
334#endif /* _AEABI_PORTABLE */
335
336_END_STD_C
337
338#if defined(__CYGWIN__) || defined(__rtems__)
339#include <signal.h>
340
341#ifdef __cplusplus
342extern "C" {
343#endif
344
345/* POSIX sigsetjmp/siglongjmp macros */
346#ifdef _JBTYPE
347typedef _JBTYPE sigjmp_buf[_JBLEN+1+((sizeof (_JBTYPE) + sizeof (sigset_t) - 1)
348				     /sizeof (_JBTYPE))];
349#else
350typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))];
351#endif
352
353#define _SAVEMASK	_JBLEN
354#define _SIGMASK	(_JBLEN+1)
355
356#ifdef __CYGWIN__
357# define _CYGWIN_WORKING_SIGSETJMP
358#endif
359
360#ifdef _POSIX_THREADS
361#define __SIGMASK_FUNC pthread_sigmask
362#else
363#define __SIGMASK_FUNC sigprocmask
364#endif
365
366#if defined(__GNUC__)
367
368#define sigsetjmp(env, savemask) \
369            __extension__ \
370            ({ \
371              sigjmp_buf *_sjbuf = &(env); \
372              ((*_sjbuf)[_SAVEMASK] = savemask,\
373              __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
374              setjmp (*_sjbuf)); \
375            })
376
377#define siglongjmp(env, val) \
378            __extension__ \
379            ({ \
380              sigjmp_buf *_sjbuf = &(env); \
381              ((((*_sjbuf)[_SAVEMASK]) ? \
382               __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
383               : 0), \
384               longjmp (*_sjbuf, val)); \
385            })
386
387#else /* !__GNUC__ */
388
389#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
390               __SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
391               setjmp (env))
392
393#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
394               __SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
395               longjmp (env, val))
396
397#endif
398
399/* POSIX _setjmp/_longjmp, maintained for XSI compatibility.  These
400   are equivalent to sigsetjmp/siglongjmp when not saving the signal mask.
401   New applications should use sigsetjmp/siglongjmp instead. */
402#ifdef __CYGWIN__
403extern void _longjmp(jmp_buf, int);
404extern int _setjmp(jmp_buf);
405#else
406#define _setjmp(env)		sigsetjmp ((env), 0)
407#define _longjmp(env, val)	siglongjmp ((env), (val))
408#endif
409
410#ifdef __cplusplus
411}
412#endif
413#endif /* __CYGWIN__ or __rtems__ */
414