wow64: Add thunks for the I/O completion syscalls.
[wine.git] / include / msvcrt / setjmp.h
blob6576605cf1b230bca5d3730f66f9838d6179aeba
1 /*
2 * Setjmp/Longjmp definitions
4 * Copyright 2001 Francois Gouget.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #ifndef __WINE_SETJMP_H
21 #define __WINE_SETJMP_H
23 #include <corecrt.h>
25 #include <pshpack8.h>
27 #ifdef __i386__
29 typedef struct __JUMP_BUFFER
31 unsigned long Ebp;
32 unsigned long Ebx;
33 unsigned long Edi;
34 unsigned long Esi;
35 unsigned long Esp;
36 unsigned long Eip;
37 unsigned long Registration;
38 unsigned long TryLevel;
39 /* Start of new struct members */
40 unsigned long Cookie;
41 unsigned long UnwindFunc;
42 unsigned long UnwindData[6];
43 } _JUMP_BUFFER;
45 #define _JBLEN 16
46 #define _JBTYPE int
48 #elif defined(__x86_64__)
50 typedef DECLSPEC_ALIGN(16) struct _SETJMP_FLOAT128
52 unsigned __int64 Part[2];
53 } SETJMP_FLOAT128;
55 typedef DECLSPEC_ALIGN(16) struct _JUMP_BUFFER
57 unsigned __int64 Frame;
58 unsigned __int64 Rbx;
59 unsigned __int64 Rsp;
60 unsigned __int64 Rbp;
61 unsigned __int64 Rsi;
62 unsigned __int64 Rdi;
63 unsigned __int64 R12;
64 unsigned __int64 R13;
65 unsigned __int64 R14;
66 unsigned __int64 R15;
67 unsigned __int64 Rip;
68 unsigned long MxCsr;
69 unsigned short FpCsr;
70 unsigned short Spare;
71 SETJMP_FLOAT128 Xmm6;
72 SETJMP_FLOAT128 Xmm7;
73 SETJMP_FLOAT128 Xmm8;
74 SETJMP_FLOAT128 Xmm9;
75 SETJMP_FLOAT128 Xmm10;
76 SETJMP_FLOAT128 Xmm11;
77 SETJMP_FLOAT128 Xmm12;
78 SETJMP_FLOAT128 Xmm13;
79 SETJMP_FLOAT128 Xmm14;
80 SETJMP_FLOAT128 Xmm15;
81 } _JUMP_BUFFER;
83 #define _JBLEN 16
84 typedef SETJMP_FLOAT128 _JBTYPE;
86 #elif defined(__arm__)
88 typedef struct _JUMP_BUFFER
90 unsigned long Frame;
91 unsigned long R4;
92 unsigned long R5;
93 unsigned long R6;
94 unsigned long R7;
95 unsigned long R8;
96 unsigned long R9;
97 unsigned long R10;
98 unsigned long R11;
99 unsigned long Sp;
100 unsigned long Pc;
101 unsigned long Fpscr;
102 unsigned long long D[8];
103 } _JUMP_BUFFER;
105 #define _JBLEN 28
106 #define _JBTYPE int
108 #elif defined(__aarch64__)
110 typedef struct _JUMP_BUFFER
112 unsigned __int64 Frame;
113 unsigned __int64 Reserved;
114 unsigned __int64 X19;
115 unsigned __int64 X20;
116 unsigned __int64 X21;
117 unsigned __int64 X22;
118 unsigned __int64 X23;
119 unsigned __int64 X24;
120 unsigned __int64 X25;
121 unsigned __int64 X26;
122 unsigned __int64 X27;
123 unsigned __int64 X28;
124 unsigned __int64 Fp;
125 unsigned __int64 Lr;
126 unsigned __int64 Sp;
127 unsigned long Fpcr;
128 unsigned long Fpsr;
129 double D[8];
130 } _JUMP_BUFFER;
132 #define _JBLEN 24
133 #define _JBTYPE unsigned __int64
135 #else
137 #define _JBLEN 1
138 #define _JBTYPE int
140 #endif
142 typedef _JBTYPE jmp_buf[_JBLEN];
144 #ifdef __cplusplus
145 extern "C" {
146 #endif
148 _ACRTIMP void __cdecl longjmp(jmp_buf,int);
150 #ifdef _WIN64
151 # ifdef _UCRT
152 # define _setjmpex __intrinsic_setjmpex
153 # endif
154 # if defined(__GNUC__) || defined(__clang__)
155 _ACRTIMP int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmpex(jmp_buf,void*);
156 # define setjmp(buf) _setjmpex(buf,__builtin_frame_address(0))
157 # define setjmpex(buf) _setjmpex(buf,__builtin_frame_address(0))
158 # endif
159 #else /* _WIN64 */
160 # ifdef _UCRT
161 # define _setjmp __intrinsic_setjmp
162 # endif
163 # if defined(__GNUC__) || defined(__clang__)
164 _ACRTIMP int __cdecl __attribute__ ((__nothrow__,__returns_twice__)) _setjmp(jmp_buf);
165 # else
166 _ACRTIMP int __cdecl _setjmp(jmp_buf);
167 # endif
168 #endif /* _WIN64 */
170 #ifndef setjmp
171 #define setjmp _setjmp
172 #endif
174 #ifdef __cplusplus
176 #endif
178 #include <poppack.h>
180 #endif /* __WINE_SETJMP_H */