mirror of https://github.com/rusefi/lua.git
small optimizations
This commit is contained in:
parent
34df9976a9
commit
facfec0687
4
ldo.c
4
ldo.c
|
@ -49,7 +49,6 @@ void luaD_init (lua_State *L, int stacksize) {
|
||||||
L->ci = L->base_ci;
|
L->ci = L->base_ci;
|
||||||
L->ci->base = L->top;
|
L->ci->base = L->top;
|
||||||
L->ci->savedpc = NULL;
|
L->ci->savedpc = NULL;
|
||||||
L->ci->pc = NULL;
|
|
||||||
L->size_ci = 20;
|
L->size_ci = 20;
|
||||||
L->end_ci = L->base_ci + L->size_ci;
|
L->end_ci = L->base_ci + L->size_ci;
|
||||||
}
|
}
|
||||||
|
@ -107,6 +106,7 @@ void luaD_callHook (lua_State *L, lua_Hook callhook, const char *event) {
|
||||||
lua_Debug ar;
|
lua_Debug ar;
|
||||||
ar.event = event;
|
ar.event = event;
|
||||||
ar._ci = L->ci - L->base_ci;
|
ar._ci = L->ci - L->base_ci;
|
||||||
|
L->ci->pc = NULL; /* function is not active */
|
||||||
dohook(L, &ar, callhook);
|
dohook(L, &ar, callhook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,11 +135,9 @@ StkId luaD_precall (lua_State *L, StkId func) {
|
||||||
luaD_openstack(L, func);
|
luaD_openstack(L, func);
|
||||||
setobj(func, tm); /* tag method is the new function to be called */
|
setobj(func, tm); /* tag method is the new function to be called */
|
||||||
}
|
}
|
||||||
lua_assert(ttype(func) == LUA_TFUNCTION);
|
|
||||||
ci = newci(L);
|
ci = newci(L);
|
||||||
ci->base = func+1;
|
ci->base = func+1;
|
||||||
ci->savedpc = NULL;
|
ci->savedpc = NULL;
|
||||||
ci->pc = NULL;
|
|
||||||
if (L->callhook)
|
if (L->callhook)
|
||||||
luaD_callHook(L, L->callhook, "call");
|
luaD_callHook(L, L->callhook, "call");
|
||||||
if (!clvalue(func)->c.isC) return NULL;
|
if (!clvalue(func)->c.isC) return NULL;
|
||||||
|
|
3
lstate.h
3
lstate.h
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lstate.h,v 1.1 2001/11/29 22:14:34 rieru Exp rieru $
|
** $Id: lstate.h,v 1.68 2001/12/18 20:52:30 roberto Exp $
|
||||||
** Global State
|
** Global State
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -76,6 +76,7 @@ typedef struct CallInfo {
|
||||||
StkId base; /* base for called function */
|
StkId base; /* base for called function */
|
||||||
const Instruction *savedpc;
|
const Instruction *savedpc;
|
||||||
lua_Hook linehook;
|
lua_Hook linehook;
|
||||||
|
StkId top; /* top for this function (when it's a Lua function) */
|
||||||
/* extra information for debugging */
|
/* extra information for debugging */
|
||||||
const Instruction **pc;
|
const Instruction **pc;
|
||||||
int lastpc; /* last pc traced */
|
int lastpc; /* last pc traced */
|
||||||
|
|
27
lvm.c
27
lvm.c
|
@ -105,7 +105,6 @@ static void callTM (lua_State *L, const TObject *f,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Function to index a table.
|
** Function to index a table.
|
||||||
** Receives the table at `t' and the key at `key'.
|
** Receives the table at `t' and the key at `key'.
|
||||||
|
@ -141,7 +140,6 @@ void luaV_gettable (lua_State *L, StkId t, TObject *key, StkId res) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Receives table at `t', key at `key' and value at `val'.
|
** Receives table at `t', key at `key' and value at `val'.
|
||||||
*/
|
*/
|
||||||
|
@ -285,7 +283,7 @@ static void powOp (lua_State *L, StkId ra, StkId rb, StkId rc) {
|
||||||
TObject tempb, tempc;
|
TObject tempb, tempc;
|
||||||
if ((b = luaV_tonumber(b, &tempb)) != NULL &&
|
if ((b = luaV_tonumber(b, &tempb)) != NULL &&
|
||||||
(c = luaV_tonumber(c, &tempc)) != NULL) {
|
(c = luaV_tonumber(c, &tempc)) != NULL) {
|
||||||
TObject o, f;
|
TObject f, o;
|
||||||
setsvalue(&o, luaS_newliteral(L, "pow"));
|
setsvalue(&o, luaS_newliteral(L, "pow"));
|
||||||
luaV_gettable(L, gt(L), &o, &f);
|
luaV_gettable(L, gt(L), &o, &f);
|
||||||
if (ttype(&f) != LUA_TFUNCTION)
|
if (ttype(&f) != LUA_TFUNCTION)
|
||||||
|
@ -323,10 +321,10 @@ static void powOp (lua_State *L, StkId ra, StkId rb, StkId rc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define luaV_poscall(L,c,f) \
|
#define luaV_poscall(L,c,f,ci) \
|
||||||
if (c != NO_REG) { \
|
if (c != NO_REG) { \
|
||||||
luaD_poscall(L, c, f); \
|
luaD_poscall(L, c, f); \
|
||||||
L->top = base + cl->p->maxstacksize; \
|
L->top = ci->top; \
|
||||||
} \
|
} \
|
||||||
else { \
|
else { \
|
||||||
luaD_poscall(L, LUA_MULTRET, f); \
|
luaD_poscall(L, LUA_MULTRET, f); \
|
||||||
|
@ -344,14 +342,15 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
lua_Hook linehook;
|
lua_Hook linehook;
|
||||||
reinit:
|
reinit:
|
||||||
lua_assert(L->ci->savedpc == NULL);
|
lua_assert(L->ci->savedpc == NULL);
|
||||||
|
L->ci->pc = &pc;
|
||||||
|
L->ci->top = base + cl->p->maxstacksize;
|
||||||
if (cl->p->is_vararg) /* varargs? */
|
if (cl->p->is_vararg) /* varargs? */
|
||||||
adjust_varargs(L, base, cl->p->numparams);
|
adjust_varargs(L, base, cl->p->numparams);
|
||||||
if (base > L->stack_last - cl->p->maxstacksize)
|
if (base > L->stack_last - cl->p->maxstacksize)
|
||||||
luaD_stackerror(L);
|
luaD_stackerror(L);
|
||||||
while (L->top < base + cl->p->maxstacksize)
|
while (L->top < L->ci->top)
|
||||||
setnilvalue(L->top++);
|
setnilvalue(L->top++);
|
||||||
L->top = base + cl->p->maxstacksize;
|
L->top = L->ci->top;
|
||||||
L->ci->pc = &pc;
|
|
||||||
linehook = L->ci->linehook = L->linehook;
|
linehook = L->ci->linehook = L->linehook;
|
||||||
pc = cl->p->code;
|
pc = cl->p->code;
|
||||||
/* main loop of interpreter */
|
/* main loop of interpreter */
|
||||||
|
@ -360,6 +359,8 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
const StkId ra = RA(i);
|
const StkId ra = RA(i);
|
||||||
if (linehook)
|
if (linehook)
|
||||||
traceexec(L, linehook);
|
traceexec(L, linehook);
|
||||||
|
lua_assert(L->top == L->ci->top || GET_OPCODE(i) == OP_CALL ||
|
||||||
|
GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO);
|
||||||
switch (GET_OPCODE(i)) {
|
switch (GET_OPCODE(i)) {
|
||||||
case OP_MOVE: {
|
case OP_MOVE: {
|
||||||
setobj(ra, RB(i));
|
setobj(ra, RB(i));
|
||||||
|
@ -539,7 +540,7 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
firstResult = luaD_precall(L, ra);
|
firstResult = luaD_precall(L, ra);
|
||||||
if (firstResult) {
|
if (firstResult) {
|
||||||
/* it was a C function (`precall' called it); adjust results */
|
/* it was a C function (`precall' called it); adjust results */
|
||||||
luaV_poscall(L, GETARG_C(i), firstResult);
|
luaV_poscall(L, GETARG_C(i), firstResult, L->ci);
|
||||||
}
|
}
|
||||||
else { /* it is a Lua function: `call' it */
|
else { /* it is a Lua function: `call' it */
|
||||||
CallInfo *ci = L->ci;
|
CallInfo *ci = L->ci;
|
||||||
|
@ -553,7 +554,7 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
case OP_RETURN: {
|
case OP_RETURN: {
|
||||||
CallInfo *ci;
|
CallInfo *ci;
|
||||||
int b;
|
int b;
|
||||||
luaF_close(L, base);
|
if (L->openupval) luaF_close(L, base);
|
||||||
b = GETARG_B(i);
|
b = GETARG_B(i);
|
||||||
if (b != NO_REG) L->top = ra+b;
|
if (b != NO_REG) L->top = ra+b;
|
||||||
ci = L->ci - 1;
|
ci = L->ci - 1;
|
||||||
|
@ -567,7 +568,7 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
pc = ci->savedpc;
|
pc = ci->savedpc;
|
||||||
ci->savedpc = NULL;
|
ci->savedpc = NULL;
|
||||||
lua_assert(GET_OPCODE(*(pc-1)) == OP_CALL);
|
lua_assert(GET_OPCODE(*(pc-1)) == OP_CALL);
|
||||||
luaV_poscall(L, GETARG_C(*(pc-1)), ra);
|
luaV_poscall(L, GETARG_C(*(pc-1)), ra, ci);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -630,8 +631,10 @@ StkId luaV_execute (lua_State *L, const LClosure *cl, StkId base) {
|
||||||
bc = GETARG_Bc(i);
|
bc = GETARG_Bc(i);
|
||||||
if (GET_OPCODE(i) == OP_SETLIST)
|
if (GET_OPCODE(i) == OP_SETLIST)
|
||||||
n = (bc&(LFIELDS_PER_FLUSH-1)) + 1;
|
n = (bc&(LFIELDS_PER_FLUSH-1)) + 1;
|
||||||
else
|
else {
|
||||||
n = L->top - ra - 1;
|
n = L->top - ra - 1;
|
||||||
|
L->top = L->ci->top;
|
||||||
|
}
|
||||||
bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */
|
bc &= ~(LFIELDS_PER_FLUSH-1); /* bc = bc - bc%FPF */
|
||||||
for (; n > 0; n--)
|
for (; n > 0; n--)
|
||||||
luaH_setnum(L, h, bc+n, ra+n);
|
luaH_setnum(L, h, bc+n, ra+n);
|
||||||
|
|
Loading…
Reference in New Issue