diff options
| -rw-r--r-- | src/lib_jit.c | 26 | ||||
| -rw-r--r-- | src/lj_arch.h | 65 |
2 files changed, 83 insertions, 8 deletions
diff --git a/src/lib_jit.c b/src/lib_jit.c index 7d5e0aef..db6bcfa8 100644 --- a/src/lib_jit.c +++ b/src/lib_jit.c | |||
| @@ -591,11 +591,11 @@ static uint32_t jit_cpudetect(lua_State *L) | |||
| 591 | #elif LJ_TARGET_ARM | 591 | #elif LJ_TARGET_ARM |
| 592 | #if LJ_HASJIT | 592 | #if LJ_HASJIT |
| 593 | /* Compile-time ARM CPU detection. */ | 593 | /* Compile-time ARM CPU detection. */ |
| 594 | #if __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ | 594 | #if LJ_ARCH_VERSION >= 70 |
| 595 | flags |= JIT_F_ARMV6|JIT_F_ARMV6T2|JIT_F_ARMV7; | 595 | flags |= JIT_F_ARMV6|JIT_F_ARMV6T2|JIT_F_ARMV7; |
| 596 | #elif __ARM_ARCH_6T2__ | 596 | #elif LJ_ARCH_VERSION >= 61 |
| 597 | flags |= JIT_F_ARMV6|JIT_F_ARMV6T2; | 597 | flags |= JIT_F_ARMV6|JIT_F_ARMV6T2; |
| 598 | #elif __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__ | 598 | #elif LJ_ARCH_VERSION >= 60 |
| 599 | flags |= JIT_F_ARMV6; | 599 | flags |= JIT_F_ARMV6; |
| 600 | #endif | 600 | #endif |
| 601 | /* Runtime ARM CPU detection. */ | 601 | /* Runtime ARM CPU detection. */ |
| @@ -612,12 +612,28 @@ static uint32_t jit_cpudetect(lua_State *L) | |||
| 612 | } | 612 | } |
| 613 | #endif | 613 | #endif |
| 614 | #endif | 614 | #endif |
| 615 | #elif LJ_TARGET_PPC || LJ_TARGET_PPCSPE | 615 | #elif LJ_TARGET_PPC |
| 616 | #if LJ_ARCH_PPC64 | ||
| 617 | flags |= JIT_F_PPC64; | ||
| 618 | #endif | ||
| 619 | #if LJ_ARCH_SQRT | ||
| 620 | flags |= JIT_F_SQRT; | ||
| 621 | #endif | ||
| 622 | #if LJ_ARCH_ROUND | ||
| 623 | flags |= JIT_F_ROUND; | ||
| 624 | #endif | ||
| 625 | #if LJ_ARCH_CELL | ||
| 626 | flags |= JIT_F_CELL; | ||
| 627 | #endif | ||
| 628 | #if LJ_ARCH_XENON | ||
| 629 | flags |= JIT_F_XENON; | ||
| 630 | #endif | ||
| 631 | #elif LJ_TARGET_PPCSPE | ||
| 616 | /* Nothing to do. */ | 632 | /* Nothing to do. */ |
| 617 | #elif LJ_TARGET_MIPS | 633 | #elif LJ_TARGET_MIPS |
| 618 | #if LJ_HASJIT | 634 | #if LJ_HASJIT |
| 619 | /* Compile-time MIPS CPU detection. */ | 635 | /* Compile-time MIPS CPU detection. */ |
| 620 | #if _MIPS_ARCH_MIPS32R2 | 636 | #if LJ_ARCH_VERSION >= 20 |
| 621 | flags |= JIT_F_MIPS32R2; | 637 | flags |= JIT_F_MIPS32R2; |
| 622 | #endif | 638 | #endif |
| 623 | /* Runtime MIPS CPU detection. */ | 639 | /* Runtime MIPS CPU detection. */ |
diff --git a/src/lj_arch.h b/src/lj_arch.h index 5f788502..476c1241 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
| @@ -60,7 +60,7 @@ | |||
| 60 | /* Select native OS if no target OS defined. */ | 60 | /* Select native OS if no target OS defined. */ |
| 61 | #ifndef LUAJIT_OS | 61 | #ifndef LUAJIT_OS |
| 62 | 62 | ||
| 63 | #if defined(_WIN32) | 63 | #if defined(_WIN32) && !defined(_XBOX_VER) |
| 64 | #define LUAJIT_OS LUAJIT_OS_WINDOWS | 64 | #define LUAJIT_OS LUAJIT_OS_WINDOWS |
| 65 | #elif defined(__linux__) | 65 | #elif defined(__linux__) |
| 66 | #define LUAJIT_OS LUAJIT_OS_LINUX | 66 | #define LUAJIT_OS LUAJIT_OS_LINUX |
| @@ -100,6 +100,16 @@ | |||
| 100 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) | 100 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) |
| 101 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX | 101 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX |
| 102 | 102 | ||
| 103 | #ifdef __CELLOS_LV2__ | ||
| 104 | #define LJ_TARGET_PS3 1 | ||
| 105 | #define LJ_TARGET_CONSOLE 1 | ||
| 106 | #endif | ||
| 107 | |||
| 108 | #if _XBOX_VER >= 200 | ||
| 109 | #define LJ_TARGET_XBOX360 1 | ||
| 110 | #define LJ_TARGET_CONSOLE 1 | ||
| 111 | #endif | ||
| 112 | |||
| 103 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ | 113 | #define LJ_NUMMODE_SINGLE 0 /* Single-number mode only. */ |
| 104 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ | 114 | #define LJ_NUMMODE_SINGLE_DUAL 1 /* Default to single-number mode. */ |
| 105 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ | 115 | #define LJ_NUMMODE_DUAL 2 /* Dual-number mode only. */ |
| @@ -151,6 +161,16 @@ | |||
| 151 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 161 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
| 152 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL | 162 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL |
| 153 | 163 | ||
| 164 | #if __ARM_ARCH_7__ || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ | ||
| 165 | #define LJ_ARCH_VERSION 70 | ||
| 166 | #elif __ARM_ARCH_6T2__ | ||
| 167 | #define LJ_ARCH_VERSION 61 | ||
| 168 | #elif __ARM_ARCH_6__ || __ARM_ARCH_6J__ || __ARM_ARCH_6K__ || __ARM_ARCH_6Z__ || __ARM_ARCH_6ZK__ | ||
| 169 | #define LJ_ARCH_VERSION 60 | ||
| 170 | #else | ||
| 171 | #define LJ_ARCH_VERSION 50 | ||
| 172 | #endif | ||
| 173 | |||
| 154 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC | 174 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC |
| 155 | 175 | ||
| 156 | #define LJ_ARCH_NAME "ppc" | 176 | #define LJ_ARCH_NAME "ppc" |
| @@ -165,6 +185,35 @@ | |||
| 165 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ | 185 | #define LJ_TARGET_UNIFYROT 1 /* Want only IR_BROL. */ |
| 166 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE | 186 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_DUAL_SINGLE |
| 167 | 187 | ||
| 188 | #if _ARCH_PWR7 | ||
| 189 | #define LJ_ARCH_VERSION 70 | ||
| 190 | #elif _ARCH_PWR6 | ||
| 191 | #define LJ_ARCH_VERSION 60 | ||
| 192 | #elif _ARCH_PWR5X | ||
| 193 | #define LJ_ARCH_VERSION 51 | ||
| 194 | #elif _ARCH_PWR5 | ||
| 195 | #define LJ_ARCH_VERSION 50 | ||
| 196 | #elif _ARCH_PWR4 | ||
| 197 | #define LJ_ARCH_VERSION 40 | ||
| 198 | #else | ||
| 199 | #define LJ_ARCH_VERSION 0 | ||
| 200 | #endif | ||
| 201 | #if __PPC64__ || __powerpc64__ || LJ_TARGET_XBOX360 | ||
| 202 | #define LJ_ARCH_PPC64 1 | ||
| 203 | #endif | ||
| 204 | #if _ARCH_PPCSQ | ||
| 205 | #define LJ_ARCH_SQRT 1 | ||
| 206 | #endif | ||
| 207 | #if _ARCH_PPC5X | ||
| 208 | #define LJ_ARCH_ROUND 1 | ||
| 209 | #endif | ||
| 210 | #if __PPU__ | ||
| 211 | #define LJ_ARCH_CELL 1 | ||
| 212 | #endif | ||
| 213 | #if LJ_TARGET_XBOX360 | ||
| 214 | #define LJ_ARCH_XENON 1 | ||
| 215 | #endif | ||
| 216 | |||
| 168 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE | 217 | #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE |
| 169 | 218 | ||
| 170 | #define LJ_ARCH_NAME "ppcspe" | 219 | #define LJ_ARCH_NAME "ppcspe" |
| @@ -202,6 +251,12 @@ | |||
| 202 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ | 251 | #define LJ_TARGET_UNIFYROT 2 /* Want only IR_BROR. */ |
| 203 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE | 252 | #define LJ_ARCH_NUMMODE LJ_NUMMODE_SINGLE |
| 204 | 253 | ||
| 254 | #if _MIPS_ARCH_MIPS32R2 | ||
| 255 | #define LJ_ARCH_VERSION 20 | ||
| 256 | #else | ||
| 257 | #define LJ_ARCH_VERSION 10 | ||
| 258 | #endif | ||
| 259 | |||
| 205 | #else | 260 | #else |
| 206 | #error "No target architecture defined" | 261 | #error "No target architecture defined" |
| 207 | #endif | 262 | #endif |
| @@ -240,6 +295,9 @@ | |||
| 240 | #if defined(__ARM_PCS_VFP) | 295 | #if defined(__ARM_PCS_VFP) |
| 241 | #error "No support for ARM hard-float ABI (yet)" | 296 | #error "No support for ARM hard-float ABI (yet)" |
| 242 | #endif | 297 | #endif |
| 298 | #if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ | ||
| 299 | #error "No support for Cortex-M CPUs" | ||
| 300 | #endif | ||
| 243 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) | 301 | #if !(__ARM_EABI__ || LJ_TARGET_IOS) |
| 244 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" | 302 | #error "Only ARM EABI or iOS 3.0+ ABI is supported" |
| 245 | #endif | 303 | #endif |
| @@ -269,8 +327,9 @@ | |||
| 269 | #define LJ_DUALNUM 0 | 327 | #define LJ_DUALNUM 0 |
| 270 | #endif | 328 | #endif |
| 271 | 329 | ||
| 272 | #if LJ_TARGET_IOS | 330 | #if LJ_TARGET_IOS || LJ_TARGET_CONSOLE |
| 273 | /* Runtime code generation is restricted on iOS. Complain to Apple, not me. */ | 331 | /* Runtime code generation is restricted on iOS. Complain to Apple, not me. */ |
| 332 | /* Ditto for the consoles. Complain to Sony or MS, not me. */ | ||
| 274 | #ifndef LUAJIT_ENABLE_JIT | 333 | #ifndef LUAJIT_ENABLE_JIT |
| 275 | #define LJ_OS_NOJIT 1 | 334 | #define LJ_OS_NOJIT 1 |
| 276 | #endif | 335 | #endif |
| @@ -320,7 +379,7 @@ | |||
| 320 | #define LUAJIT_NO_EXP2 | 379 | #define LUAJIT_NO_EXP2 |
| 321 | #endif | 380 | #endif |
| 322 | 381 | ||
| 323 | #if defined(__symbian__) || LJ_TARGET_IOS | 382 | #if defined(__symbian__) || LJ_TARGET_IOS || LJ_TARGET_PS3 |
| 324 | #define LUAJIT_NO_UNWIND | 383 | #define LUAJIT_NO_UNWIND |
| 325 | #endif | 384 | #endif |
| 326 | 385 | ||
