diff options
Diffstat (limited to 'src/lj_arch.h')
-rw-r--r-- | src/lj_arch.h | 259 |
1 files changed, 203 insertions, 56 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h index 5f7e4456..903d6c64 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,86 @@ | |||
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 | #define LJ_ARCH_PPC64 1 | ||
300 | #define LJ_TARGET_GC64 1 | ||
301 | #define LJ_ARCH_NOJIT 1 /* NYI */ | ||
302 | #endif | ||
219 | 303 | ||
220 | #if _ARCH_PWR7 | 304 | #if _ARCH_PWR7 |
221 | #define LJ_ARCH_VERSION 70 | 305 | #define LJ_ARCH_VERSION 70 |
@@ -230,10 +314,6 @@ | |||
230 | #else | 314 | #else |
231 | #define LJ_ARCH_VERSION 0 | 315 | #define LJ_ARCH_VERSION 0 |
232 | #endif | 316 | #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 | 317 | #if _ARCH_PPCSQ |
238 | #define LJ_ARCH_SQRT 1 | 318 | #define LJ_ARCH_SQRT 1 |
239 | #endif | 319 | #endif |
@@ -247,44 +327,57 @@ | |||
247 | #define LJ_ARCH_XENON 1 | 327 | #define LJ_ARCH_XENON 1 |
248 | #endif | 328 | #endif |
249 | 329 | ||
250 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE | 330 | #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 | 331 | ||
271 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) | 332 | #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) |
333 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
272 | #define LJ_ARCH_NAME "mipsel" | 334 | #define LJ_ARCH_NAME "mipsel" |
335 | #else | ||
336 | #define LJ_ARCH_NAME "mips64el" | ||
337 | #endif | ||
273 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 338 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
274 | #else | 339 | #else |
340 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
275 | #define LJ_ARCH_NAME "mips" | 341 | #define LJ_ARCH_NAME "mips" |
342 | #else | ||
343 | #define LJ_ARCH_NAME "mips64" | ||
344 | #endif | ||
276 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 345 | #define LJ_ARCH_ENDIAN LUAJIT_BE |
277 | #endif | 346 | #endif |
347 | |||
348 | #if !defined(LJ_ARCH_HASFPU) | ||
349 | #ifdef __mips_soft_float | ||
350 | #define LJ_ARCH_HASFPU 0 | ||
351 | #else | ||
352 | #define LJ_ARCH_HASFPU 1 | ||
353 | #endif | ||
354 | #endif | ||
355 | |||
356 | #if !defined(LJ_ABI_SOFTFP) | ||
357 | #ifdef __mips_soft_float | ||
358 | #define LJ_ABI_SOFTFP 1 | ||
359 | #else | ||
360 | #define LJ_ABI_SOFTFP 0 | ||
361 | #endif | ||
362 | #endif | ||
363 | |||
364 | #if LUAJIT_TARGET == LUAJIT_ARCH_MIPS32 | ||
278 | #define LJ_ARCH_BITS 32 | 365 | #define LJ_ARCH_BITS 32 |
366 | #define LJ_TARGET_MIPS32 1 | ||
367 | #else | ||
368 | #define LJ_ARCH_BITS 64 | ||
369 | #define LJ_TARGET_MIPS64 1 | ||
370 | #define LJ_TARGET_GC64 1 | ||
371 | #endif | ||
279 | #define LJ_TARGET_MIPS 1 | 372 | #define LJ_TARGET_MIPS 1 |
280 | #define LJ_TARGET_EHRETREG 4 | 373 | #define LJ_TARGET_EHRETREG 4 |
281 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ | 374 | #define LJ_TARGET_JUMPRANGE 27 /* 2*2^27 = 256MB-aligned region */ |
282 | #define LJ_TARGET_MASKSHIFT 1 | 375 | #define LJ_TARGET_MASKSHIFT 1 |
283 | #define LJ_TARGET_MASKROT 1 | 376 | #define LJ_TARGET_MASKROT 1 |
284 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 377 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
285 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE | 378 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
286 | 379 | ||
287 | #if _MIPS_ARCH_MIPS32R2 | 380 | #if _MIPS_ARCH_MIPS32R2 || _MIPS_ARCH_MIPS64R2 |
288 | #define LJ_ARCH_VERSION 20 | 381 | #define LJ_ARCH_VERSION 20 |
289 | #else | 382 | #else |
290 | #define LJ_ARCH_VERSION 10 | 383 | #define LJ_ARCH_VERSION 10 |
@@ -312,6 +405,16 @@ | |||
312 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) | 405 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 2) |
313 | #error "Need at least GCC 4.2 or newer" | 406 | #error "Need at least GCC 4.2 or newer" |
314 | #endif | 407 | #endif |
408 | #elif LJ_TARGET_ARM64 | ||
409 | #if __clang__ | ||
410 | #if ((__clang_major__ < 3) || ((__clang_major__ == 3) && __clang_minor__ < 5)) && !defined(__NX_TOOLCHAIN_MAJOR__) | ||
411 | #error "Need at least Clang 3.5 or newer" | ||
412 | #endif | ||
413 | #else | ||
414 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 8) | ||
415 | #error "Need at least GCC 4.8 or newer" | ||
416 | #endif | ||
417 | #endif | ||
315 | #elif !LJ_TARGET_PS3 | 418 | #elif !LJ_TARGET_PS3 |
316 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) | 419 | #if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3) |
317 | #error "Need at least GCC 4.3 or newer" | 420 | #error "Need at least GCC 4.3 or newer" |
@@ -335,22 +438,24 @@ | |||
335 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) | 438 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) |
336 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" | 439 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" |
337 | #endif | 440 | #endif |
338 | #elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE | 441 | #elif LJ_TARGET_ARM64 |
339 | #if defined(_SOFT_FLOAT) || defined(_SOFT_DOUBLE) | 442 | #if defined(_ILP32) |
340 | #error "No support for PowerPC CPUs without double-precision FPU" | 443 | #error "No support for ILP32 model on ARM64" |
341 | #endif | 444 | #endif |
342 | #if defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN)) | 445 | #elif LJ_TARGET_PPC |
343 | #error "No support for little-endian PowerPC" | 446 | #if !LJ_ARCH_PPC64 && (defined(_LITTLE_ENDIAN) && (!defined(_BYTE_ORDER) || (_BYTE_ORDER == _LITTLE_ENDIAN))) |
447 | #error "No support for little-endian PPC32" | ||
344 | #endif | 448 | #endif |
345 | #if defined(_LP64) | 449 | #if defined(__NO_FPRS__) && !defined(_SOFT_FLOAT) |
346 | #error "No support for PowerPC 64 bit mode" | 450 | #error "No support for PPC/e500 anymore (use LuaJIT 2.0)" |
347 | #endif | 451 | #endif |
348 | #elif LJ_TARGET_MIPS | 452 | #elif LJ_TARGET_MIPS32 |
349 | #if defined(__mips_soft_float) | 453 | #if !((defined(_MIPS_SIM_ABI32) && _MIPS_SIM == _MIPS_SIM_ABI32) || (defined(_ABIO32) && _MIPS_SIM == _ABIO32)) |
350 | #error "No support for MIPS CPUs without FPU" | 454 | #error "Only o32 ABI supported for MIPS32" |
351 | #endif | 455 | #endif |
352 | #if defined(_LP64) | 456 | #elif LJ_TARGET_MIPS64 |
353 | #error "No support for MIPS64" | 457 | #if !((defined(_MIPS_SIM_ABI64) && _MIPS_SIM == _MIPS_SIM_ABI64) || (defined(_ABI64) && _MIPS_SIM == _ABI64)) |
458 | #error "Only n64 ABI supported for MIPS64" | ||
354 | #endif | 459 | #endif |
355 | #endif | 460 | #endif |
356 | #endif | 461 | #endif |
@@ -376,6 +481,20 @@ | |||
376 | #endif | 481 | #endif |
377 | #endif | 482 | #endif |
378 | 483 | ||
484 | /* 64 bit GC references. */ | ||
485 | #if LJ_TARGET_GC64 | ||
486 | #define LJ_GC64 1 | ||
487 | #else | ||
488 | #define LJ_GC64 0 | ||
489 | #endif | ||
490 | |||
491 | /* 2-slot frame info. */ | ||
492 | #if LJ_GC64 | ||
493 | #define LJ_FR2 1 | ||
494 | #else | ||
495 | #define LJ_FR2 0 | ||
496 | #endif | ||
497 | |||
379 | /* Disable or enable the JIT compiler. */ | 498 | /* Disable or enable the JIT compiler. */ |
380 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) | 499 | #if defined(LUAJIT_DISABLE_JIT) || defined(LJ_ARCH_NOJIT) || defined(LJ_OS_NOJIT) |
381 | #define LJ_HASJIT 0 | 500 | #define LJ_HASJIT 0 |
@@ -390,6 +509,21 @@ | |||
390 | #define LJ_HASFFI 1 | 509 | #define LJ_HASFFI 1 |
391 | #endif | 510 | #endif |
392 | 511 | ||
512 | #if defined(LUAJIT_DISABLE_PROFILE) | ||
513 | #define LJ_HASPROFILE 0 | ||
514 | #elif LJ_TARGET_POSIX | ||
515 | #define LJ_HASPROFILE 1 | ||
516 | #define LJ_PROFILE_SIGPROF 1 | ||
517 | #elif LJ_TARGET_PS3 | ||
518 | #define LJ_HASPROFILE 1 | ||
519 | #define LJ_PROFILE_PTHREAD 1 | ||
520 | #elif LJ_TARGET_WINDOWS || LJ_TARGET_XBOX360 | ||
521 | #define LJ_HASPROFILE 1 | ||
522 | #define LJ_PROFILE_WTHREAD 1 | ||
523 | #else | ||
524 | #define LJ_HASPROFILE 0 | ||
525 | #endif | ||
526 | |||
393 | #ifndef LJ_ARCH_HASFPU | 527 | #ifndef LJ_ARCH_HASFPU |
394 | #define LJ_ARCH_HASFPU 1 | 528 | #define LJ_ARCH_HASFPU 1 |
395 | #endif | 529 | #endif |
@@ -397,6 +531,7 @@ | |||
397 | #define LJ_ABI_SOFTFP 0 | 531 | #define LJ_ABI_SOFTFP 0 |
398 | #endif | 532 | #endif |
399 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) | 533 | #define LJ_SOFTFP (!LJ_ARCH_HASFPU) |
534 | #define LJ_SOFTFP32 (LJ_SOFTFP && LJ_32) | ||
400 | 535 | ||
401 | #if LJ_ARCH_ENDIAN == LUAJIT_BE | 536 | #if LJ_ARCH_ENDIAN == LUAJIT_BE |
402 | #define LJ_LE 0 | 537 | #define LJ_LE 0 |
@@ -422,11 +557,11 @@ | |||
422 | #define LJ_TARGET_UNALIGNED 0 | 557 | #define LJ_TARGET_UNALIGNED 0 |
423 | #endif | 558 | #endif |
424 | 559 | ||
425 | /* Various workarounds for embedded operating systems. */ | 560 | /* Various workarounds for embedded operating systems or weak C runtimes. */ |
426 | #if (defined(__ANDROID__) && !defined(LJ_TARGET_X86ORX64)) || defined(__symbian__) || LJ_TARGET_XBOX360 | 561 | #if defined(__ANDROID__) || defined(__symbian__) || LJ_TARGET_XBOX360 || LJ_TARGET_WINDOWS |
427 | #define LUAJIT_NO_LOG2 | 562 | #define LUAJIT_NO_LOG2 |
428 | #endif | 563 | #endif |
429 | #if defined(__symbian__) | 564 | #if defined(__symbian__) || LJ_TARGET_WINDOWS |
430 | #define LUAJIT_NO_EXP2 | 565 | #define LUAJIT_NO_EXP2 |
431 | #endif | 566 | #endif |
432 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) | 567 | #if LJ_TARGET_CONSOLE || (LJ_TARGET_IOS && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0) |
@@ -442,6 +577,18 @@ | |||
442 | #define LJ_NO_UNWIND 1 | 577 | #define LJ_NO_UNWIND 1 |
443 | #endif | 578 | #endif |
444 | 579 | ||
580 | #if LJ_TARGET_WINDOWS | ||
581 | #if LJ_TARGET_UWP | ||
582 | #define LJ_WIN_VALLOC VirtualAllocFromApp | ||
583 | #define LJ_WIN_VPROTECT VirtualProtectFromApp | ||
584 | extern void *LJ_WIN_LOADLIBA(const char *path); | ||
585 | #else | ||
586 | #define LJ_WIN_VALLOC VirtualAlloc | ||
587 | #define LJ_WIN_VPROTECT VirtualProtect | ||
588 | #define LJ_WIN_LOADLIBA(path) LoadLibraryExA((path), NULL, 0) | ||
589 | #endif | ||
590 | #endif | ||
591 | |||
445 | /* Compatibility with Lua 5.1 vs. 5.2. */ | 592 | /* Compatibility with Lua 5.1 vs. 5.2. */ |
446 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | 593 | #ifdef LUAJIT_ENABLE_LUA52COMPAT |
447 | #define LJ_52 1 | 594 | #define LJ_52 1 |