diff options
Diffstat (limited to 'src/lj_arch.h')
-rw-r--r-- | src/lj_arch.h | 282 |
1 files changed, 227 insertions, 55 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h index 320ccf97..027b39ce 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
@@ -19,12 +19,16 @@ | |||
19 | #define LUAJIT_ARCH_x64 2 | 19 | #define LUAJIT_ARCH_x64 2 |
20 | #define LUAJIT_ARCH_ARM 3 | 20 | #define LUAJIT_ARCH_ARM 3 |
21 | #define LUAJIT_ARCH_arm 3 | 21 | #define LUAJIT_ARCH_arm 3 |
22 | #define LUAJIT_ARCH_PPC 4 | 22 | #define LUAJIT_ARCH_ARM64 4 |
23 | #define LUAJIT_ARCH_ppc 4 | 23 | #define LUAJIT_ARCH_arm64 4 |
24 | #define LUAJIT_ARCH_PPCSPE 5 | 24 | #define LUAJIT_ARCH_PPC 5 |
25 | #define LUAJIT_ARCH_ppcspe 5 | 25 | #define LUAJIT_ARCH_ppc 5 |
26 | #define LUAJIT_ARCH_MIPS 6 | 26 | #define LUAJIT_ARCH_MIPS 6 |
27 | #define LUAJIT_ARCH_mips 6 | 27 | #define LUAJIT_ARCH_mips 6 |
28 | #define LUAJIT_ARCH_MIPS32 6 | ||
29 | #define LUAJIT_ARCH_mips32 6 | ||
30 | #define LUAJIT_ARCH_MIPS64 7 | ||
31 | #define LUAJIT_ARCH_mips64 7 | ||
28 | 32 | ||
29 | /* Target OS. */ | 33 | /* Target OS. */ |
30 | #define LUAJIT_OS_OTHER 0 | 34 | #define LUAJIT_OS_OTHER 0 |
@@ -43,14 +47,14 @@ | |||
43 | #define LUAJIT_TARGET LUAJIT_ARCH_X64 | 47 | #define LUAJIT_TARGET LUAJIT_ARCH_X64 |
44 | #elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM) | 48 | #elif defined(__arm__) || defined(__arm) || defined(__ARM__) || defined(__ARM) |
45 | #define LUAJIT_TARGET LUAJIT_ARCH_ARM | 49 | #define LUAJIT_TARGET LUAJIT_ARCH_ARM |
50 | #elif defined(__aarch64__) | ||
51 | #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) | 52 | #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 | 53 | #define LUAJIT_TARGET LUAJIT_ARCH_PPC |
51 | #endif | 54 | #elif defined(__mips64__) || defined(__mips64) || defined(__MIPS64__) || defined(__MIPS64) |
55 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS64 | ||
52 | #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) | 56 | #elif defined(__mips__) || defined(__mips) || defined(__MIPS__) || defined(__MIPS) |
53 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS | 57 | #define LUAJIT_TARGET LUAJIT_ARCH_MIPS32 |
54 | #else | 58 | #else |
55 | #error "No support for this architecture (yet)" | 59 | #error "No support for this architecture (yet)" |
56 | #endif | 60 | #endif |
@@ -70,7 +74,7 @@ | |||
70 | defined(__NetBSD__) || defined(__OpenBSD__) || \ | 74 | defined(__NetBSD__) || defined(__OpenBSD__) || \ |
71 | defined(__DragonFly__)) && !defined(__ORBIS__) | 75 | defined(__DragonFly__)) && !defined(__ORBIS__) |
72 | #define LUAJIT_OS LUAJIT_OS_BSD | 76 | #define LUAJIT_OS LUAJIT_OS_BSD |
73 | #elif (defined(__sun__) && defined(__svr4__)) | 77 | #elif (defined(__sun__) && defined(__svr4__)) || defined(__HAIKU__) |
74 | #define LUAJIT_OS LUAJIT_OS_POSIX | 78 | #define LUAJIT_OS LUAJIT_OS_POSIX |
75 | #elif defined(__CYGWIN__) | 79 | #elif defined(__CYGWIN__) |
76 | #define LJ_TARGET_CYGWIN 1 | 80 | #define LJ_TARGET_CYGWIN 1 |
@@ -99,7 +103,7 @@ | |||
99 | #define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) | 103 | #define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) |
100 | #define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) | 104 | #define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) |
101 | #define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) | 105 | #define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) |
102 | #define LJ_TARGET_IOS (LJ_TARGET_OSX && LUAJIT_TARGET == LUAJIT_ARCH_ARM) | 106 | #define LJ_TARGET_IOS (LJ_TARGET_OSX && (LUAJIT_TARGET == LUAJIT_ARCH_ARM || LUAJIT_TARGET == LUAJIT_ARCH_ARM64)) |
103 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) | 107 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) |
104 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX | 108 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX |
105 | 109 | ||
@@ -125,6 +129,19 @@ | |||
125 | #define LJ_TARGET_CONSOLE 1 | 129 | #define LJ_TARGET_CONSOLE 1 |
126 | #endif | 130 | #endif |
127 | 131 | ||
132 | #ifdef _DURANGO | ||
133 | #define LJ_TARGET_XBOXONE 1 | ||
134 | #define LJ_TARGET_CONSOLE 1 | ||
135 | #define LJ_TARGET_GC64 1 | ||
136 | #endif | ||
137 | |||
138 | #ifdef _UWP | ||
139 | #define LJ_TARGET_UWP 1 | ||
140 | #if LUAJIT_TARGET == LUAJIT_ARCH_X64 | ||
141 | #define LJ_TARGET_GC64 1 | ||
142 | #endif | ||
143 | #endif | ||
144 | |||
128 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ | 145 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ |
129 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ | 146 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ |
130 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ | 147 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ |
@@ -167,6 +184,9 @@ | |||
167 | #define LJ_TARGET_MASKROT 1 | 184 | #define LJ_TARGET_MASKROT 1 |
168 | #define LJ_TARGET_UNALIGNED 1 | 185 | #define LJ_TARGET_UNALIGNED 1 |
169 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL | 186 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE_DUAL |
187 | #ifndef LUAJIT_DISABLE_GC64 | ||
188 | #define LJ_TARGET_GC64 1 | ||
189 | #endif | ||
170 | 190 | ||
171 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM | 191 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM |
172 | 192 | ||
@@ -188,7 +208,7 @@ | |||
188 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 208 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
189 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | 209 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
190 | 210 | ||
191 | #if __ARM_ARCH____ARM_ARCH_8__ || __ARM_ARCH_8A__ | 211 | #if __ARM_ARCH_8__ || __ARM_ARCH_8A__ |
192 | #define LJ_ARCH_VERSION 80 | 212 | #define LJ_ARCH_VERSION 80 |
193 | #elif __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH_7S__ || __ARM_ARCH_7VE__ | 213 | #elif __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH_7S__ || __ARM_ARCH_7VE__ |
194 | #define LJ_ARCH_VERSION 70 | 214 | #define LJ_ARCH_VERSION 70 |
@@ -200,22 +220,84 @@ | |||
200 | #define LJ_ARCH_VERSION 50 | 220 | #define LJ_ARCH_VERSION 50 |
201 | #endif | 221 | #endif |
202 | 222 | ||
223 | #elif LUAJIT_TARGET == LUAJIT_ARCH_ARM64 | ||
224 | |||
225 | #define LJ_ARCH_BITS 64 | ||
226 | #if defined(__AARCH64EB__) | ||
227 | #define LJ_ARCH_NAME "arm64be" | ||
228 | #define LJ_ARCH_ENDIAN LUAJIT_BE | ||
229 | #else | ||
230 | #define LJ_ARCH_NAME "arm64" | ||
231 | #define LJ_ARCH_ENDIAN LUAJIT_LE | ||
232 | #endif | ||
233 | #define LJ_TARGET_ARM64 1 | ||
234 | #define LJ_TARGET_EHRETREG 0 | ||
235 | #define LJ_TARGET_JUMPRANGE 27 /* +-2^27 = +-128MB */ | ||
236 | #define LJ_TARGET_MASKSHIFT 1 | ||
237 | #define LJ_TARGET_MASKROT 1 | ||
238 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | ||
239 | #define LJ_TARGET_GC64 1 | ||
240 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | ||
241 | |||
242 | #define LJ_ARCH_VERSION 80 | ||
243 | |||
203 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC | 244 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC |
204 | 245 | ||
205 | #define LJ_ARCH_NAME "ppc" | 246 | #ifndef LJ_ARCH_ENDIAN |
247 | #if __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__ | ||
248 | #define LJ_ARCH_ENDIAN LUAJIT_LE | ||
249 | #else | ||
250 | #define LJ_ARCH_ENDIAN LUAJIT_BE | ||
251 | #endif | ||
252 | #endif | ||
253 | |||
206 | #if _LP64 | 254 | #if _LP64 |
207 | #define LJ_ARCH_BITS 64 | 255 | #define LJ_ARCH_BITS 64 |
256 | #if LJ_ARCH_ENDIAN == LUAJIT_LE | ||
257 | #define LJ_ARCH_NAME "ppc64le" | ||
258 | #else | ||
259 | #define LJ_ARCH_NAME "ppc64" | ||
260 | #endif | ||
208 | #else | 261 | #else |
209 | #define LJ_ARCH_BITS 32 | 262 | #define LJ_ARCH_BITS 32 |
263 | #define LJ_ARCH_NAME "ppc" | ||
264 | |||
265 | #if !defined(LJ_ARCH_HASFPU) | ||
266 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | ||
267 | #define LJ_ARCH_HASFPU 0 | ||
268 | #else | ||
269 | #define LJ_ARCH_HASFPU 1 | ||
210 | #endif | 270 | #endif |
211 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 271 | #endif |
272 | |||
273 | #if !defined(LJ_ABI_SOFTFP) | ||
274 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | ||
275 | #define LJ_ABI_SOFTFP 1 | ||
276 | #else | ||
277 | #define LJ_ABI_SOFTFP 0 | ||
278 | #endif | ||
279 | #endif | ||
280 | #endif | ||
281 | |||
282 | #if LJ_ABI_SOFTFP | ||
283 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | ||
284 | #else | ||
285 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE | ||
286 | #endif | ||
287 | |||
212 | #define LJ_TARGET_PPC 1 | 288 | #define LJ_TARGET_PPC 1 |
213 | #define LJ_TARGET_EHRETREG 3 | 289 | #define LJ_TARGET_EHRETREG 3 |
214 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ | 290 | #define LJ_TARGET_JUMPRANGE 25 /* +-2^25 = +-32MB */ |
215 | #define LJ_TARGET_MASKSHIFT 0 | 291 | #define LJ_TARGET_MASKSHIFT 0 |
216 | #define LJ_TARGET_MASKROT 1 | 292 | #define LJ_TARGET_MASKROT 1 |
217 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ | 293 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ |
218 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE | 294 | |
295 | #if LJ_TARGET_CONSOLE | ||
296 | #define LJ_ARCH_PPC32ON64 1 | ||
297 | #define LJ_ARCH_NOFFI 1 | ||
298 | #elif LJ_ARCH_BITS == 64 | ||
299 | #error "No support for PPC64" | ||
300 | #endif | ||
219 | 301 | ||
220 | #if _ARCH_PWR7 | 302 | #if _ARCH_PWR7 |
221 | #define LJ_ARCH_VERSION 70 | 303 | #define LJ_ARCH_VERSION 70 |
@@ -230,10 +312,6 @@ | |||
230 | #else | 312 | #else |
231 | #define LJ_ARCH_VERSION 0 | 313 | #define LJ_ARCH_VERSION 0 |
232 | #endif | 314 | #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 | 315 | #if _ARCH_PPCSQ |
238 | #define LJ_ARCH_SQRT 1 | 316 | #define LJ_ARCH_SQRT 1 |
239 | #endif | 317 | #endif |
@@ -247,44 +325,79 @@ | |||
247 | #define LJ_ARCH_XENON 1 | 325 | #define LJ_ARCH_XENON 1 |
248 | #endif | 326 | #endif |
249 | 327 | ||
250 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE | 328 | #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 | 329 | ||
271 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) | 330 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) |
331 | #if __mips_isa_rev >= 6 | ||
332 | #define LJ_TARGET_MIPSR6 1 | ||
333 | #define LJ_TARGET_UNALIGNED 1 | ||
334 | #endif | ||
335 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
336 | #if LJ_TARGET_MIPSR6 | ||
337 | #define LJ_ARCH_NAME "mips32r6el" | ||
338 | #else | ||
272 | #define LJ_ARCH_NAME "mipsel" | 339 | #define LJ_ARCH_NAME "mipsel" |
340 | #endif | ||
341 | #else | ||
342 | #if LJ_TARGET_MIPSR6 | ||
343 | #define LJ_ARCH_NAME "mips64r6el" | ||
344 | #else | ||
345 | #define LJ_ARCH_NAME "mips64el" | ||
346 | #endif | ||
347 | #endif | ||
273 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 348 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
274 | #else | 349 | #else |
350 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
351 | #if LJ_TARGET_MIPSR6 | ||
352 | #define LJ_ARCH_NAME "mips32r6" | ||
353 | #else | ||
275 | #define LJ_ARCH_NAME "mips" | 354 | #define LJ_ARCH_NAME "mips" |
355 | #endif | ||
356 | #else | ||
357 | #if LJ_TARGET_MIPSR6 | ||
358 | #define LJ_ARCH_NAME "mips64r6" | ||
359 | #else | ||
360 | #define LJ_ARCH_NAME "mips64" | ||
361 | #endif | ||
362 | #endif | ||
276 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 363 | #define LJ_ARCH_ENDIAN LUAJIT_BE |
277 | #endif | 364 | #endif |
365 | |||
366 | #if !defined(LJ_ARCH_HASFPU) | ||
367 | #ifdef __mips_soft_float | ||
368 | #define LJ_ARCH_HASFPU 0 | ||
369 | #else | ||
370 | #define LJ_ARCH_HASFPU 1 | ||
371 | #endif | ||
372 | #endif | ||
373 | |||
374 | #if !defined(LJ_ABI_SOFTFP) | ||
375 | #ifdef __mips_soft_float | ||
376 | #define LJ_ABI_SOFTFP 1 | ||
377 | #else | ||
378 | #define LJ_ABI_SOFTFP 0 | ||
379 | #endif | ||
380 | #endif | ||
381 | |||
382 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
278 | #define LJ_ARCH_BITS 32 | 383 | #define LJ_ARCH_BITS 32 |
384 | #define LJ_TARGET_MIPS32 1 | ||
385 | #else | ||
386 | #define LJ_ARCH_BITS 64 | ||
387 | #define LJ_TARGET_MIPS64 1 | ||
388 | #define LJ_TARGET_GC64 1 | ||
389 | #endif | ||
279 | #define LJ_TARGET_MIPS 1 | 390 | #define LJ_TARGET_MIPS 1 |
280 | #define LJ_TARGET_EHRETREG 4 | 391 | #define LJ_TARGET_EHRETREG 4 |
281 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ | 392 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ |
282 | #define LJ_TARGET_MASKSHIFT 1 | 393 | #define LJ_TARGET_MASKSHIFT 1 |
283 | #define LJ_TARGET_MASKROT 1 | 394 | #define LJ_TARGET_MASKROT 1 |
284 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 395 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
285 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE | 396 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
286 | 397 | ||
287 | #if _MIPS_ARCH_MIPS32R2 | 398 | #if LJ_TARGET_MIPSR6 |
399 | #define LJ_ARCH_VERSION 60 | ||
400 | #elif _MIPS_ARCH_MIPS32R2 || _MIPS_ARCH_MIPS64R2 | ||
288 | #define LJ_ARCH_VERSION 20 | 401 | #define LJ_ARCH_VERSION 20 |
289 | #else | 402 | #else |
290 | #define LJ_ARCH_VERSION 10 | 403 | #define LJ_ARCH_VERSION 10 |
@@ -312,6 +425,16 @@ | |||
312 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) | 425 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) |
313 | #error "Need at least GCC 4.2 or newer" | 426 | #error "Need at least GCC 4.2 or newer" |
314 | #endif | 427 | #endif |
428 | #elif LJ_TARGET_ARM64 | ||
429 | #if __clang__ | ||
430 | #if ((__clang_major__ < 3) || ((__clang_major__ == 3) && __clang_minor__ < 5)) && !defined(__NX_TOOLCHAIN_MAJOR__) | ||
431 | #error "Need at least Clang 3.5 or newer" | ||
432 | #endif | ||
433 | #else | ||
434 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 8) | ||
435 | #error "Need at least GCC 4.8 or newer" | ||
436 | #endif | ||
437 | #endif | ||
315 | #elif !LJ_TARGET_PS3 | 438 | #elif !LJ_TARGET_PS3 |
316 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) | 439 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) |
317 | #error "Need at least GCC 4.3 or newer" | 440 | #error "Need at least GCC 4.3 or newer" |
@@ -335,22 +458,29 @@ | |||
335 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) | 458 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) |
336 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" | 459 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" |
337 | #endif | 460 | #endif |
338 | #elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE | 461 | #elif LJ_TARGET_ARM64 |
339 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | 462 | #if defined(_ILP32) |
340 | #error "No support for PowerPC CPUs without double-precision FPU" | 463 | #error "No support for ILP32 model on ARM64" |
341 | #endif | 464 | #endif |
465 | #elif LJ_TARGET_PPC | ||
342 | #if defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN)) | 466 | #if defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN)) |
343 | #error "No support for little-endian PowerPC" | 467 | #error "No support for little-endian PPC32" |
468 | #endif | ||
469 | #if defined(__NO_FPRS__) && !defined(_SOFT_FLOAT) | ||
470 | #error "No support for PPC/e500 anymore (use LuaJIT 2.0)" | ||
344 | #endif | 471 | #endif |
345 | #if defined(_LP64) | 472 | #elif LJ_TARGET_MIPS32 |
346 | #error "No support for PowerPC 64 bit mode" | 473 | #if !((defined(_MIPS_SIM_ABI32) && _MIPS_SIM == _MIPS_SIM_ABI32) || (defined(_ABIO32) && _MIPS_SIM == _ABIO32)) |
474 | #error "Only o32 ABI supported for MIPS32" | ||
347 | #endif | 475 | #endif |
348 | #elif LJ_TARGET_MIPS | 476 | #if LJ_TARGET_MIPSR6 |
349 | #if defined(__mips_soft_float) | 477 | /* Not that useful, since most available r6 CPUs are 64 bit. */ |
350 | #error "No support for MIPS CPUs without FPU" | 478 | #error "No support for MIPS32R6" |
351 | #endif | 479 | #endif |
352 | #if defined(_LP64) | 480 | #elif LJ_TARGET_MIPS64 |
353 | #error "No support for MIPS64" | 481 | #if !((defined(_MIPS_SIM_ABI64) && _MIPS_SIM == _MIPS_SIM_ABI64) || (defined(_ABI64) && _MIPS_SIM == _ABI64)) |
482 | /* MIPS32ON64 aka n32 ABI support might be desirable, but difficult. */ | ||
483 | #error "Only n64 ABI supported for MIPS64" | ||
354 | #endif | 484 | #endif |
355 | #endif | 485 | #endif |
356 | #endif | 486 | #endif |
@@ -376,6 +506,20 @@ | |||
376 | #endif | 506 | #endif |
377 | #endif | 507 | #endif |
378 | 508 | ||
509 | /* 64 bit GC references. */ | ||
510 | #if LJ_TARGET_GC64 | ||
511 | #define LJ_GC64 1 | ||
512 | #else | ||
513 | #define LJ_GC64 0 | ||
514 | #endif | ||
515 | |||
516 | /* 2-slot frame info. */ | ||
517 | #if LJ_GC64 | ||
518 | #define LJ_FR2 1 | ||
519 | #else | ||
520 | #define LJ_FR2 0 | ||
521 | #endif | ||
522 | |||
379 | /* Disable or enable the JIT compiler. */ | 523 | /* Disable or enable the JIT compiler. */ |
380 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) | 524 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) |
381 | #define LJ_HASJIT 0 | 525 | #define LJ_HASJIT 0 |
@@ -390,6 +534,21 @@ | |||
390 | #define LJ_HASFFI 1 | 534 | #define LJ_HASFFI 1 |
391 | #endif | 535 | #endif |
392 | 536 | ||
537 | #if defined(LUAJIT_DISABLE_PROFILE) | ||
538 | #define LJ_HASPROFILE 0 | ||
539 | #elif LJ_TARGET_POSIX | ||
540 | #define LJ_HASPROFILE 1 | ||
541 | #define LJ_PROFILE_SIGPROF 1 | ||
542 | #elif LJ_TARGET_PS3 | ||
543 | #define LJ_HASPROFILE 1 | ||
544 | #define LJ_PROFILE_PTHREAD 1 | ||
545 | #elif LJ_TARGET_WINDOWS || LJ_TARGET_XBOX360 | ||
546 | #define LJ_HASPROFILE 1 | ||
547 | #define LJ_PROFILE_WTHREAD 1 | ||
548 | #else | ||
549 | #define LJ_HASPROFILE 0 | ||
550 | #endif | ||
551 | |||
393 | #ifndef LJ_ARCH_HASFPU | 552 | #ifndef LJ_ARCH_HASFPU |
394 | #define LJ_ARCH_HASFPU 1 | 553 | #define LJ_ARCH_HASFPU 1 |
395 | #endif | 554 | #endif |
@@ -397,6 +556,7 @@ | |||
397 | #define LJ_ABI_SOFTFP 0 | 556 | #define LJ_ABI_SOFTFP 0 |
398 | #endif | 557 | #endif |
399 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) | 558 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) |
559 | #define LJ_SOFTFP32 (LJ_SOFTFP && LJ_32) | ||
400 | 560 | ||
401 | #if LJ_ARCH_ENDIAN == LUAJIT_BE | 561 | #if LJ_ARCH_ENDIAN == LUAJIT_BE |
402 | #define LJ_LE 0 | 562 | #define LJ_LE 0 |
@@ -422,11 +582,11 @@ | |||
422 | #define LJ_TARGET_UNALIGNED 0 | 582 | #define LJ_TARGET_UNALIGNED 0 |
423 | #endif | 583 | #endif |
424 | 584 | ||
425 | /* Various workarounds for embedded operating systems. */ | 585 | /* Various workarounds for embedded operating systems or weak C runtimes. */ |
426 | #if (defined(__ANDROID__) && !defined(LJ_TARGET_X86ORX64)) || defined(__symbian__) || LJ_TARGET_XBOX360 | 586 | #if defined(__ANDROID__) || defined(__symbian__) || LJ_TARGET_XBOX360 || LJ_TARGET_WINDOWS |
427 | #define LUAJIT_NO_LOG2 | 587 | #define LUAJIT_NO_LOG2 |
428 | #endif | 588 | #endif |
429 | #if defined(__symbian__) | 589 | #if defined(__symbian__) || LJ_TARGET_WINDOWS |
430 | #define LUAJIT_NO_EXP2 | 590 | #define LUAJIT_NO_EXP2 |
431 | #endif | 591 | #endif |
432 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) | 592 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) |
@@ -442,6 +602,18 @@ | |||
442 | #define LJ_NO_UNWIND 1 | 602 | #define LJ_NO_UNWIND 1 |
443 | #endif | 603 | #endif |
444 | 604 | ||
605 | #if LJ_TARGET_WINDOWS | ||
606 | #if LJ_TARGET_UWP | ||
607 | #define LJ_WIN_VALLOC VirtualAllocFromApp | ||
608 | #define LJ_WIN_VPROTECT VirtualProtectFromApp | ||
609 | extern void *LJ_WIN_LOADLIBA(const char *path); | ||
610 | #else | ||
611 | #define LJ_WIN_VALLOC VirtualAlloc | ||
612 | #define LJ_WIN_VPROTECT VirtualProtect | ||
613 | #define LJ_WIN_LOADLIBA(path) LoadLibraryExA((path), NULL, 0) | ||
614 | #endif | ||
615 | #endif | ||
616 | |||
445 | /* Compatibility with Lua 5.1 vs. 5.2. */ | 617 | /* Compatibility with Lua 5.1 vs. 5.2. */ |
446 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 618 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
447 | #define LJ_52 1 | 619 | #define LJ_52 1 |