diff --git a/src/luajit-stamp/download-luajit.cmake b/src/luajit-stamp/download-luajit.cmake index 07cc157d7..613c882fc 100644 --- a/src/luajit-stamp/download-luajit.cmake +++ b/src/luajit-stamp/download-luajit.cmake @@ -22,16 +22,16 @@ function(check_file_hash has_hash hash_is_good) set("${has_hash}" TRUE PARENT_SCOPE) message(STATUS "verifying file... - file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz'") + file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz'") - file("SHA256" "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz" actual_value) + file("SHA256" "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz" actual_value) - if(NOT "${actual_value}" STREQUAL "4fefa19bc5600928fb13c928bf5325eaa1c78f2c1738a8ac9552154ef178bb9a") + if(NOT "${actual_value}" STREQUAL "3ec37f78ab3b1afd4c3af0fde743c332da3da32eadc8500489c1cc2e4f0ec7eb") set("${hash_is_good}" FALSE PARENT_SCOPE) message(STATUS "SHA256 hash of - /home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz + /home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz does not match expected value - expected: '4fefa19bc5600928fb13c928bf5325eaa1c78f2c1738a8ac9552154ef178bb9a' + expected: '3ec37f78ab3b1afd4c3af0fde743c332da3da32eadc8500489c1cc2e4f0ec7eb' actual: '${actual_value}'") else() set("${hash_is_good}" TRUE PARENT_SCOPE) @@ -71,40 +71,40 @@ function(sleep_before_download attempt) execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep "${sleep_seconds}") endfunction() -if("/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz" STREQUAL "") +if("/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz" STREQUAL "") message(FATAL_ERROR "LOCAL can't be empty") endif() -if("https://github.com/LuaJIT/LuaJIT/archive/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz" STREQUAL "") +if("https://github.com/LuaJIT/LuaJIT/archive/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz" STREQUAL "") message(FATAL_ERROR "REMOTE can't be empty") endif() -if(EXISTS "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz") +if(EXISTS "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz") check_file_hash(has_hash hash_is_good) if(has_hash) if(hash_is_good) message(STATUS "File already exists and hash match (skip download): - file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz' - SHA256='4fefa19bc5600928fb13c928bf5325eaa1c78f2c1738a8ac9552154ef178bb9a'" + file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz' + SHA256='3ec37f78ab3b1afd4c3af0fde743c332da3da32eadc8500489c1cc2e4f0ec7eb'" ) return() else() message(STATUS "File already exists but hash mismatch. Removing...") - file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz") + file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz") endif() else() message(STATUS "File already exists but no hash specified (use URL_HASH): - file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz' + file='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz' Old file will be removed and new file downloaded from URL." ) - file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz") + file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz") endif() endif() set(retry_number 5) message(STATUS "Downloading... - dst='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz' + dst='/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz' timeout='none' inactivity timeout='none'" ) @@ -115,7 +115,7 @@ foreach(i RANGE ${retry_number}) if(status_code IN_LIST download_retry_codes) sleep_before_download(${i}) endif() - foreach(url https://github.com/LuaJIT/LuaJIT/archive/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz) + foreach(url https://github.com/LuaJIT/LuaJIT/archive/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz) if(NOT url IN_LIST skip_url_list) message(STATUS "Using src='${url}'") @@ -126,7 +126,7 @@ foreach(i RANGE ${retry_number}) file( DOWNLOAD - "${url}" "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz" + "${url}" "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz" # no TIMEOUT # no INACTIVITY_TIMEOUT @@ -143,7 +143,7 @@ foreach(i RANGE ${retry_number}) check_file_hash(has_hash hash_is_good) if(has_hash AND NOT hash_is_good) message(STATUS "Hash mismatch, removing...") - file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz") + file(REMOVE "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz") else() message(STATUS "Downloading... done") return() diff --git a/src/luajit-stamp/extract-luajit.cmake b/src/luajit-stamp/extract-luajit.cmake index 99d67a441..b7a863802 100644 --- a/src/luajit-stamp/extract-luajit.cmake +++ b/src/luajit-stamp/extract-luajit.cmake @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.5) # Make file names absolute: # -get_filename_component(filename "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz" ABSOLUTE) +get_filename_component(filename "/home/runner/work/deps/deps/neovim/deps/build/downloads/luajit/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz" ABSOLUTE) get_filename_component(directory "/home/runner/work/deps/deps/neovim/deps/build/src/luajit" ABSOLUTE) message(STATUS "extracting... diff --git a/src/luajit-stamp/luajit-urlinfo.txt b/src/luajit-stamp/luajit-urlinfo.txt index dc8dd080e..563c911e2 100644 --- a/src/luajit-stamp/luajit-urlinfo.txt +++ b/src/luajit-stamp/luajit-urlinfo.txt @@ -6,7 +6,7 @@ method=url command=/usr/local/bin/cmake;-P;/home/runner/work/deps/deps/neovim/deps/build/src/luajit-stamp/download-luajit.cmake;COMMAND;/usr/local/bin/cmake;-P;/home/runner/work/deps/deps/neovim/deps/build/src/luajit-stamp/verify-luajit.cmake;COMMAND;/usr/local/bin/cmake;-P;/home/runner/work/deps/deps/neovim/deps/build/src/luajit-stamp/extract-luajit.cmake source_dir=/home/runner/work/deps/deps/neovim/deps/build/src/luajit work_dir=/home/runner/work/deps/deps/neovim/deps/build/src -url(s)=https://github.com/LuaJIT/LuaJIT/archive/43d0a19158ceabaa51b0462c1ebc97612b420a2e.tar.gz -hash=SHA256=4fefa19bc5600928fb13c928bf5325eaa1c78f2c1738a8ac9552154ef178bb9a +url(s)=https://github.com/LuaJIT/LuaJIT/archive/ff204d0350575cf710f6f4af982db146cb454e1a.tar.gz +hash=SHA256=3ec37f78ab3b1afd4c3af0fde743c332da3da32eadc8500489c1cc2e4f0ec7eb no_extract= diff --git a/src/luajit/.relver b/src/luajit/.relver index a09d4bf1b..0be7087e5 100644 --- a/src/luajit/.relver +++ b/src/luajit/.relver @@ -1 +1 @@ -1700008891 +1702233742 diff --git a/src/luajit/doc/install.html b/src/luajit/doc/install.html index 04bfe26d1..b64814431 100644 --- a/src/luajit/doc/install.html +++ b/src/luajit/doc/install.html @@ -269,6 +269,7 @@
diff --git a/src/luajit/src/lj_asm_arm.h b/src/luajit/src/lj_asm_arm.h index 348cd79f8..bd5fbeb18 100644 --- a/src/luajit/src/lj_asm_arm.h +++ b/src/luajit/src/lj_asm_arm.h @@ -2042,11 +2042,12 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap) SnapEntry *map = &as->T->snapmap[snap->mapofs]; SnapEntry *flinks = &as->T->snapmap[snap_nextofs(as->T, snap)-1]; MSize n, nent = snap->nent; + int32_t bias = 0; /* Store the value of all modified slots to the Lua stack. */ for (n = 0; n < nent; n++) { SnapEntry sn = map[n]; BCReg s = snap_slot(sn); - int32_t ofs = 8*((int32_t)s-1); + int32_t ofs = 8*((int32_t)s-1) - bias; IRRef ref = snap_ref(sn); IRIns *ir = IR(ref); if ((sn & SNAP_NORESTORE)) @@ -2065,6 +2066,12 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap) emit_lso(as, ARMI_STR, tmp, RID_BASE, ofs+4); #else Reg src = ra_alloc1(as, ref, RSET_FPR); + if (LJ_UNLIKELY(ofs < -1020 || ofs > 1020)) { + int32_t adj = ofs & 0xffffff00; /* K12-friendly. */ + bias += adj; + ofs -= adj; + emit_addptr(as, RID_BASE, -adj); + } emit_vlso(as, ARMI_VSTR_D, src, RID_BASE, ofs); #endif } else { @@ -2093,6 +2100,7 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap) } checkmclim(as); } + emit_addptr(as, RID_BASE, bias); lj_assertA(map + nent == flinks, "inconsistent frames in snapshot"); } diff --git a/src/luajit/src/lj_ffrecord.c b/src/luajit/src/lj_ffrecord.c index 1233e5f74..30dc6bfc6 100644 --- a/src/luajit/src/lj_ffrecord.c +++ b/src/luajit/src/lj_ffrecord.c @@ -1204,6 +1204,12 @@ static void LJ_FASTCALL recff_buffer_method_set(jit_State *J, RecordFFData *rd) if (tref_isstr(tr)) { TRef trp = emitir(IRT(IR_STRREF, IRT_PGC), tr, lj_ir_kint(J, 0)); TRef len = emitir(IRTI(IR_FLOAD), tr, IRFL_STR_LEN); + IRIns *irp = IR(tref_ref(trp)); + /* trp must point into the anchored obj, even after folding. */ + if (irp->o == IR_STRREF) + tr = irp->op1; + else if (!tref_isk(tr)) + trp = emitir(IRT(IR_ADD, IRT_PGC), tr, lj_ir_kintpgc(J, sizeof(GCstr))); lj_ir_call(J, IRCALL_lj_bufx_set, trbuf, trp, len, tr); #if LJ_HASFFI } else if (tref_iscdata(tr)) { @@ -1444,6 +1450,15 @@ static void LJ_FASTCALL recff_table_new(jit_State *J, RecordFFData *rd) { TRef tra = lj_opt_narrow_toint(J, J->base[0]); TRef trh = lj_opt_narrow_toint(J, J->base[1]); + if (tref_isk(tra) && tref_isk(trh)) { + int32_t a = IR(tref_ref(tra))->i; + if (a < 0x7fff) { + uint32_t hbits = hsize2hbits(IR(tref_ref(trh))->i); + a = a > 0 ? a+1 : 0; + J->base[0] = emitir(IRTG(IR_TNEW, IRT_TAB), (uint32_t)a, hbits); + return; + } + } J->base[0] = lj_ir_call(J, IRCALL_lj_tab_new_ah, tra, trh); UNUSED(rd); } diff --git a/src/luajit/src/lj_gdbjit.c b/src/luajit/src/lj_gdbjit.c index e8a66635a..56094cf10 100644 --- a/src/luajit/src/lj_gdbjit.c +++ b/src/luajit/src/lj_gdbjit.c @@ -637,7 +637,7 @@ static void LJ_FASTCALL gdbjit_debugabbrev(GDBJITctx *ctx) DUV(DW_AT_low_pc); DUV(DW_FORM_addr); DUV(DW_AT_high_pc); DUV(DW_FORM_addr); DUV(DW_AT_stmt_list); DUV(DW_FORM_data4); - DB(0); DB(0); + DB(0); DB(0); DB(0); ctx->p = p; } diff --git a/src/luajit/src/lj_snap.c b/src/luajit/src/lj_snap.c index 68de208f4..93eb8a291 100644 --- a/src/luajit/src/lj_snap.c +++ b/src/luajit/src/lj_snap.c @@ -624,9 +624,25 @@ void lj_snap_replay(jit_State *J, GCtrace *T) if (irr->o == IR_HREFK || irr->o == IR_AREF) { IRIns *irf = &T->ir[irr->op1]; tmp = emitir(irf->ot, tmp, irf->op2); + } else if (irr->o == IR_NEWREF) { + IRRef allocref = tref_ref(tr); + IRRef keyref = tref_ref(key); + IRRef newref_ref = J->chain[IR_NEWREF]; + IRIns *newref = &J->cur.ir[newref_ref]; + lj_assertJ(irref_isk(keyref), + "sunk store for parent IR %04d with bad key %04d", + refp - REF_BIAS, keyref - REF_BIAS); + if (newref_ref > allocref && newref->op2 == keyref) { + lj_assertJ(newref->op1 == allocref, + "sunk store for parent IR %04d with bad tab %04d", + refp - REF_BIAS, allocref - REF_BIAS); + tmp = newref_ref; + goto skip_newref; + } } } tmp = emitir(irr->ot, tmp, key); + skip_newref: val = snap_pref(J, T, map, nent, seen, irs->op2); if (val == 0) { IRIns *irc = &T->ir[irs->op2]; diff --git a/src/luajit/src/msvcbuild.bat b/src/luajit/src/msvcbuild.bat index cd25beee1..91cfd0650 100644 --- a/src/luajit/src/msvcbuild.bat +++ b/src/luajit/src/msvcbuild.bat @@ -16,6 +16,7 @@ @rem Add more debug flags here, e.g. DEBUGCFLAGS=/DLUA_USE_APICHECK @set DEBUGCFLAGS= @set LJCOMPILE=cl /nologo /c /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_STDIO_INLINE=__declspec(dllexport)__inline +@set LJDYNBUILD=/MD /DLUA_BUILD_AS_DLL @set LJLINK=link /nologo @set LJMT=mt /nologo @set LJLIB=lib /nologo /nodefaultlib @@ -93,12 +94,13 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c @shift @set BUILDTYPE=debug @set LJCOMPILE=%LJCOMPILE% /Zi %DEBUGCFLAGS% +@set LJDYNBUILD=/MDd /DLUA_BUILD_AS_DLL @set LJLINK=%LJLINK% /opt:ref /opt:icf /incremental:no :NODEBUG @set LJLINK=%LJLINK% /%BUILDTYPE% @if "%1"=="amalg" goto :AMALGDLL @if "%1"=="static" goto :STATIC -%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL lj_*.c lib_*.c +%LJCOMPILE% %LJDYNBUILD% lj_*.c lib_*.c @if errorlevel 1 goto :BAD %LJLINK% /DLL /out:%LJDLLNAME% lj_*.obj lib_*.obj @if errorlevel 1 goto :BAD @@ -110,7 +112,7 @@ buildvm -m folddef -o lj_folddef.h lj_opt_fold.c @if errorlevel 1 goto :BAD @goto :MTDLL :AMALGDLL -%LJCOMPILE% /MD /DLUA_BUILD_AS_DLL ljamalg.c +%LJCOMPILE% %LJDYNBUILD% ljamalg.c @if errorlevel 1 goto :BAD %LJLINK% /DLL /out:%LJDLLNAME% ljamalg.obj lj_vm.obj @if errorlevel 1 goto :BAD