Skip to content

Commit

Permalink
Update LuaJIT.
Browse files Browse the repository at this point in the history
In particular, the update fixes the build problem on MacOS Mojave (see
LuaJIT/LuaJIT#484).
  • Loading branch information
akopytov committed Jul 14, 2019
1 parent eefb5ca commit cb72db1
Show file tree
Hide file tree
Showing 14 changed files with 45 additions and 31 deletions.
6 changes: 3 additions & 3 deletions third_party/luajit/luajit/dynasm/dasm_mips.lua
Original file line number Diff line number Diff line change
Expand Up @@ -809,9 +809,9 @@ map_op[".template__"] = function(params, template, nparams)
elseif p == "X" then
op = op + parse_index(params[n]); n = n + 1
elseif p == "B" or p == "J" then
local mode, n, s = parse_label(params[n], false)
if p == "B" then n = n + 2048 end
waction("REL_"..mode, n, s, 1)
local mode, m, s = parse_label(params[n], false)
if p == "B" then m = m + 2048 end
waction("REL_"..mode, m, s, 1)
n = n + 1
elseif p == "A" then
op = op + parse_imm(params[n], 5, 6, 0, false); n = n + 1
Expand Down
6 changes: 3 additions & 3 deletions third_party/luajit/luajit/dynasm/dasm_ppc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1729,9 +1729,9 @@ op_template = function(params, template, nparams)
elseif p == "M" then
op = op + parse_shiftmask(params[n], false); n = n + 1
elseif p == "J" or p == "K" then
local mode, n, s = parse_label(params[n], false)
if p == "K" then n = n + 2048 end
waction("REL_"..mode, n, s, 1)
local mode, m, s = parse_label(params[n], false)
if p == "K" then m = m + 2048 end
waction("REL_"..mode, m, s, 1)
n = n + 1
elseif p == "0" then
if band(shr(op, rs), 31) == 0 then werror("cannot use r0") end
Expand Down
4 changes: 2 additions & 2 deletions third_party/luajit/luajit/dynasm/dasm_x86.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1537,8 +1537,8 @@ local map_op = {
vrcpss_3 = "rrro:F30FV53rM|rrx/ood:",
vrsqrtps_2 = "rmoy:0Fu52rM",
vrsqrtss_3 = "rrro:F30FV52rM|rrx/ood:",
vroundpd_3 = "rmioy:660F3AV09rMU",
vroundps_3 = "rmioy:660F3AV08rMU",
vroundpd_3 = "rmioy:660F3Au09rMU",
vroundps_3 = "rmioy:660F3Au08rMU",
vroundsd_4 = "rrrio:660F3AV0BrMU|rrxi/ooq:",
vroundss_4 = "rrrio:660F3AV0ArMU|rrxi/ood:",
vshufpd_4 = "rrmioy:660FVC6rMU",
Expand Down
6 changes: 5 additions & 1 deletion third_party/luajit/luajit/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,10 @@ else
HOST_SYS= Windows
HOST_MSYS= mingw
endif
ifneq (,$(findstring MSYS,$(HOST_SYS)))
HOST_SYS= Windows
HOST_MSYS= mingw
endif
ifneq (,$(findstring CYGWIN,$(HOST_SYS)))
HOST_SYS= Windows
HOST_MSYS= cygwin
Expand All @@ -191,7 +195,7 @@ CCOPTIONS= $(CCDEBUG) $(ASOPTIONS)
LDOPTIONS= $(CCDEBUG) $(LDFLAGS)

HOST_CC= $(CC)
HOST_RM= rm -f
HOST_RM?= rm -f
# If left blank, minilua is built and used. You can supply an installed
# copy of (plain) Lua 5.1 or 5.2, plus Lua BitOp. E.g. with: HOST_LUA=lua
HOST_LUA=
Expand Down
11 changes: 9 additions & 2 deletions third_party/luajit/luajit/src/lib_aux.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,8 +218,15 @@ LUALIB_API char *luaL_prepbuffer(luaL_Buffer *B)

LUALIB_API void luaL_addlstring(luaL_Buffer *B, const char *s, size_t l)
{
while (l--)
luaL_addchar(B, *s++);
if (l <= bufffree(B)) {
memcpy(B->p, s, l);
B->p += l;
} else {
emptybuffer(B);
lua_pushlstring(B->L, s, l);
B->lvl++;
adjuststack(B);
}
}

LUALIB_API void luaL_addstring(luaL_Buffer *B, const char *s)
Expand Down
4 changes: 2 additions & 2 deletions third_party/luajit/luajit/src/lib_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -205,12 +205,12 @@ LJLIB_CF(os_date)
setboolfield(L, "isdst", stm->tm_isdst);
} else if (*s) {
SBuf *sb = &G(L)->tmpbuf;
MSize sz = 0;
MSize sz = 0, retry = 4;
const char *q;
for (q = s; *q; q++)
sz += (*q == '%') ? 30 : 1; /* Overflow doesn't matter. */
setsbufL(sb, L);
for (;;) {
while (retry--) { /* Limit growth for invalid format or empty result. */
char *buf = lj_buf_need(sb, sz);
size_t len = strftime(buf, sbufsz(sb), s, stm);
if (len) {
Expand Down
3 changes: 2 additions & 1 deletion third_party/luajit/luajit/src/lj_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,8 @@ static void *mmap_probe(size_t size)
for (retry = 0; retry < LJ_ALLOC_MMAP_PROBE_MAX; retry++) {
void *p = mmap((void *)hint_addr, size, MMAP_PROT, MMAP_FLAGS_PROBE, -1, 0);
uintptr_t addr = (uintptr_t)p;
if ((addr >> LJ_ALLOC_MBITS) == 0 && addr >= LJ_ALLOC_MMAP_PROBE_LOWER) {
if ((addr >> LJ_ALLOC_MBITS) == 0 && addr >= LJ_ALLOC_MMAP_PROBE_LOWER &&
((addr + size) >> LJ_ALLOC_MBITS) == 0) {
/* We got a suitable address. Bump the hint address. */
hint_addr = addr + size;
errno = olderr;
Expand Down
10 changes: 5 additions & 5 deletions third_party/luajit/luajit/src/lj_jit.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ typedef struct MCLink {

/* Stack snapshot header. */
typedef struct SnapShot {
uint16_t mapofs; /* Offset into snapshot map. */
uint32_t mapofs; /* Offset into snapshot map. */
IRRef1 ref; /* First IR ref for this snapshot. */
uint8_t nslots; /* Number of valid slots. */
uint8_t topslot; /* Maximum frame extent. */
Expand Down Expand Up @@ -233,17 +233,15 @@ typedef enum {
/* Trace object. */
typedef struct GCtrace {
GCHeader;
uint8_t topslot; /* Top stack slot already checked to be allocated. */
uint8_t linktype; /* Type of link. */
uint16_t nsnap; /* Number of snapshots. */
IRRef nins; /* Next IR instruction. Biased with REF_BIAS. */
#if LJ_GC64
uint32_t unused_gc64;
#endif
GCRef gclist;
IRIns *ir; /* IR instructions/constants. Biased with REF_BIAS. */
IRRef nk; /* Lowest IR constant. Biased with REF_BIAS. */
uint16_t nsnap; /* Number of snapshots. */
uint16_t nsnapmap; /* Number of snapshot map elements. */
uint32_t nsnapmap; /* Number of snapshot map elements. */
SnapShot *snap; /* Snapshot array. */
SnapEntry *snapmap; /* Snapshot map. */
GCRef startpt; /* Starting prototype. */
Expand All @@ -260,6 +258,8 @@ typedef struct GCtrace {
TraceNo1 nextroot; /* Next root trace for same prototype. */
TraceNo1 nextside; /* Next side trace of same root trace. */
uint8_t sinktags; /* Trace has SINK tags. */
uint8_t topslot; /* Top stack slot already checked to be allocated. */
uint8_t linktype; /* Type of link. */
uint8_t unused1;
#ifdef LUAJIT_USE_GDBJIT
void *gdbjit_entry; /* GDB JIT entry. */
Expand Down
8 changes: 4 additions & 4 deletions third_party/luajit/luajit/src/lj_opt_loop.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ static void loop_subst_snap(jit_State *J, SnapShot *osnap,
}
J->guardemit.irt = 0;
/* Setup new snapshot. */
snap->mapofs = (uint16_t)nmapofs;
snap->mapofs = (uint32_t)nmapofs;
snap->ref = (IRRef1)J->cur.nins;
snap->nslots = nslots;
snap->topslot = osnap->topslot;
Expand Down Expand Up @@ -251,7 +251,7 @@ static void loop_subst_snap(jit_State *J, SnapShot *osnap,
nmap += nn;
while (omap < nextmap) /* Copy PC + frame links. */
*nmap++ = *omap++;
J->cur.nsnapmap = (uint16_t)(nmap - J->cur.snapmap);
J->cur.nsnapmap = (uint32_t)(nmap - J->cur.snapmap);
}

typedef struct LoopState {
Expand Down Expand Up @@ -369,7 +369,7 @@ static void loop_unroll(LoopState *lps)
}
}
if (!irt_isguard(J->guardemit)) /* Drop redundant snapshot. */
J->cur.nsnapmap = (uint16_t)J->cur.snap[--J->cur.nsnap].mapofs;
J->cur.nsnapmap = (uint32_t)J->cur.snap[--J->cur.nsnap].mapofs;
lua_assert(J->cur.nsnapmap <= J->sizesnapmap);
*psentinel = J->cur.snapmap[J->cur.snap[0].nent]; /* Restore PC. */

Expand All @@ -383,7 +383,7 @@ static void loop_undo(jit_State *J, IRRef ins, SnapNo nsnap, MSize nsnapmap)
SnapShot *snap = &J->cur.snap[nsnap-1];
SnapEntry *map = J->cur.snapmap;
map[snap->mapofs + snap->nent] = map[J->cur.snap[0].nent]; /* Restore PC. */
J->cur.nsnapmap = (uint16_t)nsnapmap;
J->cur.nsnapmap = (uint32_t)nsnapmap;
J->cur.nsnap = nsnap;
J->guardemit.irt = 0;
lj_ir_rollback(J, ins);
Expand Down
5 changes: 3 additions & 2 deletions third_party/luajit/luajit/src/lj_record.c
Original file line number Diff line number Diff line change
Expand Up @@ -2470,8 +2470,9 @@ void lj_record_ins(jit_State *J)
#undef rbv
#undef rcv

/* Limit the number of recorded IR instructions. */
if (J->cur.nins > REF_FIRST+(IRRef)J->param[JIT_P_maxrecord])
/* Limit the number of recorded IR instructions and constants. */
if (J->cur.nins > REF_FIRST+(IRRef)J->param[JIT_P_maxrecord] ||
J->cur.nk < REF_BIAS-(IRRef)J->param[JIT_P_maxirconst])
lj_trace_err(J, LJ_TRERR_TRACEOV);
}

Expand Down
6 changes: 3 additions & 3 deletions third_party/luajit/luajit/src/lj_snap.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,11 @@ static void snapshot_stack(jit_State *J, SnapShot *snap, MSize nsnapmap)
nent = snapshot_slots(J, p, nslots);
snap->nent = (uint8_t)nent;
nent += snapshot_framelinks(J, p + nent, &snap->topslot);
snap->mapofs = (uint16_t)nsnapmap;
snap->mapofs = (uint32_t)nsnapmap;
snap->ref = (IRRef1)J->cur.nins;
snap->nslots = (uint8_t)nslots;
snap->count = 0;
J->cur.nsnapmap = (uint16_t)(nsnapmap + nent);
J->cur.nsnapmap = (uint32_t)(nsnapmap + nent);
}

/* Add or merge a snapshot. */
Expand Down Expand Up @@ -326,7 +326,7 @@ void lj_snap_shrink(jit_State *J)
snap->nent = (uint8_t)m;
nlim = J->cur.nsnapmap - snap->mapofs - 1;
while (n <= nlim) map[m++] = map[n++]; /* Move PC + frame links down. */
J->cur.nsnapmap = (uint16_t)(snap->mapofs + m); /* Free up space in map. */
J->cur.nsnapmap = (uint32_t)(snap->mapofs + m); /* Free up space in map. */
}

/* -- Snapshot access ----------------------------------------------------- */
Expand Down
3 changes: 2 additions & 1 deletion third_party/luajit/luajit/src/lj_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)
close_state(L);
return NULL;
}
G2J(g)->prngstate = rand();
#ifdef LJ_TARGET_JUMPRANGE
#if LJ_TARGET_MIPS
/* Use the middle of the 256MB-aligned region. */
Expand All @@ -233,8 +232,10 @@ LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud)
#else
uintptr_t target = (uintptr_t)(void *)lj_vm_exit_handler & ~(uintptr_t)0xffff;
#endif
#ifdef LJ_HASJIT
uintptr_t range = (1u << LJ_TARGET_JUMPRANGE) - (1u << 21);
uintptr_t allocbase;
G2J(g)->prngstate = rand();
if (LJ_PRNG_BITS(G2J(g), 1)) {
allocbase = (target - range > target) ? 0 : target - range;
} else {
Expand Down
2 changes: 1 addition & 1 deletion third_party/luajit/luajit/src/vm_mips.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -4317,7 +4317,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| ins_next2
|
|7: // Possible table write barrier for the value. Skip valiswhite check.
| barrierback TAB:CARG2, TMP3, TMP0, <2
| barrierback TAB:CARG2, TMP3, CRET1, <2
break;

case BC_TSETM:
Expand Down
2 changes: 1 addition & 1 deletion third_party/luajit/luajit/src/vm_mips64.dasc
Original file line number Diff line number Diff line change
Expand Up @@ -4263,7 +4263,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| ins_next2
|
|7: // Possible table write barrier for the value. Skip valiswhite check.
| barrierback TAB:CARG2, TMP3, TMP0, <2
| barrierback TAB:CARG2, TMP3, CRET1, <2
break;

case BC_TSETM:
Expand Down

0 comments on commit cb72db1

Please sign in to comment.