aboutsummaryrefslogtreecommitdiff
path: root/src/lj_arch.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_arch.h')
-rw-r--r--src/lj_arch.h259
1 files changed, 203 insertions, 56 deletions
diff --git a/src/lj_arch.h b/src/lj_arch.h
index 5f7e4456..31a11593 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#ifdef LUAJIT_ENABLE_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
584extern 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