This commit is contained in:
Miku AuahDark
2021-12-31 01:56:38 +08:00
parent 8ad534d227
commit 7ec4135598
12 changed files with 83 additions and 8 deletions
@@ -60,6 +60,11 @@ local function savefile(name, mode)
return check(io.open(name, mode)) return check(io.open(name, mode))
end end
local function set_stdout_binary(ffi)
ffi.cdef[[int _setmode(int fd, int mode);]]
ffi.C._setmode(1, 0x8000)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
local map_type = { local map_type = {
@@ -125,6 +130,11 @@ local function bcsave_tail(fp, output, s)
end end
local function bcsave_raw(output, s) local function bcsave_raw(output, s)
if output == "-" and jit.os == "Windows" then
local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write binary file to stdout")
set_stdout_binary(ffi)
end
local fp = savefile(output, "wb") local fp = savefile(output, "wb")
bcsave_tail(fp, output, s) bcsave_tail(fp, output, s)
end end
@@ -568,6 +578,9 @@ end
local function bcsave_obj(ctx, output, s) local function bcsave_obj(ctx, output, s)
local ok, ffi = pcall(require, "ffi") local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write this file type") check(ok, "FFI library required to write this file type")
if output == "-" and jit.os == "Windows" then
set_stdout_binary(ffi)
end
if ctx.os == "windows" then if ctx.os == "windows" then
return bcsave_peobj(ctx, output, s, ffi) return bcsave_peobj(ctx, output, s, ffi)
elseif ctx.os == "osx" then elseif ctx.os == "osx" then
@@ -60,6 +60,11 @@ local function savefile(name, mode)
return check(io.open(name, mode)) return check(io.open(name, mode))
end end
local function set_stdout_binary(ffi)
ffi.cdef[[int _setmode(int fd, int mode);]]
ffi.C._setmode(1, 0x8000)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
local map_type = { local map_type = {
@@ -125,6 +130,11 @@ local function bcsave_tail(fp, output, s)
end end
local function bcsave_raw(output, s) local function bcsave_raw(output, s)
if output == "-" and jit.os == "Windows" then
local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write binary file to stdout")
set_stdout_binary(ffi)
end
local fp = savefile(output, "wb") local fp = savefile(output, "wb")
bcsave_tail(fp, output, s) bcsave_tail(fp, output, s)
end end
@@ -568,6 +578,9 @@ end
local function bcsave_obj(ctx, output, s) local function bcsave_obj(ctx, output, s)
local ok, ffi = pcall(require, "ffi") local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write this file type") check(ok, "FFI library required to write this file type")
if output == "-" and jit.os == "Windows" then
set_stdout_binary(ffi)
end
if ctx.os == "windows" then if ctx.os == "windows" then
return bcsave_peobj(ctx, output, s, ffi) return bcsave_peobj(ctx, output, s, ffi)
elseif ctx.os == "osx" then elseif ctx.os == "osx" then
@@ -60,6 +60,11 @@ local function savefile(name, mode)
return check(io.open(name, mode)) return check(io.open(name, mode))
end end
local function set_stdout_binary(ffi)
ffi.cdef[[int _setmode(int fd, int mode);]]
ffi.C._setmode(1, 0x8000)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
local map_type = { local map_type = {
@@ -125,6 +130,11 @@ local function bcsave_tail(fp, output, s)
end end
local function bcsave_raw(output, s) local function bcsave_raw(output, s)
if output == "-" and jit.os == "Windows" then
local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write binary file to stdout")
set_stdout_binary(ffi)
end
local fp = savefile(output, "wb") local fp = savefile(output, "wb")
bcsave_tail(fp, output, s) bcsave_tail(fp, output, s)
end end
@@ -568,6 +578,9 @@ end
local function bcsave_obj(ctx, output, s) local function bcsave_obj(ctx, output, s)
local ok, ffi = pcall(require, "ffi") local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write this file type") check(ok, "FFI library required to write this file type")
if output == "-" and jit.os == "Windows" then
set_stdout_binary(ffi)
end
if ctx.os == "windows" then if ctx.os == "windows" then
return bcsave_peobj(ctx, output, s, ffi) return bcsave_peobj(ctx, output, s, ffi)
elseif ctx.os == "osx" then elseif ctx.os == "osx" then
Binary file not shown.
@@ -60,6 +60,11 @@ local function savefile(name, mode)
return check(io.open(name, mode)) return check(io.open(name, mode))
end end
local function set_stdout_binary(ffi)
ffi.cdef[[int _setmode(int fd, int mode);]]
ffi.C._setmode(1, 0x8000)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
local map_type = { local map_type = {
@@ -125,6 +130,11 @@ local function bcsave_tail(fp, output, s)
end end
local function bcsave_raw(output, s) local function bcsave_raw(output, s)
if output == "-" and jit.os == "Windows" then
local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write binary file to stdout")
set_stdout_binary(ffi)
end
local fp = savefile(output, "wb") local fp = savefile(output, "wb")
bcsave_tail(fp, output, s) bcsave_tail(fp, output, s)
end end
@@ -568,6 +578,9 @@ end
local function bcsave_obj(ctx, output, s) local function bcsave_obj(ctx, output, s)
local ok, ffi = pcall(require, "ffi") local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write this file type") check(ok, "FFI library required to write this file type")
if output == "-" and jit.os == "Windows" then
set_stdout_binary(ffi)
end
if ctx.os == "windows" then if ctx.os == "windows" then
return bcsave_peobj(ctx, output, s, ffi) return bcsave_peobj(ctx, output, s, ffi)
elseif ctx.os == "osx" then elseif ctx.os == "osx" then
Binary file not shown.
@@ -1,10 +1,8 @@
rem Build instruction assume using WSL + Clang for Windows (with MSVC x86+x64 toolset for -m32 switch) rem Build instruction assume using WSL + Clang for Windows (with MSVC x86+x64 toolset for -m32 switch)
rem This assume NDK r19 or later. See https://github.com/LuaJIT/LuaJIT/issues/477 for more information. rem This assume NDK r19 or later. See https://github.com/LuaJIT/LuaJIT/issues/477 for more information.
rem Make sure LuaJIT and the prebuilt is already in your PATH environment variable. rem Make sure LuaJIT (yes, you need LuaJIT interpreter) and the NDK toolchain binaries is already in
rem As of commit 384d6d5 in LuaJIT v2.1 repository, lj_ircall.h.patch is no longer needed. rem your PATH environment variable. If you're confused which part of the NDK should be added your path:
rem If you're confused which one should be added your path:
rem <NDK_ROOT>\toolchains\llvm\prebuilt\windows-x86_64\bin rem <NDK_ROOT>\toolchains\llvm\prebuilt\windows-x86_64\bin
mkdir android\arm64-v8a mkdir android\arm64-v8a
+4 -2
View File
@@ -411,7 +411,8 @@ NDKCROSS=$NDKBIN/aarch64-linux-android-
NDKCC=$NDKBIN/aarch64-linux-android21-clang NDKCC=$NDKBIN/aarch64-linux-android21-clang
make CROSS=$NDKCROSS \ make CROSS=$NDKCROSS \
STATIC_CC=$NDKCC DYNAMIC_CC="$NDKCC -fPIC" \ STATIC_CC=$NDKCC DYNAMIC_CC="$NDKCC -fPIC" \
TARGET_LD=$NDKCC TARGET_LD=$NDKCC TARGET_AR=$NDKBIN/llvm-ar
TARGET_STRIP=$NDKBIN/llvm-strip
# Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.1+ (JB) # Android/ARM, armeabi-v7a (ARMv7 VFP), Android 4.1+ (JB)
NDKDIR=/opt/android/ndk NDKDIR=/opt/android/ndk
@@ -420,7 +421,8 @@ NDKCROSS=$NDKBIN/arm-linux-androideabi-
NDKCC=$NDKBIN/armv7a-linux-androideabi16-clang NDKCC=$NDKBIN/armv7a-linux-androideabi16-clang
make HOST_CC="gcc -m32" CROSS=$NDKCROSS \ make HOST_CC="gcc -m32" CROSS=$NDKCROSS \
STATIC_CC=$NDKCC DYNAMIC_CC="$NDKCC -fPIC" \ STATIC_CC=$NDKCC DYNAMIC_CC="$NDKCC -fPIC" \
TARGET_LD=$NDKCC TARGET_LD=$NDKCC TARGET_AR=$NDKBIN/llvm-ar
TARGET_STRIP=$NDKBIN/llvm-strip
</pre> </pre>
<p> <p>
You can cross-compile for <b id="ios">iOS 3.0+</b> (iPhone/iPad) using the <a href="https://developer.apple.com/ios/"><span class="ext">&raquo;</span>&nbsp;iOS SDK</a>: You can cross-compile for <b id="ios">iOS 3.0+</b> (iPhone/iPad) using the <a href="https://developer.apple.com/ios/"><span class="ext">&raquo;</span>&nbsp;iOS SDK</a>:
@@ -60,6 +60,11 @@ local function savefile(name, mode)
return check(io.open(name, mode)) return check(io.open(name, mode))
end end
local function set_stdout_binary(ffi)
ffi.cdef[[int _setmode(int fd, int mode);]]
ffi.C._setmode(1, 0x8000)
end
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
local map_type = { local map_type = {
@@ -125,6 +130,11 @@ local function bcsave_tail(fp, output, s)
end end
local function bcsave_raw(output, s) local function bcsave_raw(output, s)
if output == "-" and jit.os == "Windows" then
local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write binary file to stdout")
set_stdout_binary(ffi)
end
local fp = savefile(output, "wb") local fp = savefile(output, "wb")
bcsave_tail(fp, output, s) bcsave_tail(fp, output, s)
end end
@@ -568,6 +578,9 @@ end
local function bcsave_obj(ctx, output, s) local function bcsave_obj(ctx, output, s)
local ok, ffi = pcall(require, "ffi") local ok, ffi = pcall(require, "ffi")
check(ok, "FFI library required to write this file type") check(ok, "FFI library required to write this file type")
if output == "-" and jit.os == "Windows" then
set_stdout_binary(ffi)
end
if ctx.os == "windows" then if ctx.os == "windows" then
return bcsave_peobj(ctx, output, s, ffi) return bcsave_peobj(ctx, output, s, ffi)
elseif ctx.os == "osx" then elseif ctx.os == "osx" then
+12 -2
View File
@@ -1037,8 +1037,7 @@ LJFOLDF(simplify_numadd_xneg)
LJFOLD(SUB any KNUM) LJFOLD(SUB any KNUM)
LJFOLDF(simplify_numsub_k) LJFOLDF(simplify_numsub_k)
{ {
lua_Number n = knumright; if (ir_knum(fright)->u64 == 0) /* x - (+0) ==> x */
if (n == 0.0) /* x - (+-0) ==> x */
return LEFTFOLD; return LEFTFOLD;
return NEXTFOLD; return NEXTFOLD;
} }
@@ -2412,6 +2411,17 @@ LJFOLDF(xload_kptr)
LJFOLD(XLOAD any any) LJFOLD(XLOAD any any)
LJFOLDX(lj_opt_fwd_xload) LJFOLDX(lj_opt_fwd_xload)
/* -- Frame handling ------------------------------------------------------ */
/* Prevent CSE of a REF_BASE operand across IR_RETF. */
LJFOLD(SUB any BASE)
LJFOLD(SUB BASE any)
LJFOLD(EQ any BASE)
LJFOLDF(fold_base)
{
return lj_opt_cselim(J, J->chain[IR_RETF]);
}
/* -- Write barriers ------------------------------------------------------ */ /* -- Write barriers ------------------------------------------------------ */
/* Write barriers are amenable to CSE, but not across any incremental /* Write barriers are amenable to CSE, but not across any incremental