diff options
Diffstat (limited to 'src/lj_arch.h')
-rw-r--r-- | src/lj_arch.h | 440 |
1 files changed, 360 insertions, 80 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h index da53b162..6e22b1b2 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
@@ -8,6 +8,8 @@ | |||
8 | 8 | ||
9 | #include "lua.h" | 9 | #include "lua.h" |
10 | 10 | ||
11 | /* -- Target definitions -------------------------------------------------- */ | ||
12 | |||
11 | /* Target endianess. */ | 13 | /* Target endianess. */ |
12 | #define LUAJIT_LE 0 | 14 | #define LUAJIT_LE 0 |
13 | #define LUAJIT_BE 1 | 15 | #define LUAJIT_BE 1 |
@@ -19,12 +21,16 @@ | |||
19 | #define LUAJIT_ARCH_x64 2 | 21 | #define LUAJIT_ARCH_x64 2 |
20 | #define LUAJIT_ARCH_ARM 3 | 22 | #define LUAJIT_ARCH_ARM 3 |
21 | #define LUAJIT_ARCH_arm 3 | 23 | #define LUAJIT_ARCH_arm 3 |
22 | #define LUAJIT_ARCH_PPC 4 | 24 | #define LUAJIT_ARCH_ARM64 4 |
23 | #define LUAJIT_ARCH_ppc 4 | 25 | #define LUAJIT_ARCH_arm64 4 |
24 | #define LUAJIT_ARCH_PPCSPE 5 | 26 | #define LUAJIT_ARCH_PPC 5 |
25 | #define LUAJIT_ARCH_ppcspe 5 | 27 | #define LUAJIT_ARCH_ppc 5 |
26 | #define LUAJIT_ARCH_MIPS 6 | 28 | #define LUAJIT_ARCH_MIPS 6 |
27 | #define LUAJIT_ARCH_mips 6 | 29 | #define LUAJIT_ARCH_mips 6 |
30 | #define LUAJIT_ARCH_MIPS32 6 | ||
31 | #define LUAJIT_ARCH_mips32 6 | ||
32 | #define LUAJIT_ARCH_MIPS64 7 | ||
33 | #define LUAJIT_ARCH_mips64 7 | ||
28 | 34 | ||
29 | /* Target OS. */ | 35 | /* Target OS. */ |
30 | #define LUAJIT_OS_OTHER 0 | 36 | #define LUAJIT_OS_OTHER 0 |
@@ -34,6 +40,14 @@ | |||
34 | #define LUAJIT_OS_BSD 4 | 40 | #define LUAJIT_OS_BSD 4 |
35 | #define LUAJIT_OS_POSIX 5 | 41 | #define LUAJIT_OS_POSIX 5 |
36 | 42 | ||
43 | /* Number mode. */ | ||
44 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ | ||
45 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ | ||
46 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ | ||
47 | #define LJ_NUMMODE_DUAL_SINGLE 3 /* Default to dual-number mode. */ | ||
48 | |||
49 | /* -- Target detection ---------------------------------------------------- */ | ||
50 | |||
37 | /* Select native target if no target defined. */ | 51 | /* Select native target if no target defined. */ |
38 | #ifndef LUAJIT_TARGET | 52 | #ifndef LUAJIT_TARGET |
39 | 53 | ||
@@ -43,14 +57,14 @@ | |||
43 | #define LUAJIT_TARGET LUAJIT_ARCH_X64 | 57 | #define LUAJIT_TARGET LUAJIT_ARCH_X64 |
44 | #elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM) | 58 | #elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM) |
45 | #define LUAJIT_TARGET LUAJIT_ARCH_ARM | 59 | #define LUAJIT_TARGET LUAJIT_ARCH_ARM |
60 | #elif defined(__aarch64__) | ||
61 | #define LUAJIT_TARGET LUAJIT_ARCH_ARM64 | ||
46 | #elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC) | 62 | #elif defined(__ppc__) || defined(__ppc) || defined(__PPC__) || defined(__PPC) || defined(__powerpc__) || defined(__powerpc) || defined(__POWERPC__) || defined(__POWERPC) || defined(_M_PPC) |
47 | #ifdef __NO_FPRS__ | ||
48 | #define LUAJIT_TARGET LUAJIT_ARCH_PPCSPE | ||
49 | #else | ||
50 | #define LUAJIT_TARGET LUAJIT_ARCH_PPC | 63 | #define LUAJIT_TARGET LUAJIT_ARCH_PPC |
51 | #endif | 64 | #elif defined(__mips64__) || defined(__mips64) || defined(__MIPS64__) || defined(__MIPS64) |
65 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS64 | ||
52 | #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) | 66 | #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) |
53 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS | 67 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS32 |
54 | #else | 68 | #else |
55 | #error "No support for this architecture (yet)" | 69 | #error "No support for this architecture (yet)" |
56 | #endif | 70 | #endif |
@@ -65,16 +79,23 @@ | |||
65 | #elif defined(__linux__) | 79 | #elif defined(__linux__) |
66 | #define LUAJIT_OS LUAJIT_OS_LINUX | 80 | #define LUAJIT_OS LUAJIT_OS_LINUX |
67 | #elif defined(__MACH__) && defined(__APPLE__) | 81 | #elif defined(__MACH__) && defined(__APPLE__) |
82 | #include "TargetConditionals.h" | ||
68 | #define LUAJIT_OS LUAJIT_OS_OSX | 83 | #define LUAJIT_OS LUAJIT_OS_OSX |
69 | #elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ | 84 | #elif (defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ |
70 | defined(__NetBSD__) || defined(__OpenBSD__) || \ | 85 | defined(__NetBSD__) || defined(__OpenBSD__) || \ |
71 | defined(__DragonFly__)) && !defined(__ORBIS__) | 86 | defined(__DragonFly__)) && !defined(__ORBIS__) && !defined(__PROSPERO__) |
72 | #define LUAJIT_OS LUAJIT_OS_BSD | 87 | #define LUAJIT_OS LUAJIT_OS_BSD |
73 | #elif (defined(__sun__) && defined(__svr4__)) | 88 | #elif (defined(__sun__) && defined(__svr4__)) |
89 | #define LJ_TARGET_SOLARIS 1 | ||
90 | #define LUAJIT_OS LUAJIT_OS_POSIX | ||
91 | #elif defined(__HAIKU__) | ||
74 | #define LUAJIT_OS LUAJIT_OS_POSIX | 92 | #define LUAJIT_OS LUAJIT_OS_POSIX |
75 | #elif defined(__CYGWIN__) | 93 | #elif defined(__CYGWIN__) |
76 | #define LJ_TARGET_CYGWIN 1 | 94 | #define LJ_TARGET_CYGWIN 1 |
77 | #define LUAJIT_OS LUAJIT_OS_POSIX | 95 | #define LUAJIT_OS LUAJIT_OS_POSIX |
96 | #elif defined(__QNX__) | ||
97 | #define LJ_TARGET_QNX 1 | ||
98 | #define LUAJIT_OS LUAJIT_OS_POSIX | ||
78 | #else | 99 | #else |
79 | #define LUAJIT_OS LUAJIT_OS_OTHER | 100 | #define LUAJIT_OS LUAJIT_OS_OTHER |
80 | #endif | 101 | #endif |
@@ -99,10 +120,16 @@ | |||
99 | #define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) | 120 | #define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) |
100 | #define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) | 121 | #define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) |
101 | #define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) | 122 | #define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) |
102 | #define LJ_TARGET_IOS (LJ_TARGET_OSX && LUAJIT_TARGET == LUAJIT_ARCH_ARM) | 123 | #define LJ_TARGET_BSD (LUAJIT_OS == LUAJIT_OS_BSD) |
103 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) | 124 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) |
104 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX | 125 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX |
105 | 126 | ||
127 | #if TARGET_OS_IPHONE | ||
128 | #define LJ_TARGET_IOS 1 | ||
129 | #else | ||
130 | #define LJ_TARGET_IOS 0 | ||
131 | #endif | ||
132 | |||
106 | #ifdef __CELLOS_LV2__ | 133 | #ifdef __CELLOS_LV2__ |
107 | #define LJ_TARGET_PS3 1 | 134 | #define LJ_TARGET_PS3 1 |
108 | #define LJ_TARGET_CONSOLE 1 | 135 | #define LJ_TARGET_CONSOLE 1 |
@@ -115,6 +142,13 @@ | |||
115 | #define NULL ((void*)0) | 142 | #define NULL ((void*)0) |
116 | #endif | 143 | #endif |
117 | 144 | ||
145 | #ifdef __PROSPERO__ | ||
146 | #define LJ_TARGET_PS5 1 | ||
147 | #define LJ_TARGET_CONSOLE 1 | ||
148 | #undef NULL | ||
149 | #define NULL ((void*)0) | ||
150 | #endif | ||
151 | |||
118 | #ifdef __psp2__ | 152 | #ifdef __psp2__ |
119 | #define LJ_TARGET_PSVITA 1 | 153 | #define LJ_TARGET_PSVITA 1 |
120 | #define LJ_TARGET_CONSOLE 1 | 154 | #define LJ_TARGET_CONSOLE 1 |
@@ -125,10 +159,27 @@ | |||
125 | #define LJ_TARGET_CONSOLE 1 | 159 | #define LJ_TARGET_CONSOLE 1 |
126 | #endif | 160 | #endif |
127 | 161 | ||
128 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ | 162 | #ifdef _DURANGO |
129 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ | 163 | #define LJ_TARGET_XBOXONE 1 |
130 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ | 164 | #define LJ_TARGET_CONSOLE 1 |
131 | #define LJ_NUMMODE_DUAL_SINGLE 3 /* Default to dual-number mode. */ | 165 | #define LJ_TARGET_GC64 1 |
166 | #endif | ||
167 | |||
168 | #ifdef __NX__ | ||
169 | #define LJ_TARGET_NX 1 | ||
170 | #define LJ_TARGET_CONSOLE 1 | ||
171 | #undef NULL | ||
172 | #define NULL ((void*)0) | ||
173 | #endif | ||
174 | |||
175 | #ifdef _UWP | ||
176 | #define LJ_TARGET_UWP 1 | ||
177 | #if LUAJIT_TARGET == LUAJIT_ARCH_X64 | ||
178 | #define LJ_TARGET_GC64 1 | ||
179 | #endif | ||
180 | #endif | ||
181 | |||
182 | /* -- Arch-specific settings ---------------------------------------------- */ | ||
132 | 183 | ||
133 | /* Set target architecture properties. */ | 184 | /* Set target architecture properties. */ |
134 | #if LUAJIT_TARGET == LUAJIT_ARCH_X86 | 185 | #if LUAJIT_TARGET == LUAJIT_ARCH_X86 |
@@ -136,14 +187,10 @@ | |||
136 | #define LJ_ARCH_NAME "x86" | 187 | #define LJ_ARCH_NAME "x86" |
137 | #define LJ_ARCH_BITS 32 | 188 | #define LJ_ARCH_BITS 32 |
138 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 189 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
139 | #if LJ_TARGET_WINDOWS || LJ_TARGET_CYGWIN | ||
140 | #define LJ_ABI_WIN 1 | ||
141 | #else | ||
142 | #define LJ_ABI_WIN 0 | ||
143 | #endif | ||
144 | #define LJ_TARGET_X86 1 | 190 | #define LJ_TARGET_X86 1 |
145 | #define LJ_TARGET_X86ORX64 1 | 191 | #define LJ_TARGET_X86ORX64 1 |
146 | #define LJ_TARGET_EHRETREG 0 | 192 | #define LJ_TARGET_EHRETREG 0 |
193 | #define LJ_TARGET_EHRAREG 8 | ||
147 | #define LJ_TARGET_MASKSHIFT 1 | 194 | #define LJ_TARGET_MASKSHIFT 1 |
148 | #define LJ_TARGET_MASKROT 1 | 195 | #define LJ_TARGET_MASKROT 1 |
149 | #define LJ_TARGET_UNALIGNED 1 | 196 | #define LJ_TARGET_UNALIGNED 1 |
@@ -154,19 +201,20 @@ | |||
154 | #define LJ_ARCH_NAME "x64" | 201 | #define LJ_ARCH_NAME "x64" |
155 | #define LJ_ARCH_BITS 64 | 202 | #define LJ_ARCH_BITS 64 |
156 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 203 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
157 | #if LJ_TARGET_WINDOWS || LJ_TARGET_CYGWIN | ||
158 | #define LJ_ABI_WIN 1 | ||
159 | #else | ||
160 | #define LJ_ABI_WIN 0 | ||
161 | #endif | ||
162 | #define LJ_TARGET_X64 1 | 204 | #define LJ_TARGET_X64 1 |
163 | #define LJ_TARGET_X86ORX64 1 | 205 | #define LJ_TARGET_X86ORX64 1 |
164 | #define LJ_TARGET_EHRETREG 0 | 206 | #define LJ_TARGET_EHRETREG 0 |
207 | #define LJ_TARGET_EHRAREG 16 | ||
165 | #define LJ_TARGET_JUMPRANGE 31 /* +-2^31 = +-2GB */ | 208 | #define LJ_TARGET_JUMPRANGE 31 /* +-2^31 = +-2GB */ |
166 | #define LJ_TARGET_MASKSHIFT 1 | 209 | #define LJ_TARGET_MASKSHIFT 1 |
167 | #define LJ_TARGET_MASKROT 1 | 210 | #define LJ_TARGET_MASKROT 1 |
168 | #define LJ_TARGET_UNALIGNED 1 | 211 | #define LJ_TARGET_UNALIGNED 1 |
169 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL | 212 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL |
213 | #ifndef LUAJIT_DISABLE_GC64 | ||
214 | #define LJ_TARGET_GC64 1 | ||
215 | #elif LJ_TARGET_OSX | ||
216 | #error "macOS requires GC64 -- don't disable it" | ||
217 | #endif | ||
170 | 218 | ||
171 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM | 219 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM |
172 | 220 | ||
@@ -182,40 +230,108 @@ | |||
182 | #define LJ_ABI_EABI 1 | 230 | #define LJ_ABI_EABI 1 |
183 | #define LJ_TARGET_ARM 1 | 231 | #define LJ_TARGET_ARM 1 |
184 | #define LJ_TARGET_EHRETREG 0 | 232 | #define LJ_TARGET_EHRETREG 0 |
233 | #define LJ_TARGET_EHRAREG 14 | ||
185 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | 234 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ |
186 | #define LJ_TARGET_MASKSHIFT 0 | 235 | #define LJ_TARGET_MASKSHIFT 0 |
187 | #define LJ_TARGET_MASKROT 1 | 236 | #define LJ_TARGET_MASKROT 1 |
188 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 237 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
189 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | 238 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
190 | 239 | ||
191 | #if __ARM_ARCH____ARM_ARCH_8__ || __ARM_ARCH_8A__ | 240 | #if __ARM_ARCH == 8 || __ARM_ARCH_8__ || __ARM_ARCH_8A__ |
192 | #define LJ_ARCH_VERSION 80 | 241 | #define LJ_ARCH_VERSION 80 |
193 | #elif __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH_7S__ || __ARM_ARCH_7VE__ | 242 | #elif __ARM_ARCH == 7 || __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH_7S__ || __ARM_ARCH_7VE__ |
194 | #define LJ_ARCH_VERSION 70 | 243 | #define LJ_ARCH_VERSION 70 |
195 | #elif __ARM_ARCH_6T2__ | 244 | #elif __ARM_ARCH_6T2__ |
196 | #define LJ_ARCH_VERSION 61 | 245 | #define LJ_ARCH_VERSION 61 |
197 | #elif __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6K__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__ | 246 | #elif __ARM_ARCH == 6 || __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6K__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__ |
198 | #define LJ_ARCH_VERSION 60 | 247 | #define LJ_ARCH_VERSION 60 |
199 | #else | 248 | #else |
200 | #define LJ_ARCH_VERSION 50 | 249 | #define LJ_ARCH_VERSION 50 |
201 | #endif | 250 | #endif |
202 | 251 | ||
252 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM64 | ||
253 | |||
254 | #define LJ_ARCH_BITS 64 | ||
255 | #if defined(__AARCH64EB__) | ||
256 | #define LJ_ARCH_NAME "arm64be" | ||
257 | #define LJ_ARCH_ENDIAN LUAJIT_BE | ||
258 | #else | ||
259 | #define LJ_ARCH_NAME "arm64" | ||
260 | #define LJ_ARCH_ENDIAN LUAJIT_LE | ||
261 | #endif | ||
262 | #if !defined(LJ_ABI_PAUTH) && defined(__arm64e__) | ||
263 | #define LJ_ABI_PAUTH 1 | ||
264 | #endif | ||
265 | #define LJ_TARGET_ARM64 1 | ||
266 | #define LJ_TARGET_EHRETREG 0 | ||
267 | #define LJ_TARGET_EHRAREG 30 | ||
268 | #define LJ_TARGET_JUMPRANGE 27 /* +-2^27 = +-128MB */ | ||
269 | #define LJ_TARGET_MASKSHIFT 1 | ||
270 | #define LJ_TARGET_MASKROT 1 | ||
271 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | ||
272 | #define LJ_TARGET_GC64 1 | ||
273 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | ||
274 | |||
275 | #define LJ_ARCH_VERSION 80 | ||
276 | |||
203 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC | 277 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC |
204 | 278 | ||
205 | #define LJ_ARCH_NAME "ppc" | 279 | #ifndef LJ_ARCH_ENDIAN |
280 | #if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ | ||
281 | #define LJ_ARCH_ENDIAN LUAJIT_LE | ||
282 | #else | ||
283 | #define LJ_ARCH_ENDIAN LUAJIT_BE | ||
284 | #endif | ||
285 | #endif | ||
286 | |||
206 | #if _LP64 | 287 | #if _LP64 |
207 | #define LJ_ARCH_BITS 64 | 288 | #define LJ_ARCH_BITS 64 |
289 | #if LJ_ARCH_ENDIAN == LUAJIT_LE | ||
290 | #define LJ_ARCH_NAME "ppc64le" | ||
291 | #else | ||
292 | #define LJ_ARCH_NAME "ppc64" | ||
293 | #endif | ||
208 | #else | 294 | #else |
209 | #define LJ_ARCH_BITS 32 | 295 | #define LJ_ARCH_BITS 32 |
296 | #define LJ_ARCH_NAME "ppc" | ||
297 | |||
298 | #if !defined(LJ_ARCH_HASFPU) | ||
299 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | ||
300 | #define LJ_ARCH_HASFPU 0 | ||
301 | #else | ||
302 | #define LJ_ARCH_HASFPU 1 | ||
210 | #endif | 303 | #endif |
211 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 304 | #endif |
305 | |||
306 | #if !defined(LJ_ABI_SOFTFP) | ||
307 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | ||
308 | #define LJ_ABI_SOFTFP 1 | ||
309 | #else | ||
310 | #define LJ_ABI_SOFTFP 0 | ||
311 | #endif | ||
312 | #endif | ||
313 | #endif | ||
314 | |||
315 | #if LJ_ABI_SOFTFP | ||
316 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | ||
317 | #else | ||
318 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE | ||
319 | #endif | ||
320 | |||
212 | #define LJ_TARGET_PPC 1 | 321 | #define LJ_TARGET_PPC 1 |
213 | #define LJ_TARGET_EHRETREG 3 | 322 | #define LJ_TARGET_EHRETREG 3 |
323 | #define LJ_TARGET_EHRAREG 65 | ||
214 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | 324 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ |
215 | #define LJ_TARGET_MASKSHIFT 0 | 325 | #define LJ_TARGET_MASKSHIFT 0 |
216 | #define LJ_TARGET_MASKROT 1 | 326 | #define LJ_TARGET_MASKROT 1 |
217 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ | 327 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ |
218 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE | 328 | |
329 | #if LJ_TARGET_CONSOLE | ||
330 | #define LJ_ARCH_PPC32ON64 1 | ||
331 | #define LJ_ARCH_NOFFI 1 | ||
332 | #elif LJ_ARCH_BITS == 64 | ||
333 | #error "No support for PPC64" | ||
334 | #endif | ||
219 | 335 | ||
220 | #if _ARCH_PWR7 | 336 | #if _ARCH_PWR7 |
221 | #define LJ_ARCH_VERSION 70 | 337 | #define LJ_ARCH_VERSION 70 |
@@ -230,10 +346,6 @@ | |||
230 | #else | 346 | #else |
231 | #define LJ_ARCH_VERSION 0 | 347 | #define LJ_ARCH_VERSION 0 |
232 | #endif | 348 | #endif |
233 | #if __PPC64__ || __powerpc64__ || LJ_TARGET_CONSOLE | ||
234 | #define LJ_ARCH_PPC64 1 | ||
235 | #define LJ_ARCH_NOFFI 1 | ||
236 | #endif | ||
237 | #if _ARCH_PPCSQ | 349 | #if _ARCH_PPCSQ |
238 | #define LJ_ARCH_SQRT 1 | 350 | #define LJ_ARCH_SQRT 1 |
239 | #endif | 351 | #endif |
@@ -247,44 +359,80 @@ | |||
247 | #define LJ_ARCH_XENON 1 | 359 | #define LJ_ARCH_XENON 1 |
248 | #endif | 360 | #endif |
249 | 361 | ||
250 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE | 362 | #elif LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 || LUAJIT_TARGET == LUAJIT_ARCH_MIPS64 |
251 | |||
252 | #define LJ_ARCH_NAME "ppcspe" | ||
253 | #define LJ_ARCH_BITS 32 | ||
254 | #define LJ_ARCH_ENDIAN LUAJIT_BE | ||
255 | #ifndef LJ_ABI_SOFTFP | ||
256 | #define LJ_ABI_SOFTFP 1 | ||
257 | #endif | ||
258 | #define LJ_ABI_EABI 1 | ||
259 | #define LJ_TARGET_PPCSPE 1 | ||
260 | #define LJ_TARGET_EHRETREG 3 | ||
261 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | ||
262 | #define LJ_TARGET_MASKSHIFT 0 | ||
263 | #define LJ_TARGET_MASKROT 1 | ||
264 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ | ||
265 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE | ||
266 | #define LJ_ARCH_NOFFI 1 /* NYI: comparisons, calls. */ | ||
267 | #define LJ_ARCH_NOJIT 1 | ||
268 | |||
269 | #elif LUAJIT_TARGET == LUAJIT_ARCH_MIPS | ||
270 | 363 | ||
271 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) | 364 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) |
365 | #if __mips_isa_rev >= 6 | ||
366 | #define LJ_TARGET_MIPSR6 1 | ||
367 | #define LJ_TARGET_UNALIGNED 1 | ||
368 | #endif | ||
369 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
370 | #if LJ_TARGET_MIPSR6 | ||
371 | #define LJ_ARCH_NAME "mips32r6el" | ||
372 | #else | ||
272 | #define LJ_ARCH_NAME "mipsel" | 373 | #define LJ_ARCH_NAME "mipsel" |
374 | #endif | ||
375 | #else | ||
376 | #if LJ_TARGET_MIPSR6 | ||
377 | #define LJ_ARCH_NAME "mips64r6el" | ||
378 | #else | ||
379 | #define LJ_ARCH_NAME "mips64el" | ||
380 | #endif | ||
381 | #endif | ||
273 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 382 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
274 | #else | 383 | #else |
384 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
385 | #if LJ_TARGET_MIPSR6 | ||
386 | #define LJ_ARCH_NAME "mips32r6" | ||
387 | #else | ||
275 | #define LJ_ARCH_NAME "mips" | 388 | #define LJ_ARCH_NAME "mips" |
389 | #endif | ||
390 | #else | ||
391 | #if LJ_TARGET_MIPSR6 | ||
392 | #define LJ_ARCH_NAME "mips64r6" | ||
393 | #else | ||
394 | #define LJ_ARCH_NAME "mips64" | ||
395 | #endif | ||
396 | #endif | ||
276 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 397 | #define LJ_ARCH_ENDIAN LUAJIT_BE |
277 | #endif | 398 | #endif |
399 | |||
400 | #if !defined(LJ_ARCH_HASFPU) | ||
401 | #ifdef __mips_soft_float | ||
402 | #define LJ_ARCH_HASFPU 0 | ||
403 | #else | ||
404 | #define LJ_ARCH_HASFPU 1 | ||
405 | #endif | ||
406 | #endif | ||
407 | |||
408 | #if !defined(LJ_ABI_SOFTFP) | ||
409 | #ifdef __mips_soft_float | ||
410 | #define LJ_ABI_SOFTFP 1 | ||
411 | #else | ||
412 | #define LJ_ABI_SOFTFP 0 | ||
413 | #endif | ||
414 | #endif | ||
415 | |||
416 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
278 | #define LJ_ARCH_BITS 32 | 417 | #define LJ_ARCH_BITS 32 |
418 | #define LJ_TARGET_MIPS32 1 | ||
419 | #else | ||
420 | #define LJ_ARCH_BITS 64 | ||
421 | #define LJ_TARGET_MIPS64 1 | ||
422 | #define LJ_TARGET_GC64 1 | ||
423 | #endif | ||
279 | #define LJ_TARGET_MIPS 1 | 424 | #define LJ_TARGET_MIPS 1 |
280 | #define LJ_TARGET_EHRETREG 4 | 425 | #define LJ_TARGET_EHRETREG 4 |
426 | #define LJ_TARGET_EHRAREG 31 | ||
281 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ | 427 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ |
282 | #define LJ_TARGET_MASKSHIFT 1 | 428 | #define LJ_TARGET_MASKSHIFT 1 |
283 | #define LJ_TARGET_MASKROT 1 | 429 | #define LJ_TARGET_MASKROT 1 |
284 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 430 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
285 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE | 431 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
286 | 432 | ||
287 | #if _MIPS_ARCH_MIPS32R2 | 433 | #if LJ_TARGET_MIPSR6 |
434 | #define LJ_ARCH_VERSION 60 | ||
435 | #elif _MIPS_ARCH_MIPS32R2 || _MIPS_ARCH_MIPS64R2 | ||
288 | #define LJ_ARCH_VERSION 20 | 436 | #define LJ_ARCH_VERSION 20 |
289 | #else | 437 | #else |
290 | #define LJ_ARCH_VERSION 10 | 438 | #define LJ_ARCH_VERSION 10 |
@@ -294,9 +442,7 @@ | |||
294 | #error "No target architecture defined" | 442 | #error "No target architecture defined" |
295 | #endif | 443 | #endif |
296 | 444 | ||
297 | #ifndef LJ_PAGESIZE | 445 | /* -- Checks for requirements --------------------------------------------- */ |
298 | #define LJ_PAGESIZE 4096 | ||
299 | #endif | ||
300 | 446 | ||
301 | /* Check for minimum required compiler versions. */ | 447 | /* Check for minimum required compiler versions. */ |
302 | #if defined(__GNUC__) | 448 | #if defined(__GNUC__) |
@@ -312,12 +458,28 @@ | |||
312 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) | 458 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) |
313 | #error "Need at least GCC 4.2 or newer" | 459 | #error "Need at least GCC 4.2 or newer" |
314 | #endif | 460 | #endif |
461 | #elif LJ_TARGET_ARM64 | ||
462 | #if __clang__ | ||
463 | #if ((__clang_major__ < 3) || ((__clang_major__ == 3) && __clang_minor__ < 5)) && !defined(__NX_TOOLCHAIN_MAJOR__) | ||
464 | #error "Need at least Clang 3.5 or newer" | ||
465 | #endif | ||
466 | #else | ||
467 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 8) | ||
468 | #error "Need at least GCC 4.8 or newer" | ||
469 | #endif | ||
470 | #endif | ||
315 | #elif !LJ_TARGET_PS3 | 471 | #elif !LJ_TARGET_PS3 |
472 | #if __clang__ | ||
473 | #if ((__clang_major__ < 3) || ((__clang_major__ == 3) && __clang_minor__ < 5)) | ||
474 | #error "Need at least Clang 3.5 or newer" | ||
475 | #endif | ||
476 | #else | ||
316 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) | 477 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) |
317 | #error "Need at least GCC 4.3 or newer" | 478 | #error "Need at least GCC 4.3 or newer" |
318 | #endif | 479 | #endif |
319 | #endif | 480 | #endif |
320 | #endif | 481 | #endif |
482 | #endif | ||
321 | 483 | ||
322 | /* Check target-specific constraints. */ | 484 | /* Check target-specific constraints. */ |
323 | #ifndef _BUILDVM_H | 485 | #ifndef _BUILDVM_H |
@@ -335,25 +497,34 @@ | |||
335 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) | 497 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) |
336 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" | 498 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" |
337 | #endif | 499 | #endif |
338 | #elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE | 500 | #elif LJ_TARGET_ARM64 |
339 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | 501 | #if defined(_ILP32) |
340 | #error "No support for PowerPC CPUs without double-precision FPU" | 502 | #error "No support for ILP32 model on ARM64" |
341 | #endif | 503 | #endif |
504 | #elif LJ_TARGET_PPC | ||
342 | #if defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN)) | 505 | #if defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN)) |
343 | #error "No support for little-endian PowerPC" | 506 | #error "No support for little-endian PPC32" |
344 | #endif | 507 | #endif |
345 | #if defined(_LP64) | 508 | #if defined(__NO_FPRS__) && !defined(_SOFT_FLOAT) |
346 | #error "No support for PowerPC 64 bit mode" | 509 | #error "No support for PPC/e500 anymore (use LuaJIT 2.0)" |
347 | #endif | 510 | #endif |
348 | #elif LJ_TARGET_MIPS | 511 | #elif LJ_TARGET_MIPS32 |
349 | #if defined(__mips_soft_float) | 512 | #if !((defined(_MIPS_SIM_ABI32) && _MIPS_SIM == _MIPS_SIM_ABI32) || (defined(_ABIO32) && _MIPS_SIM == _ABIO32)) |
350 | #error "No support for MIPS CPUs without FPU" | 513 | #error "Only o32 ABI supported for MIPS32" |
351 | #endif | 514 | #endif |
352 | #if defined(_LP64) | 515 | #if LJ_TARGET_MIPSR6 |
353 | #error "No support for MIPS64" | 516 | /* Not that useful, since most available r6 CPUs are 64 bit. */ |
517 | #error "No support for MIPS32R6" | ||
354 | #endif | 518 | #endif |
519 | #elif LJ_TARGET_MIPS64 | ||
520 | #if !((defined(_MIPS_SIM_ABI64) && _MIPS_SIM == _MIPS_SIM_ABI64) || (defined(_ABI64) && _MIPS_SIM == _ABI64)) | ||
521 | /* MIPS32ON64 aka n32 ABI support might be desirable, but difficult. */ | ||
522 | #error "Only n64 ABI supported for MIPS64" | ||
355 | #endif | 523 | #endif |
356 | #endif | 524 | #endif |
525 | #endif | ||
526 | |||
527 | /* -- Derived defines ----------------------------------------------------- */ | ||
357 | 528 | ||
358 | /* Enable or disable the dual-number mode for the VM. */ | 529 | /* Enable or disable the dual-number mode for the VM. */ |
359 | #if (LJ_ARCH_NUMMODE == LJ_NUMMODE_SINGLE && LUAJIT_NUMMODE == 2) || \ | 530 | #if (LJ_ARCH_NUMMODE == LJ_NUMMODE_SINGLE && LUAJIT_NUMMODE == 2) || \ |
@@ -376,6 +547,20 @@ | |||
376 | #endif | 547 | #endif |
377 | #endif | 548 | #endif |
378 | 549 | ||
550 | /* 64 bit GC references. */ | ||
551 | #if LJ_TARGET_GC64 | ||
552 | #define LJ_GC64 1 | ||
553 | #else | ||
554 | #define LJ_GC64 0 | ||
555 | #endif | ||
556 | |||
557 | /* 2-slot frame info. */ | ||
558 | #if LJ_GC64 | ||
559 | #define LJ_FR2 1 | ||
560 | #else | ||
561 | #define LJ_FR2 0 | ||
562 | #endif | ||
563 | |||
379 | /* Disable or enable the JIT compiler. */ | 564 | /* Disable or enable the JIT compiler. */ |
380 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) | 565 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) |
381 | #define LJ_HASJIT 0 | 566 | #define LJ_HASJIT 0 |
@@ -390,6 +575,28 @@ | |||
390 | #define LJ_HASFFI 1 | 575 | #define LJ_HASFFI 1 |
391 | #endif | 576 | #endif |
392 | 577 | ||
578 | /* Disable or enable the string buffer extension. */ | ||
579 | #if defined(LUAJIT_DISABLE_BUFFER) | ||
580 | #define LJ_HASBUFFER 0 | ||
581 | #else | ||
582 | #define LJ_HASBUFFER 1 | ||
583 | #endif | ||
584 | |||
585 | #if defined(LUAJIT_DISABLE_PROFILE) | ||
586 | #define LJ_HASPROFILE 0 | ||
587 | #elif LJ_TARGET_POSIX | ||
588 | #define LJ_HASPROFILE 1 | ||
589 | #define LJ_PROFILE_SIGPROF 1 | ||
590 | #elif LJ_TARGET_PS3 | ||
591 | #define LJ_HASPROFILE 1 | ||
592 | #define LJ_PROFILE_PTHREAD 1 | ||
593 | #elif LJ_TARGET_WINDOWS || LJ_TARGET_XBOX360 | ||
594 | #define LJ_HASPROFILE 1 | ||
595 | #define LJ_PROFILE_WTHREAD 1 | ||
596 | #else | ||
597 | #define LJ_HASPROFILE 0 | ||
598 | #endif | ||
599 | |||
393 | #ifndef LJ_ARCH_HASFPU | 600 | #ifndef LJ_ARCH_HASFPU |
394 | #define LJ_ARCH_HASFPU 1 | 601 | #define LJ_ARCH_HASFPU 1 |
395 | #endif | 602 | #endif |
@@ -397,6 +604,11 @@ | |||
397 | #define LJ_ABI_SOFTFP 0 | 604 | #define LJ_ABI_SOFTFP 0 |
398 | #endif | 605 | #endif |
399 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) | 606 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) |
607 | #define LJ_SOFTFP32 (LJ_SOFTFP && LJ_32) | ||
608 | |||
609 | #ifndef LJ_ABI_PAUTH | ||
610 | #define LJ_ABI_PAUTH 0 | ||
611 | #endif | ||
400 | 612 | ||
401 | #if LJ_ARCH_ENDIAN == LUAJIT_BE | 613 | #if LJ_ARCH_ENDIAN == LUAJIT_BE |
402 | #define LJ_LE 0 | 614 | #define LJ_LE 0 |
@@ -422,26 +634,52 @@ | |||
422 | #define LJ_TARGET_UNALIGNED 0 | 634 | #define LJ_TARGET_UNALIGNED 0 |
423 | #endif | 635 | #endif |
424 | 636 | ||
425 | /* Various workarounds for embedded operating systems. */ | 637 | #ifndef LJ_PAGESIZE |
426 | #if (defined(__ANDROID__) && !defined(LJ_TARGET_X86ORX64)) || defined(__symbian__) || LJ_TARGET_XBOX360 | 638 | #define LJ_PAGESIZE 4096 |
427 | #define LUAJIT_NO_LOG2 | ||
428 | #endif | 639 | #endif |
429 | #if defined(__symbian__) | 640 | |
430 | #define LUAJIT_NO_EXP2 | 641 | /* Various workarounds for embedded operating systems or weak C runtimes. */ |
642 | #if defined(__ANDROID__) || defined(__symbian__) || LJ_TARGET_XBOX360 || LJ_TARGET_WINDOWS | ||
643 | #define LUAJIT_NO_LOG2 | ||
431 | #endif | 644 | #endif |
432 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) | 645 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) |
433 | #define LJ_NO_SYSTEM 1 | 646 | #define LJ_NO_SYSTEM 1 |
434 | #endif | 647 | #endif |
435 | 648 | ||
436 | #if !defined(LUAJIT_NO_UNWIND) && __GNU_COMPACT_EH__ | 649 | #if LJ_TARGET_WINDOWS || LJ_TARGET_CYGWIN |
437 | /* NYI: no support for compact unwind specification, yet. */ | 650 | #define LJ_ABI_WIN 1 |
438 | #define LUAJIT_NO_UNWIND 1 | 651 | #else |
652 | #define LJ_ABI_WIN 0 | ||
653 | #endif | ||
654 | |||
655 | #if LJ_TARGET_WINDOWS | ||
656 | #if LJ_TARGET_UWP | ||
657 | #define LJ_WIN_VALLOC VirtualAllocFromApp | ||
658 | #define LJ_WIN_VPROTECT VirtualProtectFromApp | ||
659 | extern void *LJ_WIN_LOADLIBA(const char *path); | ||
660 | #else | ||
661 | #define LJ_WIN_VALLOC VirtualAlloc | ||
662 | #define LJ_WIN_VPROTECT VirtualProtect | ||
663 | #define LJ_WIN_LOADLIBA(path) LoadLibraryExA((path), NULL, 0) | ||
664 | #endif | ||
439 | #endif | 665 | #endif |
440 | 666 | ||
441 | #if defined(LUAJIT_NO_UNWIND) || defined(__symbian__) || LJ_TARGET_IOS || LJ_TARGET_PS3 || LJ_TARGET_PS4 | 667 | #if defined(LUAJIT_NO_UNWIND) || __GNU_COMPACT_EH__ || defined(__symbian__) || LJ_TARGET_IOS || LJ_TARGET_PS3 || LJ_TARGET_PS4 || LJ_TARGET_PS5 |
442 | #define LJ_NO_UNWIND 1 | 668 | #define LJ_NO_UNWIND 1 |
443 | #endif | 669 | #endif |
444 | 670 | ||
671 | #if !LJ_NO_UNWIND && !defined(LUAJIT_UNWIND_INTERNAL) && (LJ_ABI_WIN || (defined(LUAJIT_UNWIND_EXTERNAL) && (defined(__GNUC__) || defined(__clang__)))) | ||
672 | #define LJ_UNWIND_EXT 1 | ||
673 | #else | ||
674 | #define LJ_UNWIND_EXT 0 | ||
675 | #endif | ||
676 | |||
677 | #if LJ_UNWIND_EXT && LJ_HASJIT && !LJ_TARGET_ARM && !(LJ_ABI_WIN && LJ_TARGET_X86) | ||
678 | #define LJ_UNWIND_JIT 1 | ||
679 | #else | ||
680 | #define LJ_UNWIND_JIT 0 | ||
681 | #endif | ||
682 | |||
445 | /* Compatibility with Lua 5.1 vs. 5.2. */ | 683 | /* Compatibility with Lua 5.1 vs. 5.2. */ |
446 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 684 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
447 | #define LJ_52 1 | 685 | #define LJ_52 1 |
@@ -449,4 +687,46 @@ | |||
449 | #define LJ_52 0 | 687 | #define LJ_52 0 |
450 | #endif | 688 | #endif |
451 | 689 | ||
690 | /* -- VM security --------------------------------------------------------- */ | ||
691 | |||
692 | /* Don't make any changes here. Instead build with: | ||
693 | ** make "XCFLAGS=-DLUAJIT_SECURITY_flag=value" | ||
694 | ** | ||
695 | ** Important note to distro maintainers: DO NOT change the defaults for a | ||
696 | ** regular distro build -- neither upwards, nor downwards! | ||
697 | ** These build-time configurable security flags are intended for embedders | ||
698 | ** who may have specific needs wrt. security vs. performance. | ||
699 | */ | ||
700 | |||
701 | /* Security defaults. */ | ||
702 | #ifndef LUAJIT_SECURITY_PRNG | ||
703 | /* PRNG init: 0 = fixed/insecure, 1 = secure from OS. */ | ||
704 | #define LUAJIT_SECURITY_PRNG 1 | ||
705 | #endif | ||
706 | |||
707 | #ifndef LUAJIT_SECURITY_STRHASH | ||
708 | /* String hash: 0 = sparse only, 1 = sparse + dense. */ | ||
709 | #define LUAJIT_SECURITY_STRHASH 1 | ||
710 | #endif | ||
711 | |||
712 | #ifndef LUAJIT_SECURITY_STRID | ||
713 | /* String IDs: 0 = linear, 1 = reseed < 255, 2 = reseed < 15, 3 = random. */ | ||
714 | #define LUAJIT_SECURITY_STRID 1 | ||
715 | #endif | ||
716 | |||
717 | #ifndef LUAJIT_SECURITY_MCODE | ||
718 | /* Machine code page protection: 0 = insecure RWX, 1 = secure RW^X. */ | ||
719 | #define LUAJIT_SECURITY_MCODE 1 | ||
720 | #endif | ||
721 | |||
722 | #define LJ_SECURITY_MODE \ | ||
723 | ( 0u \ | ||
724 | | ((LUAJIT_SECURITY_PRNG & 3) << 0) \ | ||
725 | | ((LUAJIT_SECURITY_STRHASH & 3) << 2) \ | ||
726 | | ((LUAJIT_SECURITY_STRID & 3) << 4) \ | ||
727 | | ((LUAJIT_SECURITY_MCODE & 3) << 6) \ | ||
728 | ) | ||
729 | #define LJ_SECURITY_MODESTRING \ | ||
730 | "\004prng\007strhash\005strid\005mcode" | ||
731 | |||
452 | #endif | 732 | #endif |