mirror of https://github.com/rusefi/lua.git
binary operators use R instead of RK
faster + nobody uses RK(B), so B can be smaller (freeing one bit for more opcodes, soon)
This commit is contained in:
parent
13256a4173
commit
00e728af88
21
lcode.c
21
lcode.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lcode.c,v 2.123 2017/09/19 18:38:14 roberto Exp roberto $
|
** $Id: lcode.c,v 2.124 2017/09/26 17:10:49 roberto Exp roberto $
|
||||||
** Code generator for Lua
|
** Code generator for Lua
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -1157,7 +1157,7 @@ static void codeunexpval (FuncState *fs, OpCode op, expdesc *e, int line) {
|
||||||
** (everything but logical operators 'and'/'or' and comparison
|
** (everything but logical operators 'and'/'or' and comparison
|
||||||
** operators).
|
** operators).
|
||||||
** Expression to produce final result will be encoded in 'e1'.
|
** Expression to produce final result will be encoded in 'e1'.
|
||||||
** Because 'luaK_exp2RK' can free registers, its calls must be
|
** Because 'luaK_exp2anyreg' can free registers, its calls must be
|
||||||
** in "stack order" (that is, first on 'e2', which may have more
|
** in "stack order" (that is, first on 'e2', which may have more
|
||||||
** recent registers to be released).
|
** recent registers to be released).
|
||||||
*/
|
*/
|
||||||
|
@ -1176,8 +1176,8 @@ static void codebinexpval (FuncState *fs, OpCode op,
|
||||||
op = OP_ADDI;
|
op = OP_ADDI;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v2 = luaK_exp2RK(fs, e2); /* both operands are "RK" */
|
v2 = luaK_exp2anyreg(fs, e2); /* both operands are in registers */
|
||||||
v1 = luaK_exp2RK(fs, e1);
|
v1 = luaK_exp2anyreg(fs, e1);
|
||||||
}
|
}
|
||||||
freeexps(fs, e1, e2);
|
freeexps(fs, e1, e2);
|
||||||
e1->u.info = luaK_codeABC(fs, op, 0, v1, v2); /* generate opcode */
|
e1->u.info = luaK_codeABC(fs, op, 0, v1, v2); /* generate opcode */
|
||||||
|
@ -1188,12 +1188,12 @@ static void codebinexpval (FuncState *fs, OpCode op,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Emit code for comparisons.
|
** Emit code for comparisons.
|
||||||
** 'e1' was already put in R/K form by 'luaK_infix'.
|
** 'e1' was already put in register by 'luaK_infix'.
|
||||||
*/
|
*/
|
||||||
static void codecomp (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) {
|
static void codecomp (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e2) {
|
||||||
int rk1 = (e1->k == VK) ? RKASK(e1->u.info)
|
int rk1 = (e1->k == VK) ? RKASK(e1->u.info)
|
||||||
: check_exp(e1->k == VNONRELOC, e1->u.info);
|
: check_exp(e1->k == VNONRELOC, e1->u.info);
|
||||||
int rk2 = luaK_exp2RK(fs, e2);
|
int rk2 = luaK_exp2anyreg(fs, e2);
|
||||||
freeexps(fs, e1, e2);
|
freeexps(fs, e1, e2);
|
||||||
switch (opr) {
|
switch (opr) {
|
||||||
case OPR_NE: { /* '(a ~= b)' ==> 'not (a == b)' */
|
case OPR_NE: { /* '(a ~= b)' ==> 'not (a == b)' */
|
||||||
|
@ -1258,14 +1258,13 @@ void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) {
|
||||||
case OPR_MOD: case OPR_POW:
|
case OPR_MOD: case OPR_POW:
|
||||||
case OPR_BAND: case OPR_BOR: case OPR_BXOR:
|
case OPR_BAND: case OPR_BOR: case OPR_BXOR:
|
||||||
case OPR_SHL: case OPR_SHR: {
|
case OPR_SHL: case OPR_SHR: {
|
||||||
if (!tonumeral(v, NULL))
|
if (tonumeral(v, NULL))
|
||||||
luaK_exp2RK(fs, v);
|
break; /* keep numeral, which may be folded with 2nd operand */
|
||||||
/* else keep numeral, which may be folded with 2nd operand */
|
/* else *//* FALLTHROUGH */
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case OPR_EQ: case OPR_LT: case OPR_LE:
|
case OPR_EQ: case OPR_LT: case OPR_LE:
|
||||||
case OPR_NE: case OPR_GT: case OPR_GE: {
|
case OPR_NE: case OPR_GT: case OPR_GE: {
|
||||||
luaK_exp2RK(fs, v);
|
luaK_exp2anyreg(fs, v);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: lua_assert(0);
|
default: lua_assert(0);
|
||||||
|
|
32
lopcodes.c
32
lopcodes.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lopcodes.c,v 1.62 2017/09/15 14:19:06 roberto Exp roberto $
|
** $Id: lopcodes.c,v 1.63 2017/09/19 18:38:14 roberto Exp roberto $
|
||||||
** Opcodes for Lua virtual machine
|
** Opcodes for Lua virtual machine
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -101,18 +101,18 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
|
||||||
,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */
|
,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */
|
||||||
,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */
|
,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */
|
||||||
,opmode(0, 1, OpArgR, OpArgU, iABC) /* OP_ADDI */
|
,opmode(0, 1, OpArgR, OpArgU, iABC) /* OP_ADDI */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_ADD */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SUB */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_MUL */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_MOD */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_POW */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_DIV */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_IDIV */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_IDIV */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BAND */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BAND */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BOR */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BOR */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BXOR */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BXOR */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHL */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SHL */
|
||||||
,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHR */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SHR */
|
||||||
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */
|
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */
|
||||||
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */
|
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */
|
||||||
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */
|
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */
|
||||||
|
@ -120,9 +120,9 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
|
||||||
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */
|
,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */
|
||||||
,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */
|
,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */
|
||||||
,opmode(0, 0, OpArgU, OpArgN, iAsBx) /* OP_JMP */
|
,opmode(0, 0, OpArgU, OpArgN, iAsBx) /* OP_JMP */
|
||||||
,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */
|
,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_EQ */
|
||||||
,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */
|
,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_LT */
|
||||||
,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */
|
,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_LE */
|
||||||
,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */
|
,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */
|
||||||
,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */
|
,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */
|
||||||
,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */
|
,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */
|
||||||
|
|
32
lopcodes.h
32
lopcodes.h
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lopcodes.h,v 1.159 2017/09/18 16:07:54 roberto Exp roberto $
|
** $Id: lopcodes.h,v 1.160 2017/09/19 18:38:14 roberto Exp roberto $
|
||||||
** Opcodes for Lua virtual machine
|
** Opcodes for Lua virtual machine
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -198,18 +198,18 @@ OP_NEWTABLE,/* A B C R(A) := {} (size = B,C) */
|
||||||
OP_SELF,/* A B C R(A+1) := R(B); R(A) := R(B)[RK(C):string] */
|
OP_SELF,/* A B C R(A+1) := R(B); R(A) := R(B)[RK(C):string] */
|
||||||
|
|
||||||
OP_ADDI,/* A B C R(A) := R(B) + C */
|
OP_ADDI,/* A B C R(A) := R(B) + C */
|
||||||
OP_ADD,/* A B C R(A) := RK(B) + RK(C) */
|
OP_ADD,/* A B C R(A) := R(B) + R(C) */
|
||||||
OP_SUB,/* A B C R(A) := RK(B) - RK(C) */
|
OP_SUB,/* A B C R(A) := R(B) - R(C) */
|
||||||
OP_MUL,/* A B C R(A) := RK(B) * RK(C) */
|
OP_MUL,/* A B C R(A) := R(B) * R(C) */
|
||||||
OP_MOD,/* A B C R(A) := RK(B) % RK(C) */
|
OP_MOD,/* A B C R(A) := R(B) % R(C) */
|
||||||
OP_POW,/* A B C R(A) := RK(B) ^ RK(C) */
|
OP_POW,/* A B C R(A) := R(B) ^ R(C) */
|
||||||
OP_DIV,/* A B C R(A) := RK(B) / RK(C) */
|
OP_DIV,/* A B C R(A) := R(B) / R(C) */
|
||||||
OP_IDIV,/* A B C R(A) := RK(B) // RK(C) */
|
OP_IDIV,/* A B C R(A) := R(B) // R(C) */
|
||||||
OP_BAND,/* A B C R(A) := RK(B) & RK(C) */
|
OP_BAND,/* A B C R(A) := R(B) & R(C) */
|
||||||
OP_BOR,/* A B C R(A) := RK(B) | RK(C) */
|
OP_BOR,/* A B C R(A) := R(B) | R(C) */
|
||||||
OP_BXOR,/* A B C R(A) := RK(B) ~ RK(C) */
|
OP_BXOR,/* A B C R(A) := R(B) ~ R(C) */
|
||||||
OP_SHL,/* A B C R(A) := RK(B) << RK(C) */
|
OP_SHL,/* A B C R(A) := R(B) << R(C) */
|
||||||
OP_SHR,/* A B C R(A) := RK(B) >> RK(C) */
|
OP_SHR,/* A B C R(A) := R(B) >> R(C) */
|
||||||
OP_UNM,/* A B R(A) := -R(B) */
|
OP_UNM,/* A B R(A) := -R(B) */
|
||||||
OP_BNOT,/* A B R(A) := ~R(B) */
|
OP_BNOT,/* A B R(A) := ~R(B) */
|
||||||
OP_NOT,/* A B R(A) := not R(B) */
|
OP_NOT,/* A B R(A) := not R(B) */
|
||||||
|
@ -219,9 +219,9 @@ OP_CONCAT,/* A B C R(A) := R(B).. ... ..R(C) */
|
||||||
|
|
||||||
OP_CLOSE,/* A close all upvalues >= R(A) */
|
OP_CLOSE,/* A close all upvalues >= R(A) */
|
||||||
OP_JMP,/* sBx pc+=sBx */
|
OP_JMP,/* sBx pc+=sBx */
|
||||||
OP_EQ,/* A B C if ((RK(B) == RK(C)) ~= A) then pc++ */
|
OP_EQ,/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
|
||||||
OP_LT,/* A B C if ((RK(B) < RK(C)) ~= A) then pc++ */
|
OP_LT,/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
|
||||||
OP_LE,/* A B C if ((RK(B) <= RK(C)) ~= A) then pc++ */
|
OP_LE,/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
|
||||||
|
|
||||||
OP_TEST,/* A C if not (R(A) <=> C) then pc++ */
|
OP_TEST,/* A C if not (R(A) <=> C) then pc++ */
|
||||||
OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */
|
OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */
|
||||||
|
|
64
lvm.c
64
lvm.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lvm.c,v 2.292 2017/09/13 19:50:08 roberto Exp roberto $
|
** $Id: lvm.c,v 2.293 2017/09/19 18:38:14 roberto Exp roberto $
|
||||||
** Lua virtual machine
|
** Lua virtual machine
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -739,8 +739,6 @@ void luaV_finishOp (lua_State *L) {
|
||||||
#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i))
|
#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i))
|
||||||
#define vRC(i) s2v(RC(i))
|
#define vRC(i) s2v(RC(i))
|
||||||
#define KC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, k+GETARG_C(i))
|
#define KC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, k+GETARG_C(i))
|
||||||
#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \
|
|
||||||
(GETARG_Bk(i)) ? k + GETARG_Br(i) : s2v(base + GETARG_Br(i)))
|
|
||||||
#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \
|
#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \
|
||||||
(GETARG_Ck(i)) ? k + GETARG_Cr(i) : s2v(base + GETARG_Cr(i)))
|
(GETARG_Ck(i)) ? k + GETARG_Cr(i) : s2v(base + GETARG_Cr(i)))
|
||||||
|
|
||||||
|
@ -1013,8 +1011,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_ADD) {
|
vmcase(OP_ADD) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc)) {
|
if (ttisinteger(rb) && ttisinteger(rc)) {
|
||||||
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
||||||
|
@ -1027,8 +1025,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_SUB) {
|
vmcase(OP_SUB) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc)) {
|
if (ttisinteger(rb) && ttisinteger(rc)) {
|
||||||
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
||||||
|
@ -1041,8 +1039,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_MUL) {
|
vmcase(OP_MUL) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc)) {
|
if (ttisinteger(rb) && ttisinteger(rc)) {
|
||||||
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
||||||
|
@ -1055,8 +1053,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_DIV) { /* float division (always with floats) */
|
vmcase(OP_DIV) { /* float division (always with floats) */
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (tonumberns(rb, nb) && tonumberns(rc, nc)) {
|
if (tonumberns(rb, nb) && tonumberns(rc, nc)) {
|
||||||
setfltvalue(s2v(ra), luai_numdiv(L, nb, nc));
|
setfltvalue(s2v(ra), luai_numdiv(L, nb, nc));
|
||||||
|
@ -1065,8 +1063,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_BAND) {
|
vmcase(OP_BAND) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Integer ib; lua_Integer ic;
|
lua_Integer ib; lua_Integer ic;
|
||||||
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
||||||
setivalue(s2v(ra), intop(&, ib, ic));
|
setivalue(s2v(ra), intop(&, ib, ic));
|
||||||
|
@ -1075,8 +1073,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_BOR) {
|
vmcase(OP_BOR) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Integer ib; lua_Integer ic;
|
lua_Integer ib; lua_Integer ic;
|
||||||
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
||||||
setivalue(s2v(ra), intop(|, ib, ic));
|
setivalue(s2v(ra), intop(|, ib, ic));
|
||||||
|
@ -1085,8 +1083,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_BXOR) {
|
vmcase(OP_BXOR) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Integer ib; lua_Integer ic;
|
lua_Integer ib; lua_Integer ic;
|
||||||
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
||||||
setivalue(s2v(ra), intop(^, ib, ic));
|
setivalue(s2v(ra), intop(^, ib, ic));
|
||||||
|
@ -1095,8 +1093,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_SHL) {
|
vmcase(OP_SHL) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Integer ib; lua_Integer ic;
|
lua_Integer ib; lua_Integer ic;
|
||||||
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
||||||
setivalue(s2v(ra), luaV_shiftl(ib, ic));
|
setivalue(s2v(ra), luaV_shiftl(ib, ic));
|
||||||
|
@ -1105,8 +1103,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_SHR) {
|
vmcase(OP_SHR) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Integer ib; lua_Integer ic;
|
lua_Integer ib; lua_Integer ic;
|
||||||
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
if (tointeger(rb, &ib) && tointeger(rc, &ic)) {
|
||||||
setivalue(s2v(ra), luaV_shiftl(ib, -ic));
|
setivalue(s2v(ra), luaV_shiftl(ib, -ic));
|
||||||
|
@ -1115,8 +1113,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_MOD) {
|
vmcase(OP_MOD) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc)) {
|
if (ttisinteger(rb) && ttisinteger(rc)) {
|
||||||
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
||||||
|
@ -1131,8 +1129,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_IDIV) { /* floor division */
|
vmcase(OP_IDIV) { /* floor division */
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc)) {
|
if (ttisinteger(rb) && ttisinteger(rc)) {
|
||||||
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
lua_Integer ib = ivalue(rb); lua_Integer ic = ivalue(rc);
|
||||||
|
@ -1145,8 +1143,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_POW) {
|
vmcase(OP_POW) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
lua_Number nb; lua_Number nc;
|
lua_Number nb; lua_Number nc;
|
||||||
if (tonumberns(rb, nb) && tonumberns(rc, nc)) {
|
if (tonumberns(rb, nb) && tonumberns(rc, nc)) {
|
||||||
setfltvalue(s2v(ra), luai_numpow(L, nb, nc));
|
setfltvalue(s2v(ra), luai_numpow(L, nb, nc));
|
||||||
|
@ -1212,8 +1210,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_EQ) {
|
vmcase(OP_EQ) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
Protect(
|
Protect(
|
||||||
if (luaV_equalobj(L, rb, rc) != GETARG_A(i))
|
if (luaV_equalobj(L, rb, rc) != GETARG_A(i))
|
||||||
pc++;
|
pc++;
|
||||||
|
@ -1223,8 +1221,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_LT) {
|
vmcase(OP_LT) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
int res;
|
int res;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc))
|
if (ttisinteger(rb) && ttisinteger(rc))
|
||||||
res = (ivalue(rb) < ivalue(rc));
|
res = (ivalue(rb) < ivalue(rc));
|
||||||
|
@ -1238,8 +1236,8 @@ void luaV_execute (lua_State *L) {
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_LE) {
|
vmcase(OP_LE) {
|
||||||
TValue *rb = RKB(i);
|
TValue *rb = vRB(i);
|
||||||
TValue *rc = RKC(i);
|
TValue *rc = vRC(i);
|
||||||
int res;
|
int res;
|
||||||
if (ttisinteger(rb) && ttisinteger(rc))
|
if (ttisinteger(rb) && ttisinteger(rc))
|
||||||
res = (ivalue(rb) <= ivalue(rc));
|
res = (ivalue(rb) <= ivalue(rc));
|
||||||
|
|
Loading…
Reference in New Issue