mirror of
https://github.com/love2d/megasource.git
synced 2026-08-17 19:24:09 +02:00
Update LuaJIT to 2.0.5
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Trace recorder (bytecode -> SSA IR).
|
||||
** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
|
||||
** Copyright (C) 2005-2017 Mike Pall. See Copyright Notice in luajit.h
|
||||
*/
|
||||
|
||||
#define lj_record_c
|
||||
@@ -687,7 +687,7 @@ void lj_record_ret(jit_State *J, BCReg rbase, ptrdiff_t gotresults)
|
||||
(void)getslot(J, rbase+i); /* Ensure all results have a reference. */
|
||||
while (frame_ispcall(frame)) { /* Immediately resolve pcall() returns. */
|
||||
BCReg cbase = (BCReg)frame_delta(frame);
|
||||
if (--J->framedepth < 0)
|
||||
if (--J->framedepth <= 0)
|
||||
lj_trace_err(J, LJ_TRERR_NYIRETL);
|
||||
lua_assert(J->baseslot > 1);
|
||||
gotresults++;
|
||||
@@ -1343,13 +1343,17 @@ noconstify:
|
||||
/* Note: this effectively limits LJ_MAX_UPVAL to 127. */
|
||||
uv = (uv << 8) | (hashrot(uvp->dhash, uvp->dhash + HASH_BIAS) & 0xff);
|
||||
if (!uvp->closed) {
|
||||
uref = tref_ref(emitir(IRTG(IR_UREFO, IRT_P32), fn, uv));
|
||||
/* In current stack? */
|
||||
if (uvval(uvp) >= tvref(J->L->stack) &&
|
||||
uvval(uvp) < tvref(J->L->maxstack)) {
|
||||
int32_t slot = (int32_t)(uvval(uvp) - (J->L->base - J->baseslot));
|
||||
if (slot >= 0) { /* Aliases an SSA slot? */
|
||||
emitir(IRTG(IR_EQ, IRT_P32),
|
||||
REF_BASE,
|
||||
emitir(IRT(IR_ADD, IRT_P32), uref,
|
||||
lj_ir_kint(J, (slot - 1) * -8)));
|
||||
slot -= (int32_t)J->baseslot; /* Note: slot number may be negative! */
|
||||
/* NYI: add IR to guard that it's still aliasing the same slot. */
|
||||
if (val == 0) {
|
||||
return getslot(J, slot);
|
||||
} else {
|
||||
@@ -1359,7 +1363,9 @@ noconstify:
|
||||
}
|
||||
}
|
||||
}
|
||||
uref = tref_ref(emitir(IRTG(IR_UREFO, IRT_P32), fn, uv));
|
||||
emitir(IRTG(IR_UGT, IRT_P32),
|
||||
emitir(IRT(IR_SUB, IRT_P32), uref, REF_BASE),
|
||||
lj_ir_kint(J, (J->baseslot + J->maxslot) * 8));
|
||||
} else {
|
||||
needbarrier = 1;
|
||||
uref = tref_ref(emitir(IRTG(IR_UREFC, IRT_P32), fn, uv));
|
||||
@@ -1490,8 +1496,11 @@ static int select_detect(jit_State *J)
|
||||
BCIns ins = J->pc[1];
|
||||
if (bc_op(ins) == BC_CALLM && bc_b(ins) == 2 && bc_c(ins) == 1) {
|
||||
cTValue *func = &J->L->base[bc_a(ins)];
|
||||
if (tvisfunc(func) && funcV(func)->c.ffid == FF_select)
|
||||
if (tvisfunc(func) && funcV(func)->c.ffid == FF_select) {
|
||||
TRef kfunc = lj_ir_kfunc(J, funcV(func));
|
||||
emitir(IRTG(IR_EQ, IRT_FUNC), getslot(J, bc_a(ins)), kfunc);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -1881,14 +1890,14 @@ void lj_record_ins(jit_State *J)
|
||||
case BC_MODVN: case BC_MODVV:
|
||||
recmod:
|
||||
if (tref_isnumber_str(rb) && tref_isnumber_str(rc))
|
||||
rc = lj_opt_narrow_mod(J, rb, rc, rcv);
|
||||
rc = lj_opt_narrow_mod(J, rb, rc, rbv, rcv);
|
||||
else
|
||||
rc = rec_mm_arith(J, &ix, MM_mod);
|
||||
break;
|
||||
|
||||
case BC_POW:
|
||||
if (tref_isnumber_str(rb) && tref_isnumber_str(rc))
|
||||
rc = lj_opt_narrow_pow(J, lj_ir_tonum(J, rb), rc, rcv);
|
||||
rc = lj_opt_narrow_pow(J, rb, rc, rbv, rcv);
|
||||
else
|
||||
rc = rec_mm_arith(J, &ix, MM_pow);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user