2 * setjmp and longjmp, but our own because some (stupid) c libraries
3 * assume longjmp is only used to move up the stack, and error out
7 typedef struct Label Label;
10 #if defined(__linux__)
16 #elif defined (__i386__) && (defined(__FreeBSD__) || defined(__linux__) || defined(__OpenBSD__))
26 #elif defined(__APPLE__)
33 ulong sp; /* callee saved: r1 */
34 ulong toc; /* callee saved: r2 */
35 ulong gpr[19]; /* callee saved: r13-r31 */
36 // XXX: currently do not save vector registers or floating-point state
38 // uvlong fpr[18]; /* callee saved: f14-f31 */
39 // ulong vr[4*12]; /* callee saved: v20-v31, 256-bits each */
41 #elif defined(__sun__)
44 ulong input[8]; /* %i registers */
45 ulong local[8]; /* %l registers */
49 #elif defined(__powerpc__)
56 ulong sp; /* callee saved: r1 */
57 ulong toc; /* callee saved: r2 */
58 ulong gpr[19]; /* callee saved: r13-r31 */
59 // XXX: currently do not save vector registers or floating-point state
61 // uvlong fpr[18]; /* callee saved: f14-f31 */
62 // ulong vr[4*12]; /* callee saved: v20-v31, 256-bits each */
65 #error "Unknown or unsupported architecture"