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.h282
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
609extern 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