4
#if defined(__arm__) || defined(__thumb__)
6
* All callee preserved registers:
7
* v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7
18
* onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
19
* All else recovered by under/over(flow) handling.
28
/* necv70 was 9 as well. */
30
#if defined(__m68k__) || defined(__mc68000__)
32
* onsstack,sigmask,sp,pc,psl,d2-d7,a2-a6,
34
* All else recovered by under/over(flow) handling.
39
#if defined(__mc68hc11__) || defined(__mc68hc12__) || defined(__mc68hc1x__)
41
* D, X, Y are not saved.
42
* Only take into account the pseudo soft registers (max 32).
47
#if defined(__Z8001__) || defined(__Z8002__)
54
* onsstack,sigmask,sp,pc,npc,psr,g1,o0,wbcnt (sigcontext).
55
* All else recovered by under/over(flow) handling.
60
#if defined(__CYGWIN__) && !defined (_JBLEN)
61
#define _JBLEN (13 * 4)
62
#elif defined (__i386__)
63
#if defined(__unix__) || defined(__rtems__)
66
#include "setjmp-dj.h"
71
#define _JBTYPE long long
80
/* Only 8 words are currently needed. 10 gives us some slop if we need
87
#define _JBTYPE long long
89
#ifdef __mips_soft_float
106
/* same as H8/300 but registers are twice as big */
111
#if defined (__H8300S__) || defined (__H8300SX__)
112
/* same as H8/300 but registers are twice as big */
124
#define _JBTYPE long long
140
#define _JBTYPE double
143
#ifdef __MICROBLAZE__
145
#define _JBTYPE unsigned int
149
/* %r30, %r2-%r18, %r27, pad, %fr12-%fr15.
150
Note space exists for the FP registers, but they are not
155
#if defined(__mn10300__) || defined(__mn10200__)
165
/* I think our setjmp is saving 15 regs at the moment. Gives us one word
166
slop if we need to expand. */
190
#define _JBLEN ((64 /* GPR */ + (2*2) /* ACs */ + 18 /* CRs */) / 2)
191
#define _JBTYPE double
195
#define _JBLEN (68/2) /* room for 68 32-bit regs */
196
#define _JBTYPE double
207
#if (defined(__CR16__) || defined(__CR16C__) ||defined(__CR16CP__))
208
/* r6, r7, r8, r9, r10, r11, r12 (r12L, r12H),
209
* r13 (r13L, r13H), ra(raL, raH), sp(spL, spH) */
211
#define _JBTYPE unsigned short
227
/* Using a layout compatible with GCC's built-in. */
229
#define _JBTYPE unsigned long
238
#define _JBTYPE __vector signed int
242
/* 4 GPRs plus SP plus PC. */
247
/* 16 GPRs, pc, hi, lo */
260
#if defined(__r8c_cpu__) || defined(__m16c_cpu__)
261
#define _JBLEN (22/2)
263
#define _JBLEN (34/2)
265
#define _JBTYPE unsigned short
266
#endif /* __m32c__ */
272
#ifdef EMSCRIPTEN /* Not that this can actually work... */
274
#define _JBTYPE unsigned short
279
typedef _JBTYPE jmp_buf[_JBLEN];
281
typedef int jmp_buf[_JBLEN];
287
#if defined(__CYGWIN__) || defined(__rtems__)
294
/* POSIX sigsetjmp/siglongjmp macros */
296
typedef _JBTYPE sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (_JBTYPE))];
298
typedef int sigjmp_buf[_JBLEN+1+(sizeof (sigset_t)/sizeof (int))];
301
#define _SAVEMASK _JBLEN
302
#define _SIGMASK (_JBLEN+1)
305
# define _CYGWIN_WORKING_SIGSETJMP
308
#ifdef _POSIX_THREADS
309
#define __SIGMASK_FUNC pthread_sigmask
311
#define __SIGMASK_FUNC sigprocmask
314
#if defined(__GNUC__)
316
#define sigsetjmp(env, savemask) \
319
sigjmp_buf *_sjbuf = &(env); \
320
((*_sjbuf)[_SAVEMASK] = savemask,\
321
__SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *)((*_sjbuf) + _SIGMASK)),\
325
#define siglongjmp(env, val) \
328
sigjmp_buf *_sjbuf = &(env); \
329
((((*_sjbuf)[_SAVEMASK]) ? \
330
__SIGMASK_FUNC (SIG_SETMASK, (sigset_t *)((*_sjbuf) + _SIGMASK), 0)\
332
longjmp (*_sjbuf, val)); \
335
#else /* !__GNUC__ */
337
#define sigsetjmp(env, savemask) ((env)[_SAVEMASK] = savemask,\
338
__SIGMASK_FUNC (SIG_SETMASK, 0, (sigset_t *) ((env) + _SIGMASK)),\
341
#define siglongjmp(env, val) ((((env)[_SAVEMASK])?\
342
__SIGMASK_FUNC (SIG_SETMASK, (sigset_t *) ((env) + _SIGMASK), 0):0),\
347
/* POSIX _setjmp/_longjmp, maintained for XSI compatibility. These
348
are equivalent to sigsetjmp/siglongjmp when not saving the signal mask.
349
New applications should use sigsetjmp/siglongjmp instead. */
351
extern void _longjmp(jmp_buf, int);
352
extern int _setjmp(jmp_buf);
354
#define _setjmp(env) sigsetjmp ((env), 0)
355
#define _longjmp(env, val) siglongjmp ((env), (val))
361
#endif /* __CYGWIN__ or __rtems__ */