diff options
| author | Mike Pall <mike> | 2010-11-16 14:06:59 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-11-16 15:03:40 +0100 |
| commit | 24baf7795574ca40be2c2be8da8cd483551a546a (patch) | |
| tree | e3e2629947dc8c8bd2d25d7a6c9ab7db54f814a1 /src | |
| parent | 1de05d1147a6fe69b55111d605eccdedc8c6c993 (diff) | |
| download | luajit-24baf7795574ca40be2c2be8da8cd483551a546a.tar.gz luajit-24baf7795574ca40be2c2be8da8cd483551a546a.tar.bz2 luajit-24baf7795574ca40be2c2be8da8cd483551a546a.zip | |
Cleanup architecture, ABI and OS definitions.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 2 | ||||
| -rw-r--r-- | src/buildvm.c | 11 | ||||
| -rw-r--r-- | src/lib_io.c | 12 | ||||
| -rw-r--r-- | src/lib_os.c | 12 | ||||
| -rw-r--r-- | src/lib_package.c | 6 | ||||
| -rw-r--r-- | src/lj_alloc.c | 11 | ||||
| -rw-r--r-- | src/lj_arch.h | 68 | ||||
| -rw-r--r-- | src/lj_asm.c | 8 | ||||
| -rw-r--r-- | src/lj_err.c | 10 | ||||
| -rw-r--r-- | src/lj_errmsg.h | 2 | ||||
| -rw-r--r-- | src/lj_frame.h | 2 | ||||
| -rw-r--r-- | src/lj_gdbjit.c | 2 | ||||
| -rw-r--r-- | src/lj_jit.h | 2 | ||||
| -rw-r--r-- | src/lj_lib.h | 2 | ||||
| -rw-r--r-- | src/lj_mcode.c | 6 | ||||
| -rw-r--r-- | src/lj_obj.h | 2 | ||||
| -rw-r--r-- | src/lj_target_x86.h | 6 | ||||
| -rw-r--r-- | src/luaconf.h | 15 | ||||
| -rw-r--r-- | src/luajit.c | 6 |
19 files changed, 113 insertions, 72 deletions
diff --git a/src/Makefile b/src/Makefile index bae6691e..da9f67b2 100644 --- a/src/Makefile +++ b/src/Makefile | |||
| @@ -336,7 +336,7 @@ ifeq (Windows,$(TARGET_SYS)) | |||
| 336 | LUAJIT_SO= $(TARGET_DLLNAME) | 336 | LUAJIT_SO= $(TARGET_DLLNAME) |
| 337 | LUAJIT_T= luajit.exe | 337 | LUAJIT_T= luajit.exe |
| 338 | ifneq ($(HOST_SYS),$(TARGET_SYS)) | 338 | ifneq ($(HOST_SYS),$(TARGET_SYS)) |
| 339 | HOST_XCFLAGS+= -malign-double | 339 | HOST_XCFLAGS+= -malign-double -DLUAJIT_OS=LUAJIT_OS_WINDOWS |
| 340 | endif | 340 | endif |
| 341 | # Mixed mode is not supported on Windows. And static mode doesn't work well. | 341 | # Mixed mode is not supported on Windows. And static mode doesn't work well. |
| 342 | # C modules cannot be loaded, because they bind to lua51.dll. | 342 | # C modules cannot be loaded, because they bind to lua51.dll. |
diff --git a/src/buildvm.c b/src/buildvm.c index 382550b8..72e612c1 100644 --- a/src/buildvm.c +++ b/src/buildvm.c | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | #include "lj_dispatch.h" | 23 | #include "lj_dispatch.h" |
| 24 | #include "luajit.h" | 24 | #include "luajit.h" |
| 25 | 25 | ||
| 26 | #ifdef LUA_USE_WIN | 26 | #if defined(_WIN32) |
| 27 | #include <fcntl.h> | 27 | #include <fcntl.h> |
| 28 | #include <io.h> | 28 | #include <io.h> |
| 29 | #endif | 29 | #endif |
| @@ -64,11 +64,12 @@ static int collect_reloc(BuildCtx *ctx, uint8_t *addr, int idx, int type); | |||
| 64 | #define DASM_ALIGNED_WRITES 1 | 64 | #define DASM_ALIGNED_WRITES 1 |
| 65 | 65 | ||
| 66 | /* Embed architecture-specific DynASM encoder and backend. */ | 66 | /* Embed architecture-specific DynASM encoder and backend. */ |
| 67 | #if LJ_TARGET_X86ORX64 | 67 | #if LJ_TARGET_X86 |
| 68 | #include "../dynasm/dasm_x86.h" | 68 | #include "../dynasm/dasm_x86.h" |
| 69 | #if LJ_32 | ||
| 70 | #include "buildvm_x86.h" | 69 | #include "buildvm_x86.h" |
| 71 | #elif defined(_WIN64) | 70 | #elif LJ_TARGET_X64 |
| 71 | #include "../dynasm/dasm_x86.h" | ||
| 72 | #if LJ_ABI_WIN | ||
| 72 | #include "buildvm_x64win.h" | 73 | #include "buildvm_x64win.h" |
| 73 | #else | 74 | #else |
| 74 | #include "buildvm_x64.h" | 75 | #include "buildvm_x64.h" |
| @@ -449,7 +450,7 @@ int main(int argc, char **argv) | |||
| 449 | 450 | ||
| 450 | if (ctx->outname[0] == '-' && ctx->outname[1] == '\0') { | 451 | if (ctx->outname[0] == '-' && ctx->outname[1] == '\0') { |
| 451 | ctx->fp = stdout; | 452 | ctx->fp = stdout; |
| 452 | #ifdef LUA_USE_WIN | 453 | #if defined(_WIN32) |
| 453 | if (binmode) | 454 | if (binmode) |
| 454 | _setmode(_fileno(stdout), _O_BINARY); /* Yuck. */ | 455 | _setmode(_fileno(stdout), _O_BINARY); /* Yuck. */ |
| 455 | #endif | 456 | #endif |
diff --git a/src/lib_io.c b/src/lib_io.c index 787fdc6b..878b98af 100644 --- a/src/lib_io.c +++ b/src/lib_io.c | |||
| @@ -114,9 +114,9 @@ static int io_file_close(lua_State *L, IOFileUD *iof) | |||
| 114 | if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_FILE) { | 114 | if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_FILE) { |
| 115 | ok = (fclose(iof->fp) == 0); | 115 | ok = (fclose(iof->fp) == 0); |
| 116 | } else if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_PIPE) { | 116 | } else if ((iof->type & IOFILE_TYPE_MASK) == IOFILE_TYPE_PIPE) { |
| 117 | #if defined(LUA_USE_POSIX) | 117 | #if LJ_TARGET_POSIX |
| 118 | ok = (pclose(iof->fp) != -1); | 118 | ok = (pclose(iof->fp) != -1); |
| 119 | #elif defined(LUA_USE_WIN) | 119 | #elif LJ_TARGET_WINDOWS |
| 120 | ok = (_pclose(iof->fp) != -1); | 120 | ok = (_pclose(iof->fp) != -1); |
| 121 | #else | 121 | #else |
| 122 | ok = 0; | 122 | ok = 0; |
| @@ -289,7 +289,7 @@ LJLIB_CF(io_method_seek) | |||
| 289 | , | 289 | , |
| 290 | ofs = 0; | 290 | ofs = 0; |
| 291 | ) | 291 | ) |
| 292 | #if defined(LUA_USE_POSIX) | 292 | #if LJ_TARGET_POSIX |
| 293 | res = fseeko(fp, (int64_t)ofs, opt); | 293 | res = fseeko(fp, (int64_t)ofs, opt); |
| 294 | #elif _MSC_VER >= 1400 | 294 | #elif _MSC_VER >= 1400 |
| 295 | res = _fseeki64(fp, (int64_t)ofs, opt); | 295 | res = _fseeki64(fp, (int64_t)ofs, opt); |
| @@ -300,7 +300,7 @@ LJLIB_CF(io_method_seek) | |||
| 300 | #endif | 300 | #endif |
| 301 | if (res) | 301 | if (res) |
| 302 | return io_pushresult(L, 0, NULL); | 302 | return io_pushresult(L, 0, NULL); |
| 303 | #if defined(LUA_USE_POSIX) | 303 | #if LJ_TARGET_POSIX |
| 304 | ofs = cast_num(ftello(fp)); | 304 | ofs = cast_num(ftello(fp)); |
| 305 | #elif _MSC_VER >= 1400 | 305 | #elif _MSC_VER >= 1400 |
| 306 | ofs = cast_num(_ftelli64(fp)); | 306 | ofs = cast_num(_ftelli64(fp)); |
| @@ -374,13 +374,13 @@ LJLIB_CF(io_open) | |||
| 374 | 374 | ||
| 375 | LJLIB_CF(io_popen) | 375 | LJLIB_CF(io_popen) |
| 376 | { | 376 | { |
| 377 | #if defined(LUA_USE_POSIX) || defined(LUA_USE_WIN) | 377 | #if LJ_TARGET_POSIX || LJ_TARGET_WINDOWS |
| 378 | const char *fname = strdata(lj_lib_checkstr(L, 1)); | 378 | const char *fname = strdata(lj_lib_checkstr(L, 1)); |
| 379 | GCstr *s = lj_lib_optstr(L, 2); | 379 | GCstr *s = lj_lib_optstr(L, 2); |
| 380 | const char *mode = s ? strdata(s) : "r"; | 380 | const char *mode = s ? strdata(s) : "r"; |
| 381 | IOFileUD *iof = io_file_new(L); | 381 | IOFileUD *iof = io_file_new(L); |
| 382 | iof->type = IOFILE_TYPE_PIPE; | 382 | iof->type = IOFILE_TYPE_PIPE; |
| 383 | #ifdef LUA_USE_POSIX | 383 | #if LJ_TARGET_POSIX |
| 384 | fflush(NULL); | 384 | fflush(NULL); |
| 385 | iof->fp = popen(fname, mode); | 385 | iof->fp = popen(fname, mode); |
| 386 | #else | 386 | #else |
diff --git a/src/lib_os.c b/src/lib_os.c index 8f08616f..690bffe8 100644 --- a/src/lib_os.c +++ b/src/lib_os.c | |||
| @@ -17,16 +17,16 @@ | |||
| 17 | #include "lauxlib.h" | 17 | #include "lauxlib.h" |
| 18 | #include "lualib.h" | 18 | #include "lualib.h" |
| 19 | 19 | ||
| 20 | #ifdef LUA_USE_POSIX | 20 | #include "lj_obj.h" |
| 21 | #include "lj_err.h" | ||
| 22 | #include "lj_lib.h" | ||
| 23 | |||
| 24 | #if LJ_TARGET_POSIX | ||
| 21 | #include <unistd.h> | 25 | #include <unistd.h> |
| 22 | #else | 26 | #else |
| 23 | #include <stdio.h> | 27 | #include <stdio.h> |
| 24 | #endif | 28 | #endif |
| 25 | 29 | ||
| 26 | #include "lj_obj.h" | ||
| 27 | #include "lj_err.h" | ||
| 28 | #include "lj_lib.h" | ||
| 29 | |||
| 30 | /* ------------------------------------------------------------------------ */ | 30 | /* ------------------------------------------------------------------------ */ |
| 31 | 31 | ||
| 32 | #define LJLIB_MODULE_os | 32 | #define LJLIB_MODULE_os |
| @@ -66,7 +66,7 @@ LJLIB_CF(os_rename) | |||
| 66 | 66 | ||
| 67 | LJLIB_CF(os_tmpname) | 67 | LJLIB_CF(os_tmpname) |
| 68 | { | 68 | { |
| 69 | #ifdef LUA_USE_POSIX | 69 | #if LJ_TARGET_POSIX |
| 70 | char buf[15+1]; | 70 | char buf[15+1]; |
| 71 | int fp; | 71 | int fp; |
| 72 | strcpy(buf, "/tmp/lua_XXXXXX"); | 72 | strcpy(buf, "/tmp/lua_XXXXXX"); |
diff --git a/src/lib_package.c b/src/lib_package.c index 5678ca4a..1757a944 100644 --- a/src/lib_package.c +++ b/src/lib_package.c | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | #define PACKAGE_LIB_FAIL "open" | 27 | #define PACKAGE_LIB_FAIL "open" |
| 28 | #define setprogdir(L) ((void)0) | 28 | #define setprogdir(L) ((void)0) |
| 29 | 29 | ||
| 30 | #if defined(LUA_DL_DLOPEN) | 30 | #if LJ_TARGET_DLOPEN |
| 31 | 31 | ||
| 32 | #include <dlfcn.h> | 32 | #include <dlfcn.h> |
| 33 | 33 | ||
| @@ -50,7 +50,7 @@ static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) | |||
| 50 | return f; | 50 | return f; |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | #elif defined(LUA_DL_DLL) | 53 | #elif LJ_TARGET_WINDOWS |
| 54 | 54 | ||
| 55 | #define WIN32_LEAN_AND_MEAN | 55 | #define WIN32_LEAN_AND_MEAN |
| 56 | #include <windows.h> | 56 | #include <windows.h> |
| @@ -107,7 +107,7 @@ static lua_CFunction ll_sym(lua_State *L, void *lib, const char *sym) | |||
| 107 | #undef PACKAGE_LIB_FAIL | 107 | #undef PACKAGE_LIB_FAIL |
| 108 | #define PACKAGE_LIB_FAIL "absent" | 108 | #define PACKAGE_LIB_FAIL "absent" |
| 109 | 109 | ||
| 110 | #define DLMSG "dynamic libraries not enabled; check your Lua installation" | 110 | #define DLMSG "dynamic libraries not enabled; no support for target OS" |
| 111 | 111 | ||
| 112 | static void ll_unloadlib(void *lib) | 112 | static void ll_unloadlib(void *lib) |
| 113 | { | 113 | { |
diff --git a/src/lj_alloc.c b/src/lj_alloc.c index 2c686597..2f3fb473 100644 --- a/src/lj_alloc.c +++ b/src/lj_alloc.c | |||
| @@ -72,7 +72,7 @@ | |||
| 72 | 72 | ||
| 73 | #define IS_DIRECT_BIT (SIZE_T_ONE) | 73 | #define IS_DIRECT_BIT (SIZE_T_ONE) |
| 74 | 74 | ||
| 75 | #ifdef LUA_USE_WIN | 75 | #if LJ_TARGET_WINDOWS |
| 76 | 76 | ||
| 77 | #define WIN32_LEAN_AND_MEAN | 77 | #define WIN32_LEAN_AND_MEAN |
| 78 | #include <windows.h> | 78 | #include <windows.h> |
| @@ -166,13 +166,12 @@ static LJ_AINLINE int CALL_MUNMAP(void *ptr, size_t size) | |||
| 166 | #if LJ_64 | 166 | #if LJ_64 |
| 167 | /* 64 bit mode needs special support for allocating memory in the lower 2GB. */ | 167 | /* 64 bit mode needs special support for allocating memory in the lower 2GB. */ |
| 168 | 168 | ||
| 169 | #if defined(__linux__) | 169 | #if LJ_TARGET_LINUX |
| 170 | 170 | ||
| 171 | /* Actually this only gives us max. 1GB in current Linux kernels. */ | 171 | /* Actually this only gives us max. 1GB in current Linux kernels. */ |
| 172 | #define CALL_MMAP(s) mmap(NULL, (s), MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0) | 172 | #define CALL_MMAP(s) mmap(NULL, (s), MMAP_PROT, MAP_32BIT|MMAP_FLAGS, -1, 0) |
| 173 | 173 | ||
| 174 | #elif (defined(__MACH__) && defined(__APPLE__)) || \ | 174 | #elif LJ_TARGET_OSX || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) |
| 175 | defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | ||
| 176 | 175 | ||
| 177 | /* OSX and FreeBSD mmap() use a naive first-fit linear search. | 176 | /* OSX and FreeBSD mmap() use a naive first-fit linear search. |
| 178 | ** That's perfect for us. Except that -pagezero_size must be set for OSX, | 177 | ** That's perfect for us. Except that -pagezero_size must be set for OSX, |
| @@ -233,7 +232,7 @@ static LJ_AINLINE void *CALL_MMAP(size_t size) | |||
| 233 | #define DIRECT_MMAP(s) CALL_MMAP(s) | 232 | #define DIRECT_MMAP(s) CALL_MMAP(s) |
| 234 | #define CALL_MUNMAP(a, s) munmap((a), (s)) | 233 | #define CALL_MUNMAP(a, s) munmap((a), (s)) |
| 235 | 234 | ||
| 236 | #ifdef __linux__ | 235 | #if LJ_TARGET_LINUX |
| 237 | /* Need to define _GNU_SOURCE to get the mremap prototype. */ | 236 | /* Need to define _GNU_SOURCE to get the mremap prototype. */ |
| 238 | #define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) | 237 | #define CALL_MREMAP(addr, osz, nsz, mv) mremap((addr), (osz), (nsz), (mv)) |
| 239 | #define CALL_MREMAP_NOMOVE 0 | 238 | #define CALL_MREMAP_NOMOVE 0 |
| @@ -420,7 +419,7 @@ typedef struct malloc_state *mstate; | |||
| 420 | (((S) + (DEFAULT_GRANULARITY - SIZE_T_ONE))\ | 419 | (((S) + (DEFAULT_GRANULARITY - SIZE_T_ONE))\ |
| 421 | & ~(DEFAULT_GRANULARITY - SIZE_T_ONE)) | 420 | & ~(DEFAULT_GRANULARITY - SIZE_T_ONE)) |
| 422 | 421 | ||
| 423 | #ifdef LUA_USE_WIN | 422 | #if LJ_TARGET_WINDOWS |
| 424 | #define mmap_align(S) granularity_align(S) | 423 | #define mmap_align(S) granularity_align(S) |
| 425 | #else | 424 | #else |
| 426 | #define mmap_align(S) page_align(S) | 425 | #define mmap_align(S) page_align(S) |
diff --git a/src/lj_arch.h b/src/lj_arch.h index 7f1fe93c..f9cb12e7 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h | |||
| @@ -8,7 +8,6 @@ | |||
| 8 | 8 | ||
| 9 | #include "lua.h" | 9 | #include "lua.h" |
| 10 | 10 | ||
| 11 | |||
| 12 | /* Target endianess. */ | 11 | /* Target endianess. */ |
| 13 | #define LUAJIT_LE 0 | 12 | #define LUAJIT_LE 0 |
| 14 | #define LUAJIT_BE 1 | 13 | #define LUAJIT_BE 1 |
| @@ -23,6 +22,13 @@ | |||
| 23 | #define LUAJIT_ARCH_PPCSPE 4 | 22 | #define LUAJIT_ARCH_PPCSPE 4 |
| 24 | #define LUAJIT_ARCH_ppcspe 4 | 23 | #define LUAJIT_ARCH_ppcspe 4 |
| 25 | 24 | ||
| 25 | /* Target OS. */ | ||
| 26 | #define LUAJIT_OS_OTHER 0 | ||
| 27 | #define LUAJIT_OS_WINDOWS 1 | ||
| 28 | #define LUAJIT_OS_LINUX 2 | ||
| 29 | #define LUAJIT_OS_OSX 3 | ||
| 30 | #define LUAJIT_OS_BSD 4 | ||
| 31 | #define LUAJIT_OS_POSIX 5 | ||
| 26 | 32 | ||
| 27 | /* Select native target if no target defined. */ | 33 | /* Select native target if no target defined. */ |
| 28 | #ifndef LUAJIT_TARGET | 34 | #ifndef LUAJIT_TARGET |
| @@ -43,15 +49,58 @@ | |||
| 43 | 49 | ||
| 44 | #endif | 50 | #endif |
| 45 | 51 | ||
| 46 | /* Set target properties. */ | 52 | /* Select native OS if no target OS defined. */ |
| 53 | #ifndef LUAJIT_OS | ||
| 54 | |||
| 55 | #if defined(_WIN32) | ||
| 56 | #define LUAJIT_OS LUAJIT_OS_WINDOWS | ||
| 57 | #elif defined(__linux__) | ||
| 58 | #define LUAJIT_OS LUAJIT_OS_LINUX | ||
| 59 | #elif defined(__MACH__) && defined(__APPLE__) | ||
| 60 | #define LUAJIT_OS LUAJIT_OS_OSX | ||
| 61 | #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ | ||
| 62 | defined(__NetBSD__) || defined(__OpenBSD__) | ||
| 63 | #define LUAJIT_OS LUAJIT_OS_BSD | ||
| 64 | #elif defined(__solaris__) || defined(__CYGWIN__) | ||
| 65 | #define LUAJIT_OS LUAJIT_OS_POSIX | ||
| 66 | #else | ||
| 67 | #define LUAJIT_OS LUAJIT_OS_OTHER | ||
| 68 | #endif | ||
| 69 | |||
| 70 | #endif | ||
| 71 | |||
| 72 | /* Set target OS properties. */ | ||
| 73 | #if LUAJIT_OS == LUAJIT_OS_WINDOWS | ||
| 74 | #define LJ_OS_NAME "Windows" | ||
| 75 | #elif LUAJIT_OS == LUAJIT_OS_LINUX | ||
| 76 | #define LJ_OS_NAME "Linux" | ||
| 77 | #elif LUAJIT_OS == LUAJIT_OS_OSX | ||
| 78 | #define LJ_OS_NAME "OSX" | ||
| 79 | #elif LUAJIT_OS == LUAJIT_OS_BSD | ||
| 80 | #define LJ_OS_NAME "BSD" | ||
| 81 | #elif LUAJIT_OS == LUAJIT_OS_POSIX | ||
| 82 | #define LJ_OS_NAME "Posix" | ||
| 83 | #else | ||
| 84 | #define LJ_OS_NAME "Other" | ||
| 85 | #endif | ||
| 86 | |||
| 87 | #define LJ_TARGET_WINDOWS (LUAJIT_OS == LUAJIT_OS_WINDOWS) | ||
| 88 | #define LJ_TARGET_LINUX (LUAJIT_OS == LUAJIT_OS_LINUX) | ||
| 89 | #define LJ_TARGET_OSX (LUAJIT_OS == LUAJIT_OS_OSX) | ||
| 90 | #define LJ_TARGET_POSIX (LUAJIT_OS > LUAJIT_OS_WINDOWS) | ||
| 91 | #define LJ_TARGET_DLOPEN LJ_TARGET_POSIX | ||
| 92 | |||
| 93 | /* Set target architecture properties. */ | ||
| 47 | #if LUAJIT_TARGET == LUAJIT_ARCH_X86 | 94 | #if LUAJIT_TARGET == LUAJIT_ARCH_X86 |
| 48 | 95 | ||
| 49 | #define LJ_ARCH_NAME "x86" | 96 | #define LJ_ARCH_NAME "x86" |
| 50 | #define LJ_ARCH_BITS 32 | 97 | #define LJ_ARCH_BITS 32 |
| 51 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 98 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
| 99 | #define LJ_ARCH_BITENDIAN LUAJIT_LE | ||
| 100 | #define LJ_ARCH_HASFPU 1 | ||
| 101 | #define LJ_ABI_WIN LJ_TARGET_WINDOWS | ||
| 52 | #define LJ_TARGET_X86 1 | 102 | #define LJ_TARGET_X86 1 |
| 53 | #define LJ_TARGET_X86ORX64 1 | 103 | #define LJ_TARGET_X86ORX64 1 |
| 54 | #define LJ_PAGESIZE 4096 | ||
| 55 | #define LJ_TARGET_EHRETREG 0 | 104 | #define LJ_TARGET_EHRETREG 0 |
| 56 | #define LJ_TARGET_MASKSHIFT 1 | 105 | #define LJ_TARGET_MASKSHIFT 1 |
| 57 | #define LJ_TARGET_MASKROT 1 | 106 | #define LJ_TARGET_MASKROT 1 |
| @@ -61,9 +110,11 @@ | |||
| 61 | #define LJ_ARCH_NAME "x64" | 110 | #define LJ_ARCH_NAME "x64" |
| 62 | #define LJ_ARCH_BITS 64 | 111 | #define LJ_ARCH_BITS 64 |
| 63 | #define LJ_ARCH_ENDIAN LUAJIT_LE | 112 | #define LJ_ARCH_ENDIAN LUAJIT_LE |
| 113 | #define LJ_ARCH_BITENDIAN LUAJIT_LE | ||
| 114 | #define LJ_ARCH_HASFPU 1 | ||
| 115 | #define LJ_ABI_WIN LJ_TARGET_WINDOWS | ||
| 64 | #define LJ_TARGET_X64 1 | 116 | #define LJ_TARGET_X64 1 |
| 65 | #define LJ_TARGET_X86ORX64 1 | 117 | #define LJ_TARGET_X86ORX64 1 |
| 66 | #define LJ_PAGESIZE 4096 | ||
| 67 | #define LJ_TARGET_EHRETREG 0 | 118 | #define LJ_TARGET_EHRETREG 0 |
| 68 | #define LJ_TARGET_MASKSHIFT 1 | 119 | #define LJ_TARGET_MASKSHIFT 1 |
| 69 | #define LJ_TARGET_MASKROT 1 | 120 | #define LJ_TARGET_MASKROT 1 |
| @@ -77,9 +128,12 @@ | |||
| 77 | #define LJ_ARCH_NAME "ppcspe" | 128 | #define LJ_ARCH_NAME "ppcspe" |
| 78 | #define LJ_ARCH_BITS 32 | 129 | #define LJ_ARCH_BITS 32 |
| 79 | #define LJ_ARCH_ENDIAN LUAJIT_BE | 130 | #define LJ_ARCH_ENDIAN LUAJIT_BE |
| 131 | #define LJ_ARCH_BITENDIAN LUAJIT_BE | ||
| 132 | #define LJ_ARCH_HASFPU 1 | ||
| 133 | #define LJ_ABI_SOFTFP 1 | ||
| 134 | #define LJ_ABI_EABI 1 | ||
| 80 | #define LJ_TARGET_PPC 1 | 135 | #define LJ_TARGET_PPC 1 |
| 81 | #define LJ_TARGET_PPCSPE 1 | 136 | #define LJ_TARGET_PPCSPE 1 |
| 82 | #define LJ_PAGESIZE 4096 | ||
| 83 | #define LJ_TARGET_EHRETREG 3 | 137 | #define LJ_TARGET_EHRETREG 3 |
| 84 | #define LJ_TARGET_MASKSHIFT 0 | 138 | #define LJ_TARGET_MASKSHIFT 0 |
| 85 | #define LJ_TARGET_MASKROT 1 | 139 | #define LJ_TARGET_MASKROT 1 |
| @@ -89,6 +143,10 @@ | |||
| 89 | #error "No target architecture defined" | 143 | #error "No target architecture defined" |
| 90 | #endif | 144 | #endif |
| 91 | 145 | ||
| 146 | #ifndef LJ_PAGESIZE | ||
| 147 | #define LJ_PAGESIZE 4096 | ||
| 148 | #endif | ||
| 149 | |||
| 92 | /* Check for minimum required compiler versions. */ | 150 | /* Check for minimum required compiler versions. */ |
| 93 | #if defined(__GNUC__) | 151 | #if defined(__GNUC__) |
| 94 | #if LJ_TARGET_X64 | 152 | #if LJ_TARGET_X64 |
diff --git a/src/lj_asm.c b/src/lj_asm.c index 322799e6..80dda36a 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
| @@ -1345,7 +1345,7 @@ static void asm_gencall(ASMState *as, const CCallInfo *ci, IRRef *args) | |||
| 1345 | for (n = 0; n < nargs; n++) { /* Setup args. */ | 1345 | for (n = 0; n < nargs; n++) { /* Setup args. */ |
| 1346 | IRIns *ir = IR(args[n]); | 1346 | IRIns *ir = IR(args[n]); |
| 1347 | Reg r; | 1347 | Reg r; |
| 1348 | #if LJ_64 && defined(_WIN64) | 1348 | #if LJ_64 && LJ_ABI_WIN |
| 1349 | /* Windows/x64 argument registers are strictly positional. */ | 1349 | /* Windows/x64 argument registers are strictly positional. */ |
| 1350 | r = irt_isnum(ir->t) ? (fpr <= REGARG_LASTFPR ? fpr : 0) : (gprs & 31); | 1350 | r = irt_isnum(ir->t) ? (fpr <= REGARG_LASTFPR ? fpr : 0) : (gprs & 31); |
| 1351 | fpr++; gprs >>= 5; | 1351 | fpr++; gprs >>= 5; |
| @@ -3518,11 +3518,7 @@ static void asm_setup_regsp(ASMState *as, GCtrace *T) | |||
| 3518 | const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; | 3518 | const CCallInfo *ci = &lj_ir_callinfo[ir->op2]; |
| 3519 | #if LJ_64 | 3519 | #if LJ_64 |
| 3520 | /* NYI: add stack slots for x64 calls with many args. */ | 3520 | /* NYI: add stack slots for x64 calls with many args. */ |
| 3521 | #ifdef _WIN64 | 3521 | lua_assert(CCI_NARGS(ci) <= (LJ_ABI_WIN ? 4 : 6)); |
| 3522 | lua_assert(CCI_NARGS(ci) <= 4); | ||
| 3523 | #else | ||
| 3524 | lua_assert(CCI_NARGS(ci) <= 6); /* Safe lower bound. */ | ||
| 3525 | #endif | ||
| 3526 | ir->prev = REGSP_HINT(irt_isnum(ir->t) ? RID_FPRET : RID_RET); | 3522 | ir->prev = REGSP_HINT(irt_isnum(ir->t) ? RID_FPRET : RID_RET); |
| 3527 | #else | 3523 | #else |
| 3528 | /* NYI: not fastcall-aware, but doesn't matter (yet). */ | 3524 | /* NYI: not fastcall-aware, but doesn't matter (yet). */ |
diff --git a/src/lj_err.c b/src/lj_err.c index 5a6aac83..8a80c9c8 100644 --- a/src/lj_err.c +++ b/src/lj_err.c | |||
| @@ -63,15 +63,11 @@ | |||
| 63 | ** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13. | 63 | ** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13. |
| 64 | */ | 64 | */ |
| 65 | 65 | ||
| 66 | #if defined(__GNUC__) | 66 | #if defined(__GNUC__) && (LJ_TARGET_X64 || defined(LUAJIT_UNWIND_EXTERNAL)) |
| 67 | #if LJ_TARGET_X64 || defined(LUAJIT_UNWIND_EXTERNAL) | ||
| 68 | #define LJ_UNWIND_EXT 1 | 67 | #define LJ_UNWIND_EXT 1 |
| 69 | #endif | 68 | #elif LJ_TARGET_X64 && LJ_TARGET_WINDOWS |
| 70 | #elif defined(LUA_USE_WIN) | ||
| 71 | #if LJ_TARGET_X64 | ||
| 72 | #define LJ_UNWIND_EXT 1 | 69 | #define LJ_UNWIND_EXT 1 |
| 73 | #endif | 70 | #endif |
| 74 | #endif | ||
| 75 | 71 | ||
| 76 | /* -- Error messages ------------------------------------------------------ */ | 72 | /* -- Error messages ------------------------------------------------------ */ |
| 77 | 73 | ||
| @@ -604,7 +600,7 @@ static void err_raise_ext(int errcode) | |||
| 604 | } | 600 | } |
| 605 | #endif | 601 | #endif |
| 606 | 602 | ||
| 607 | #elif defined(_WIN64) | 603 | #elif LJ_TARGET_X64 && LJ_TARGET_WINDOWS |
| 608 | 604 | ||
| 609 | /* | 605 | /* |
| 610 | ** Someone in Redmond owes me several days of my life. A lot of this is | 606 | ** Someone in Redmond owes me several days of my life. A lot of this is |
diff --git a/src/lj_errmsg.h b/src/lj_errmsg.h index 4891b74e..4fe8e1b1 100644 --- a/src/lj_errmsg.h +++ b/src/lj_errmsg.h | |||
| @@ -57,7 +57,7 @@ ERRDEF(NOENV, "no calling environment") | |||
| 57 | ERRDEF(CYIELD, "attempt to yield across C-call boundary") | 57 | ERRDEF(CYIELD, "attempt to yield across C-call boundary") |
| 58 | ERRDEF(BADLU, "bad light userdata pointer") | 58 | ERRDEF(BADLU, "bad light userdata pointer") |
| 59 | ERRDEF(NOGCMM, "bad action while in __gc metamethod") | 59 | ERRDEF(NOGCMM, "bad action while in __gc metamethod") |
| 60 | #ifdef LUA_USE_WIN | 60 | #if LJ_TARGET_WINDOWS |
| 61 | ERRDEF(BADFPU, "bad FPU precision (use D3DCREATE_FPU_PRESERVE with DirectX)") | 61 | ERRDEF(BADFPU, "bad FPU precision (use D3DCREATE_FPU_PRESERVE with DirectX)") |
| 62 | #endif | 62 | #endif |
| 63 | 63 | ||
diff --git a/src/lj_frame.h b/src/lj_frame.h index c4931072..143a6812 100644 --- a/src/lj_frame.h +++ b/src/lj_frame.h | |||
| @@ -69,7 +69,7 @@ enum { | |||
| 69 | #define CFRAME_SIZE_JIT CFRAME_SIZE | 69 | #define CFRAME_SIZE_JIT CFRAME_SIZE |
| 70 | #define CFRAME_SHIFT_MULTRES 0 | 70 | #define CFRAME_SHIFT_MULTRES 0 |
| 71 | #elif LJ_TARGET_X64 | 71 | #elif LJ_TARGET_X64 |
| 72 | #if _WIN64 | 72 | #if LJ_ABI_WIN |
| 73 | #define CFRAME_OFS_PREV (13*8) | 73 | #define CFRAME_OFS_PREV (13*8) |
| 74 | #define CFRAME_OFS_PC (25*4) | 74 | #define CFRAME_OFS_PC (25*4) |
| 75 | #define CFRAME_OFS_L (24*4) | 75 | #define CFRAME_OFS_L (24*4) |
diff --git a/src/lj_gdbjit.c b/src/lj_gdbjit.c index 30aab774..d106bb5d 100644 --- a/src/lj_gdbjit.c +++ b/src/lj_gdbjit.c | |||
| @@ -335,7 +335,7 @@ static const ELFheader elfhdr_template = { | |||
| 335 | .eclass = LJ_64 ? 2 : 1, | 335 | .eclass = LJ_64 ? 2 : 1, |
| 336 | .eendian = LJ_ENDIAN_SELECT(1, 2), | 336 | .eendian = LJ_ENDIAN_SELECT(1, 2), |
| 337 | .eversion = 1, | 337 | .eversion = 1, |
| 338 | #if defined(__linux__) | 338 | #if LJ_TARGET_LINUX |
| 339 | .eosabi = 0, /* Nope, it's not 3. */ | 339 | .eosabi = 0, /* Nope, it's not 3. */ |
| 340 | #elif defined(__FreeBSD__) | 340 | #elif defined(__FreeBSD__) |
| 341 | .eosabi = 9, | 341 | .eosabi = 9, |
diff --git a/src/lj_jit.h b/src/lj_jit.h index 77377931..d309f828 100644 --- a/src/lj_jit.h +++ b/src/lj_jit.h | |||
| @@ -55,7 +55,7 @@ | |||
| 55 | (JIT_F_OPT_2|JIT_F_OPT_FWD|JIT_F_OPT_DSE|JIT_F_OPT_ABC|JIT_F_OPT_FUSE) | 55 | (JIT_F_OPT_2|JIT_F_OPT_FWD|JIT_F_OPT_DSE|JIT_F_OPT_ABC|JIT_F_OPT_FUSE) |
| 56 | #define JIT_F_OPT_DEFAULT JIT_F_OPT_3 | 56 | #define JIT_F_OPT_DEFAULT JIT_F_OPT_3 |
| 57 | 57 | ||
| 58 | #if defined(LUA_USE_WIN) || LJ_64 | 58 | #if LJ_TARGET_WINDOWS || LJ_64 |
| 59 | /* See: http://blogs.msdn.com/oldnewthing/archive/2003/10/08/55239.aspx */ | 59 | /* See: http://blogs.msdn.com/oldnewthing/archive/2003/10/08/55239.aspx */ |
| 60 | #define JIT_P_sizemcode_DEFAULT 64 | 60 | #define JIT_P_sizemcode_DEFAULT 64 |
| 61 | #else | 61 | #else |
diff --git a/src/lj_lib.h b/src/lj_lib.h index 814c9739..6782e725 100644 --- a/src/lj_lib.h +++ b/src/lj_lib.h | |||
| @@ -49,7 +49,7 @@ LJ_FUNC int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst); | |||
| 49 | #define lj_lib_upvalue(L, n) \ | 49 | #define lj_lib_upvalue(L, n) \ |
| 50 | (&gcref((L->base-1)->fr.func)->fn.c.upvalue[(n)-1]) | 50 | (&gcref((L->base-1)->fr.func)->fn.c.upvalue[(n)-1]) |
| 51 | 51 | ||
| 52 | #ifdef LUA_USE_WIN | 52 | #if LJ_TARGET_WINDOWS |
| 53 | #define lj_lib_checkfpu(L) \ | 53 | #define lj_lib_checkfpu(L) \ |
| 54 | do { setnumV(L->top++, (lua_Number)1437217655); \ | 54 | do { setnumV(L->top++, (lua_Number)1437217655); \ |
| 55 | if (lua_tointeger(L, -1) != 1437217655) lj_err_caller(L, LJ_ERR_BADFPU); \ | 55 | if (lua_tointeger(L, -1) != 1437217655) lj_err_caller(L, LJ_ERR_BADFPU); \ |
diff --git a/src/lj_mcode.c b/src/lj_mcode.c index 9b1cae00..72002175 100644 --- a/src/lj_mcode.c +++ b/src/lj_mcode.c | |||
| @@ -19,7 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | /* -- OS-specific functions ----------------------------------------------- */ | 20 | /* -- OS-specific functions ----------------------------------------------- */ |
| 21 | 21 | ||
| 22 | #if defined(LUA_USE_WIN) | 22 | #if LJ_TARGET_WINDOWS |
| 23 | 23 | ||
| 24 | #define WIN32_LEAN_AND_MEAN | 24 | #define WIN32_LEAN_AND_MEAN |
| 25 | #include <windows.h> | 25 | #include <windows.h> |
| @@ -49,7 +49,7 @@ static void mcode_setprot(void *p, size_t sz, DWORD prot) | |||
| 49 | VirtualProtect(p, sz, prot, &oprot); | 49 | VirtualProtect(p, sz, prot, &oprot); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | #elif defined(LUA_USE_POSIX) | 52 | #elif LJ_TARGET_POSIX |
| 53 | 53 | ||
| 54 | #include <sys/mman.h> | 54 | #include <sys/mman.h> |
| 55 | 55 | ||
| @@ -82,7 +82,7 @@ static void mcode_setprot(void *p, size_t sz, int prot) | |||
| 82 | 82 | ||
| 83 | #elif LJ_64 | 83 | #elif LJ_64 |
| 84 | 84 | ||
| 85 | #error "Missing OS support for allocating executable memory" | 85 | #error "Missing OS support for explicit placement of executable memory" |
| 86 | 86 | ||
| 87 | #else | 87 | #else |
| 88 | 88 | ||
diff --git a/src/lj_obj.h b/src/lj_obj.h index 4baa62d8..c7b653f3 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h | |||
| @@ -719,7 +719,7 @@ static LJ_AINLINE int32_t lj_num2bit(lua_Number n) | |||
| 719 | return (int32_t)o.u32.lo; | 719 | return (int32_t)o.u32.lo; |
| 720 | } | 720 | } |
| 721 | 721 | ||
| 722 | #if (defined(__i386__) || defined(_M_IX86)) && !defined(__SSE2__) | 722 | #if LJ_TARGET_X86 && !defined(__SSE2__) |
| 723 | #define lj_num2int(n) lj_num2bit((n)) | 723 | #define lj_num2int(n) lj_num2bit((n)) |
| 724 | #else | 724 | #else |
| 725 | #define lj_num2int(n) ((int32_t)(n)) | 725 | #define lj_num2int(n) ((int32_t)(n)) |
diff --git a/src/lj_target_x86.h b/src/lj_target_x86.h index ad4e3d1a..03c52770 100644 --- a/src/lj_target_x86.h +++ b/src/lj_target_x86.h | |||
| @@ -40,7 +40,7 @@ enum { | |||
| 40 | 40 | ||
| 41 | /* These definitions must match with the *.dasc file(s): */ | 41 | /* These definitions must match with the *.dasc file(s): */ |
| 42 | RID_BASE = RID_EDX, /* Interpreter BASE. */ | 42 | RID_BASE = RID_EDX, /* Interpreter BASE. */ |
| 43 | #if LJ_64 && !defined(_WIN64) | 43 | #if LJ_64 && !LJ_ABI_WIN |
| 44 | RID_PC = RID_EBX, /* Interpreter PC. */ | 44 | RID_PC = RID_EBX, /* Interpreter PC. */ |
| 45 | RID_DISPATCH = RID_R14D, /* Interpreter DISPATCH table. */ | 45 | RID_DISPATCH = RID_R14D, /* Interpreter DISPATCH table. */ |
| 46 | #else | 46 | #else |
| @@ -74,7 +74,7 @@ enum { | |||
| 74 | /* ABI-specific register sets. */ | 74 | /* ABI-specific register sets. */ |
| 75 | #define RSET_ACD (RID2RSET(RID_EAX)|RID2RSET(RID_ECX)|RID2RSET(RID_EDX)) | 75 | #define RSET_ACD (RID2RSET(RID_EAX)|RID2RSET(RID_ECX)|RID2RSET(RID_EDX)) |
| 76 | #if LJ_64 | 76 | #if LJ_64 |
| 77 | #ifdef _WIN64 | 77 | #if LJ_ABI_WIN |
| 78 | /* Windows x64 ABI. */ | 78 | /* Windows x64 ABI. */ |
| 79 | #define RSET_SCRATCH \ | 79 | #define RSET_SCRATCH \ |
| 80 | (RSET_ACD|RSET_RANGE(RID_R8D, RID_R11D+1)|RSET_RANGE(RID_XMM0, RID_XMM5+1)) | 80 | (RSET_ACD|RSET_RANGE(RID_R8D, RID_R11D+1)|RSET_RANGE(RID_XMM0, RID_XMM5+1)) |
| @@ -117,7 +117,7 @@ enum { | |||
| 117 | ** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots. | 117 | ** SPS_FIRST: First spill slot for general use. Reserve min. two 32 bit slots. |
| 118 | */ | 118 | */ |
| 119 | #if LJ_64 | 119 | #if LJ_64 |
| 120 | #ifdef _WIN64 | 120 | #if LJ_ABI_WIN |
| 121 | #define SPS_FIXED (4*2) | 121 | #define SPS_FIXED (4*2) |
| 122 | #define SPS_FIRST (4*2) /* Don't use callee register save area. */ | 122 | #define SPS_FIRST (4*2) /* Don't use callee register save area. */ |
| 123 | #else | 123 | #else |
diff --git a/src/luaconf.h b/src/luaconf.h index 4506b5fb..7278b3ef 100644 --- a/src/luaconf.h +++ b/src/luaconf.h | |||
| @@ -9,19 +9,8 @@ | |||
| 9 | #include <limits.h> | 9 | #include <limits.h> |
| 10 | #include <stddef.h> | 10 | #include <stddef.h> |
| 11 | 11 | ||
| 12 | /* Try to determine supported features for a couple of standard platforms. */ | ||
| 13 | #if defined(_WIN32) | ||
| 14 | #define LUA_USE_WIN | ||
| 15 | #define LUA_DL_DLL | ||
| 16 | #elif defined(__linux__) || defined(__solaris__) || defined(__CYGWIN__) || \ | ||
| 17 | defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ | ||
| 18 | defined(__FreeBSD_kernel__) || (defined(__MACH__) && defined(__APPLE__)) | ||
| 19 | #define LUA_USE_POSIX | ||
| 20 | #define LUA_DL_DLOPEN | ||
| 21 | #endif | ||
| 22 | |||
| 23 | /* Default path for loading Lua and C modules with require(). */ | 12 | /* Default path for loading Lua and C modules with require(). */ |
| 24 | #ifdef LUA_USE_WIN | 13 | #if defined(_WIN32) |
| 25 | /* | 14 | /* |
| 26 | ** In Windows, any exclamation mark ('!') in the path is replaced by the | 15 | ** In Windows, any exclamation mark ('!') in the path is replaced by the |
| 27 | ** path of the directory of the executable file of the current process. | 16 | ** path of the directory of the executable file of the current process. |
| @@ -58,7 +47,7 @@ | |||
| 58 | #define LUA_INIT "LUA_INIT" | 47 | #define LUA_INIT "LUA_INIT" |
| 59 | 48 | ||
| 60 | /* Special file system characters. */ | 49 | /* Special file system characters. */ |
| 61 | #ifdef LUA_USE_WIN | 50 | #if defined(_WIN32) |
| 62 | #define LUA_DIRSEP "\\" | 51 | #define LUA_DIRSEP "\\" |
| 63 | #else | 52 | #else |
| 64 | #define LUA_DIRSEP "/" | 53 | #define LUA_DIRSEP "/" |
diff --git a/src/luajit.c b/src/luajit.c index e8024479..2e85f01d 100644 --- a/src/luajit.c +++ b/src/luajit.c | |||
| @@ -18,10 +18,12 @@ | |||
| 18 | #include "lualib.h" | 18 | #include "lualib.h" |
| 19 | #include "luajit.h" | 19 | #include "luajit.h" |
| 20 | 20 | ||
| 21 | #if defined(LUA_USE_POSIX) | 21 | #include "lj_arch.h" |
| 22 | |||
| 23 | #if LJ_TARGET_POSIX | ||
| 22 | #include <unistd.h> | 24 | #include <unistd.h> |
| 23 | #define lua_stdin_is_tty() isatty(0) | 25 | #define lua_stdin_is_tty() isatty(0) |
| 24 | #elif defined(LUA_USE_WIN) | 26 | #elif LJ_TARGET_WINDOWS |
| 25 | #include <io.h> | 27 | #include <io.h> |
| 26 | #ifdef __BORLANDC__ | 28 | #ifdef __BORLANDC__ |
| 27 | #define lua_stdin_is_tty() isatty(_fileno(stdin)) | 29 | #define lua_stdin_is_tty() isatty(_fileno(stdin)) |
