refactor arithmetic opcodes - remove opcodes that are specialized for constants

pull/81/head
Dibyendu Majumdar 9 years ago
parent 059e47e902
commit 9cd82e2303

@ -233,58 +233,34 @@ OP_RAVI_NEWARRAYF, /* A R(A) := array of float */
OP_RAVI_LOADIZ, /* A R(A) := tointeger(0) */
OP_RAVI_LOADFZ, /* A R(A) := tonumber(0) */
OP_RAVI_UNMF, /* A B R(A) := -R(B) floating point */
OP_RAVI_UNMI, /* A B R(A) := -R(B) integer */
OP_RAVI_ADDFFKR,/* A B C R(A) := Kst(B) + R(C) */
OP_RAVI_ADDFFRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_ADDFIKR,/* A B C R(A) := Kst(B) + R(C) */
OP_RAVI_ADDFIRK,/* A B C R(A) := R(B) + Kst(C) */
OP_RAVI_ADDFIRN,/* A B C R(A) := R(B) + C */
OP_RAVI_ADDFIRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_ADDIIRK,/* A B C R(A) := R(B) + Kst(C) */
OP_RAVI_ADDIIRN,/* A B C R(A) := R(B) + C */
OP_RAVI_ADDIIRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_SUBFFKR,/* A B C R(A) := Kst(B) - R(C) */
OP_RAVI_SUBFFRK,/* A B C R(A) := R(B) - Kst(C) */
OP_RAVI_SUBFFRR,/* A B C R(A) := R(B) - R(C) */
OP_RAVI_SUBFIKR,/* A B C R(A) := Kst(B) - R(C) */
OP_RAVI_SUBFIRK,/* A B C R(A) := R(B) - Kst(C) */
OP_RAVI_SUBFIRR,/* A B C R(A) := R(B) - R(C) */
OP_RAVI_SUBIFKR,/* A B C R(A) := Kst(B) - R(C) */
OP_RAVI_SUBIFRK,/* A B C R(A) := R(B) - Kst(C) */
OP_RAVI_SUBIFRR,/* A B C R(A) := R(B) - R(C) */
OP_RAVI_SUBIIKR,/* A B C R(A) := Kst(B) - R(C) */
OP_RAVI_SUBIIRK,/* A B C R(A) := R(B) - Kst(C) */
OP_RAVI_SUBIIRR,/* A B C R(A) := R(B) - R(C) */
OP_RAVI_MULFFKR,/* A B C R(A) := Kst(B) * R(C) */
OP_RAVI_MULFFRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_MULFIKR,/* A B C R(A) := Kst(B) * R(C) */
OP_RAVI_MULFIRK,/* A B C R(A) := R(B) * Kst(C) */
OP_RAVI_MULFIRN,/* A B C R(A) := R(B) * C */
OP_RAVI_MULFIRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_MULIIRK,/* A B C R(A) := R(B) * Kst(C) */
OP_RAVI_MULIIRN,/* A B C R(A) := R(B) * C */
OP_RAVI_MULIIRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_DIVFFKK,/* A B C R(A) := Kst(B) / Kst(C) */
OP_RAVI_DIVFFKR,/* A B C R(A) := Kst(B) / R(C) */
OP_RAVI_DIVFFRK,/* A B C R(A) := R(B) / Kst(C) */
OP_RAVI_DIVFFRR,/* A B C R(A) := R(B) / R(C) */
OP_RAVI_DIVFIKK,/* A B C R(A) := Kst(B) / Kst(C) */
OP_RAVI_DIVFIKR,/* A B C R(A) := Kst(B) / R(C) */
OP_RAVI_DIVFIRK,/* A B C R(A) := R(B) / Kst(C) */
OP_RAVI_DIVFIRR,/* A B C R(A) := R(B) / R(C) */
OP_RAVI_DIVIFKK,/* A B C R(A) := Kst(B) / Kst(C) */
OP_RAVI_DIVIFKR,/* A B C R(A) := Kst(B) / R(C) */
OP_RAVI_DIVIFRK,/* A B C R(A) := R(B) / Kst(C) */
OP_RAVI_DIVIFRR,/* A B C R(A) := R(B) / R(C) */
OP_RAVI_DIVIIKK,/* A B C R(A) := Kst(B) / Kst(C) */
OP_RAVI_DIVIIKR,/* A B C R(A) := Kst(B) / R(C) */
OP_RAVI_DIVIIRK,/* A B C R(A) := R(B) / Kst(C) */
OP_RAVI_DIVIIRR,/* A B C R(A) := R(B) / R(C) */
OP_RAVI_UNMF, /* A B R(A) := -R(B) floating point */
OP_RAVI_UNMI, /* A B R(A) := -R(B) integer */
OP_RAVI_ADDFF, /* A B C R(A) := RK(B) + RK(C) */
OP_RAVI_ADDFI, /* A B C R(A) := RK(B) + RK(C) */
OP_RAVI_ADDII, /* A B C R(A) := RK(B) + RK(C) */
OP_RAVI_ADDFN, /* A B C R(A) := RK(B) + C */
OP_RAVI_ADDIN, /* A B C R(A) := RK(B) + C */
OP_RAVI_SUBFF, /* A B C R(A) := RK(B) - RK(C) */
OP_RAVI_SUBFI, /* A B C R(A) := RK(B) - RK(C) */
OP_RAVI_SUBIF, /* A B C R(A) := RK(B) - RK(C) */
OP_RAVI_SUBII, /* A B C R(A) := RK(B) - RK(C) */
OP_RAVI_SUBFN, /* A B C R(A) := RK(B) - C */
OP_RAVI_SUBNF, /* A B C R(A) := B - RK(C) */
OP_RAVI_SUBIN, /* A B C R(A) := RK(B) - C */
OP_RAVI_SUBNI, /* A B C R(A) := B - RK(C) */
OP_RAVI_MULFF, /* A B C R(A) := RK(B) * RK(C) */
OP_RAVI_MULFI, /* A B C R(A) := RK(B) * RK(C) */
OP_RAVI_MULII, /* A B C R(A) := RK(B) * RK(C) */
OP_RAVI_MULFN, /* A B C R(A) := RK(B) * C */
OP_RAVI_MULIN, /* A B C R(A) := RK(B) * C */
OP_RAVI_DIVFF, /* A B C R(A) := RK(B) / RK(C) */
OP_RAVI_DIVFI, /* A B C R(A) := RK(B) / RK(C) */
OP_RAVI_DIVIF, /* A B C R(A) := RK(B) / RK(C) */
OP_RAVI_DIVII, /* A B C R(A) := RK(B) / RK(C) */
OP_RAVI_TOINT, /* A R(A) := toint(R(A)) */
OP_RAVI_TOFLT, /* A R(A) := tofloat(R(A)) */

@ -266,20 +266,20 @@ int luaK_codeABKi(FuncState *fs, OpCode o, int a, int b, int c) {
* constants hence MAXINDEXRK and not MAXARG_C
*/
if (val >= 0 && val <= MAXINDEXRK) {
if (o == OP_RAVI_ADDFIRK) {
o = OP_RAVI_ADDFIRN;
if (o == OP_RAVI_ADDFI) {
o = OP_RAVI_ADDFN;
c = (int)val;
}
else if (o == OP_RAVI_ADDIIRK) {
o = OP_RAVI_ADDIIRN;
else if (o == OP_RAVI_ADDII) {
o = OP_RAVI_ADDIN;
c = (int)val;
}
else if (o == OP_RAVI_MULFIRK) {
o = OP_RAVI_MULFIRN;
else if (o == OP_RAVI_MULFI) {
o = OP_RAVI_MULFN;
c = (int)val;
}
else if (o == OP_RAVI_MULIIRK) {
o = OP_RAVI_MULIIRN;
else if (o == OP_RAVI_MULII) {
o = OP_RAVI_MULIN;
c = (int)val;
}
}
@ -930,64 +930,57 @@ static int constfolding (FuncState *fs, int op, expdesc *e1, expdesc *e2) {
return 1;
}
/* translate to standard Lua arithmetic codes */
static int getarithop(OpCode op) {
if (op < OP_EXTRAARG)
return op - OP_ADD + LUA_OPADD;
if (op >= OP_RAVI_ADDFFKR && op <= OP_RAVI_ADDIIRR)
/* following are RAVI specific opcodes */
if (op >= OP_RAVI_ADDFF && op < OP_RAVI_ADDIN)
return LUA_OPADD;
else if (op >= OP_RAVI_SUBFFKR && op <= OP_RAVI_SUBIIRR)
else if (op >= OP_RAVI_SUBFF && op <= OP_RAVI_SUBNI)
return LUA_OPSUB;
else if (op >= OP_RAVI_MULFFKR && op <= OP_RAVI_MULIIRR)
else if (op >= OP_RAVI_MULFF && op <= OP_RAVI_MULIN)
return LUA_OPMUL;
else if (op >= OP_RAVI_DIVFFKK && op <= OP_RAVI_DIVIIRR)
else if (op >= OP_RAVI_DIVFF && op <= OP_RAVI_DIVII)
return LUA_OPDIV;
/* should we ever get here?*/
return LUA_OPADD - 1;
}
/* generate ADD and MUL codes - for ADD supply offset as 0, and for
* MUL supply the difference between the two
*/
static void generate_binarithop(FuncState *fs, expdesc *e1, expdesc *e2, int o1,
int o2, int offset) {
if (e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFFKR + offset, 0, o1,
o2); /* generate opcode */
} else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFFKR + offset, 0, o2,
o1); /* generate opcode */
} else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFFRR + offset, 0, o1,
o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFF + offset, 0, o1, o2);
} else if (e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFIKR + offset, 0, o1,
o2); /* generate opcode */
} else if (ISK(o2)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDFIRK + offset, 0, o1,
if (ISK(o2)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDFI + offset, 0, o1,
o2); /* generate opcode */
} else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFIRR + offset, 0, o1,
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFI + offset, 0, o1,
o2); /* generate opcode */
}
} else if (e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDFIRK + offset, 0, o2,
if (ISK(o1)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDFI + offset, 0, o2,
o1); /* generate opcode */
} else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFIKR + offset, 0, o2,
o1); /* generate opcode */
} else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFIRR + offset, 0, o2,
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDFI + offset, 0, o2,
o1); /* generate opcode */
}
} else if (e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDIIRK + offset, 0, o2,
if (ISK(o1)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDII + offset, 0, o2,
o1); /* generate opcode */
} else if (ISK(o2)) {
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDIIRK + offset, 0, o1,
e1->u.info = luaK_codeABKi(fs, OP_RAVI_ADDII + offset, 0, o1,
o2); /* generate opcode */
} else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDIIRR + offset, 0, o1,
e1->u.info = luaK_codeABC(fs, OP_RAVI_ADDII + offset, 0, o1,
o2); /* generate opcode */
}
}
@ -1034,108 +1027,33 @@ static void codeexpval (FuncState *fs, OpCode op,
else if (op == OP_MUL &&
(e1->ravi_type == RAVI_TNUMFLT || e1->ravi_type == RAVI_TNUMINT) &&
(e2->ravi_type == RAVI_TNUMFLT || e2->ravi_type == RAVI_TNUMINT))
generate_binarithop(fs, e1, e2, o1, o2, OP_RAVI_MULFFKR - OP_RAVI_ADDFFKR);
generate_binarithop(fs, e1, e2, o1, o2, OP_RAVI_MULFF - OP_RAVI_ADDFF);
/* todo optimize the SUB opcodes when constant is small */
else if (op == OP_SUB && e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFFKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFFRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFFRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFF, 0, o1, o2);
}
else if (op == OP_SUB && e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFIKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFIRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFIRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBFI, 0, o1, o2);
}
else if (op == OP_SUB && e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIFKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIFRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIFRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIF, 0, o1, o2);
}
else if (op == OP_SUB && e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && !ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIIKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIIRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBIIRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_SUBII, 0, o1, o2);
}
else if (op == OP_DIV && e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFKK, 0, o1, o2); /* generate opcode */
}
else if (ISK(o1)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFF, 0, o1, o2);
}
else if (op == OP_DIV && e1->ravi_type == RAVI_TNUMFLT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFIKK, 0, o1, o2); /* generate opcode */
}
else if (ISK(o1)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFIKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFIRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFIRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFI, 0, o1, o2);
}
else if (op == OP_DIV && e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMFLT) {
if (ISK(o1) && ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVIFKK, 0, o1, o2); /* generate opcode */
}
else if (ISK(o1)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVIFKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVIFRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVIFRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVIF, 0, o1, o2);
}
else if (op == OP_DIV && e1->ravi_type == RAVI_TNUMINT && e2->ravi_type == RAVI_TNUMINT) {
if (ISK(o1) && ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFKK, 0, o1, o2); /* generate opcode */
}
else if (ISK(o1)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFKR, 0, o1, o2); /* generate opcode */
}
else if (ISK(o2)) {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFRK, 0, o1, o2); /* generate opcode */
}
else {
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVFFRR, 0, o1, o2); /* generate opcode */
}
e1->u.info = luaK_codeABC(fs, OP_RAVI_DIVII, 0, o1, o2);
}
else {

@ -68,61 +68,37 @@ LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = {
"NEWARRAYI", /* A R(A) := array of int */
"NEWARRAYF", /* A R(A) := array of float */
"LOADIZ", /* A R(A) := tointeger(0) */
"LOADFZ", /* A R(A) := tonumber(0) */
"UNMF", /* A B R(A) := -R(B) floating point */
"UNMI", /* A B R(A) := -R(B) integer */
"ADDFFKR",/* A B C R(A) := Kst(B) + R(C) */
"ADDFFRR",/* A B C R(A) := R(B) + R(C) */
"ADDFIKR",/* A B C R(A) := Kst(B) + R(C) */
"ADDFIRK",/* A B C R(A) := R(B) + Kst(C) */
"ADDFIRN",/* A B C R(A) := R(B) + C */
"ADDFIRR",/* A B C R(A) := R(B) + R(C) */
"ADDIIRK",/* A B C R(A) := R(B) + Kst(C) */
"ADDIIRN",/* A B C R(A) := R(B) + C */
"ADDIIRR",/* A B C R(A) := R(B) + R(C) */
"SUBFFKR",/* A B C R(A) := Kst(B) - R(C) */
"SUBFFRK",/* A B C R(A) := R(B) - Kst(C) */
"SUBFFRR",/* A B C R(A) := R(B) - R(C) */
"SUBFIKR",/* A B C R(A) := Kst(B) - R(C) */
"SUBFIRK",/* A B C R(A) := R(B) - Kst(C) */
"SUBFIRR",/* A B C R(A) := R(B) - R(C) */
"SUBIFKR",/* A B C R(A) := Kst(B) - R(C) */
"SUBIFRK",/* A B C R(A) := R(B) - Kst(C) */
"SUBIFRR",/* A B C R(A) := R(B) - R(C) */
"SUBIIKR",/* A B C R(A) := Kst(B) - R(C) */
"SUBIIRK",/* A B C R(A) := R(B) - Kst(C) */
"SUBIIRR",/* A B C R(A) := R(B) - R(C) */
"MULFFKR",/* A B C R(A) := Kst(B) * R(C) */
"MULFFRR",/* A B C R(A) := R(B) * R(C) */
"MULFIKR",/* A B C R(A) := Kst(B) * R(C) */
"MULFIRK",/* A B C R(A) := R(B) * Kst(C) */
"MULFIRN",/* A B C R(A) := R(B) * C */
"MULFIRR",/* A B C R(A) := R(B) * R(C) */
"MULIIRK",/* A B C R(A) := R(B) * Kst(C) */
"MULIIRN",/* A B C R(A) := R(B) * C */
"MULIIRR",/* A B C R(A) := R(B) * R(C) */
"DIVFFKK",/* A B C R(A) := Kst(B) / Kst(C) */
"DIVFFKR",/* A B C R(A) := Kst(B) / R(C) */
"DIVFFRK",/* A B C R(A) := R(B) / Kst(C) */
"DIVFFRR",/* A B C R(A) := R(B) / R(C) */
"DIVFIKK",/* A B C R(A) := Kst(B) / Kst(C) */
"DIVFIKR",/* A B C R(A) := Kst(B) / R(C) */
"DIVFIRK",/* A B C R(A) := R(B) / Kst(C) */
"DIVFIRR",/* A B C R(A) := R(B) / R(C) */
"DIVIFKK",/* A B C R(A) := Kst(B) / Kst(C) */
"DIVIFKR",/* A B C R(A) := Kst(B) / R(C) */
"DIVIFRK",/* A B C R(A) := R(B) / Kst(C) */
"DIVIFRR",/* A B C R(A) := R(B) / R(C) */
"DIVIIKK",/* A B C R(A) := Kst(B) / Kst(C) */
"DIVIIKR",/* A B C R(A) := Kst(B) / R(C) */
"DIVIIRK",/* A B C R(A) := R(B) / Kst(C) */
"DIVIIRR",/* A B C R(A) := R(B) / R(C) */
"LOADIZ", /* A R(A) := tointeger(0) */
"LOADFZ", /* A R(A) := tonumber(0) */
"UNMF", /* A B R(A) := -R(B) floating point */
"UNMI", /* A B R(A) := -R(B) integer */
"ADDFF", /* A B C R(A) := RK(B) + RK(C) */
"ADDFI", /* A B C R(A) := RK(B) + RK(C) */
"ADDII", /* A B C R(A) := RK(B) + RK(C) */
"ADDFN", /* A B C R(A) := RK(B) + C */
"ADDIN", /* A B C R(A) := RK(B) + C */
"SUBFF", /* A B C R(A) := RK(B) - RK(C) */
"SUBFI", /* A B C R(A) := RK(B) - RK(C) */
"SUBIF", /* A B C R(A) := RK(B) - RK(C) */
"SUBII", /* A B C R(A) := RK(B) - RK(C) */
"SUBFN", /* A B C R(A) := RK(B) - C */
"SUBNF", /* A B C R(A) := B - RK(C) */
"SUBIN", /* A B C R(A) := RK(B) - C */
"SUBNI", /* A B C R(A) := B - RK(C) */
"MULFF", /* A B C R(A) := RK(B) * RK(C) */
"MULFI", /* A B C R(A) := RK(B) * RK(C) */
"MULII", /* A B C R(A) := RK(B) * RK(C) */
"MULFN", /* A B C R(A) := RK(B) * C */
"MULIN", /* A B C R(A) := RK(B) * C */
"DIVFF", /* A B C R(A) := RK(B) / RK(C) */
"DIVFI", /* A B C R(A) := RK(B) / RK(C) */
"DIVIF", /* A B C R(A) := RK(B) / RK(C) */
"DIVII", /* A B C R(A) := RK(B) / RK(C) */
"TOINT", /* A R(A) := toint(R(A)) */
"TOFLT", /* A R(A) := tofloat(R(A)) */
@ -205,55 +181,31 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_RAVI_UNMF A B R(A) := -R(B) floating point */
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_RAVI_UNMI A B R(A) := -R(B) integer */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_ADDFFKR A B C R(A) := Kst(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDFFRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_ADDFIKR A B C R(A) := Kst(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ADDFIRK A B C R(A) := R(B) + Kst(C) */
,opmode(0, 1, OpArgR, OpArgU, iABC) /*RAVI_ADDFIRN A B C R(A) := R(B) + C */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDFIRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ADDIIRK A B C R(A) := R(B) + Kst(C) */
,opmode(0, 1, OpArgR, OpArgU, iABC) /*RAVI_ADDIIRN A B C R(A) := R(B) + C */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDIIRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_SUBFFKR A B C R(A) := Kst(B) - R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_SUBFFRK A B C R(A) := R(B) - Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_SUBFFRR A B C R(A) := R(B) - R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_SUBFIKR A B C R(A) := Kst(B) - R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_SUBFIRK A B C R(A) := R(B) - Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_SUBFIRR A B C R(A) := R(B) - R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_SUBIFKR A B C R(A) := Kst(B) - R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_SUBIFRK A B C R(A) := R(B) - Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_SUBIFRR A B C R(A) := R(B) - R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_SUBIIKR A B C R(A) := Kst(B) - R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_SUBIIRK A B C R(A) := R(B) - Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_SUBIIRR A B C R(A) := R(B) - R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_MULFFKR A B C R(A) := Kst(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_MULFFRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_MULFIKR A B C R(A) := Kst(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_MULFIRK A B C R(A) := R(B) * Kst(C) */
,opmode(0, 1, OpArgR, OpArgU, iABC) /*RAVI_MULFIRN A B C R(A) := R(B) * C */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_MULFIRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_MULIIRK A B C R(A) := R(B) * Kst(C) */
,opmode(0, 1, OpArgR, OpArgU, iABC) /*RAVI_MULIIRN A B C R(A) := R(B) * C */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_MULIIRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_DIVFFKK A B C R(A) := Kst(B) / Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_DIVFFKR A B C R(A) := Kst(B) / R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_DIVFFRK A B C R(A) := R(B) / Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_DIVFFRR A B C R(A) := R(B) / R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_DIVFIKK A B C R(A) := Kst(B) / Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_DIVFIKR A B C R(A) := Kst(B) / R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_DIVFIRK A B C R(A) := R(B) / Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_DIVFIRR A B C R(A) := R(B) / R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_DIVIFKK A B C R(A) := Kst(B) / Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_DIVIFKR A B C R(A) := Kst(B) / R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_DIVIFRK A B C R(A) := R(B) / Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_DIVIFRR A B C R(A) := R(B) / R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_DIVIIKK A B C R(A) := Kst(B) / Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_DIVIIKR A B C R(A) := Kst(B) / R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_DIVIIRK A B C R(A) := R(B) / Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_DIVIIRR A B C R(A) := R(B) / R(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_ADDFF A B C R(A) := RK(B) + RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_ADDFI A B C R(A) := RK(B) + RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_ADDII A B C R(A) := RK(B) + RK(C) */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_ADDFN A B C R(A) := RK(B) + C */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_ADDIN A B C R(A) := RK(B) + C */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_SUBFF A B C R(A) := RK(B) - RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_SUBFI A B C R(A) := RK(B) - RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_SUBIF A B C R(A) := RK(B) - RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_SUBII A B C R(A) := RK(B) - RK(C) */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_SUBFN A B C R(A) := RK(B) - C */
, opmode(0, 1, OpArgU, OpArgK, iABC)/* OP_RAVI_SUBNF A B C R(A) := B - RK(C) */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_SUBIN A B C R(A) := RK(B) - C */
, opmode(0, 1, OpArgU, OpArgK, iABC)/* OP_RAVI_SUBNI A B C R(A) := B - RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_MULFF A B C R(A) := RK(B) * RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_MULFI A B C R(A) := RK(B) * RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_MULII A B C R(A) := RK(B) * RK(C) */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_MULFN A B C R(A) := RK(B) * C */
, opmode(0, 1, OpArgK, OpArgU, iABC)/* OP_RAVI_MULIN A B C R(A) := RK(B) * C */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_DIVFF A B C R(A) := RK(B) / RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_DIVFI A B C R(A) := RK(B) / RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_DIVIF A B C R(A) := RK(B) / RK(C) */
, opmode(0, 1, OpArgK, OpArgK, iABC)/* OP_RAVI_DIVII A B C R(A) := RK(B) / RK(C) */
, opmode(0, 1, OpArgN, OpArgN, iABC) /* OP_RAVI_TOINT A R(A) := toint(R(A)) */
, opmode(0, 1, OpArgN, OpArgN, iABC) /* OP_RAVI_TOFLT A R(A) := tonumber(R(A)) */

@ -1235,238 +1235,118 @@ newframe: /* reentry point when frame changes (call/return) */
setivalue(ra, -ivalue(rb));
} break;
case OP_RAVI_ADDFFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) + fltvalue(rc));
} break;
case OP_RAVI_ADDFFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_ADDFF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) + fltvalue(rc));
} break;
case OP_RAVI_ADDFIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
case OP_RAVI_ADDFI: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) + ivalue(rc));
} break;
case OP_RAVI_ADDFIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) + ivalue(rc));
case OP_RAVI_ADDII: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setivalue(ra, ivalue(rb) + ivalue(rc));
} break;
case OP_RAVI_ADDFIRN: {
case OP_RAVI_ADDFN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here ?*/
TValue *rb = RB(i);
TValue *rb = RKB(i);
setfltvalue(ra, fltvalue(rb) + c);
} break;
case OP_RAVI_ADDFIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) + ivalue(rc));
} break;
case OP_RAVI_ADDIIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setivalue(ra, ivalue(rb) + ivalue(rc));
} break;
case OP_RAVI_ADDIIRN: {
case OP_RAVI_ADDIN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here? */
TValue *rb = RB(i);
TValue *rb = RKB(i);
setivalue(ra, ivalue(rb) + c);
} break;
case OP_RAVI_ADDIIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) + ivalue(rc));
} break;
case OP_RAVI_SUBFFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) - fltvalue(rc));
} break;
case OP_RAVI_SUBFFRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) - fltvalue(rc));
} break;
case OP_RAVI_SUBFFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_SUBFF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) - fltvalue(rc));
} break;
case OP_RAVI_SUBFIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) - ivalue(rc));
} break;
case OP_RAVI_SUBFIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) - ivalue(rc));
} break;
case OP_RAVI_SUBFIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_SUBFI: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) - ivalue(rc));
} break;
case OP_RAVI_SUBIFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
case OP_RAVI_SUBIF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, ivalue(rb) - fltvalue(rc));
} break;
case OP_RAVI_SUBIFRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, ivalue(rb) - fltvalue(rc));
case OP_RAVI_SUBII: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setivalue(ra, ivalue(rb) - ivalue(rc));
} break;
case OP_RAVI_SUBIFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setfltvalue(ra, ivalue(rb) - fltvalue(rc));
case OP_RAVI_SUBFN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here ?*/
TValue *rb = RKB(i);
setfltvalue(ra, fltvalue(rb) - c);
} break;
case OP_RAVI_SUBIIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) - ivalue(rc));
case OP_RAVI_SUBNF: {
int b = INDEXK(GETARG_B(i)); /* do we need INDEXK here? */
TValue *rc = RKC(i);
setfltvalue(ra, b - fltvalue(rc));
} break;
case OP_RAVI_SUBIIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setivalue(ra, ivalue(rb) - ivalue(rc));
case OP_RAVI_SUBIN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here ?*/
TValue *rb = RKB(i);
setivalue(ra, ivalue(rb) - c);
} break;
case OP_RAVI_SUBIIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) - ivalue(rc));
case OP_RAVI_SUBNI: {
int b = INDEXK(GETARG_B(i)); /* do we need INDEXK here? */
TValue *rc = RKC(i);
setivalue(ra, b - ivalue(rc));
} break;
case OP_RAVI_MULFFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) * fltvalue(rc));
} break;
case OP_RAVI_MULFFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_MULFF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) * fltvalue(rc));
} break;
case OP_RAVI_MULFIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
case OP_RAVI_MULFI: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) * ivalue(rc));
} break;
case OP_RAVI_MULFIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) * ivalue(rc));
case OP_RAVI_MULII: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setivalue(ra, ivalue(rb) * ivalue(rc));
} break;
case OP_RAVI_MULFIRN: {
case OP_RAVI_MULFN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here ?*/
TValue *rb = RB(i);
TValue *rb = RKB(i);
setfltvalue(ra, fltvalue(rb) * c);
} break;
case OP_RAVI_MULFIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) * ivalue(rc));
} break;
case OP_RAVI_MULIIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setivalue(ra, ivalue(rb) * ivalue(rc));
} break;
case OP_RAVI_MULIIRN: {
case OP_RAVI_MULIN: {
int c = INDEXK(GETARG_C(i)); /* do we need INDEXK here? */
TValue *rb = RB(i);
TValue *rb = RKB(i);
setivalue(ra, ivalue(rb) * c);
} break;
case OP_RAVI_MULIIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) * ivalue(rc));
} break;
case OP_RAVI_DIVFFKK: {
TValue *rb = KB(i);
TValue *rc = KC(i);
setfltvalue(ra, nvalue(rb) / nvalue(rc));
} break;
case OP_RAVI_DIVFFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, nvalue(rb) / nvalue(rc));
} break;
case OP_RAVI_DIVFFRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, nvalue(rb) / nvalue(rc));
} break;
case OP_RAVI_DIVFFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setfltvalue(ra, nvalue(rb) / nvalue(rc));
} break;
case OP_RAVI_DIVFIKK: {
TValue *rb = KB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVFIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, fltvalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVFIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, fltvalue(rb) / ivalue(rc));
case OP_RAVI_DIVFF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) / fltvalue(rc));
} break;
case OP_RAVI_DIVFIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_DIVFI: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, fltvalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVIFKK: {
TValue *rb = KB(i);
TValue *rc = KC(i);
setfltvalue(ra, ivalue(rb) / fltvalue(rc));
} break;
case OP_RAVI_DIVIFKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setfltvalue(ra, ivalue(rb) / fltvalue(rc));
} break;
case OP_RAVI_DIVIFRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setfltvalue(ra, ivalue(rb) / fltvalue(rc));
} break;
case OP_RAVI_DIVIFRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
case OP_RAVI_DIVIF: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, ivalue(rb) / fltvalue(rc));
} break;
case OP_RAVI_DIVIIKK: {
TValue *rb = KB(i);
TValue *rc = KC(i);
setivalue(ra, ivalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVIIKR: {
TValue *rb = KB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVIIRK: {
TValue *rb = RB(i);
TValue *rc = KC(i);
setivalue(ra, ivalue(rb) / ivalue(rc));
} break;
case OP_RAVI_DIVIIRR: {
TValue *rb = RB(i);
TValue *rc = RC(i);
setivalue(ra, ivalue(rb) / ivalue(rc));
case OP_RAVI_DIVII: {
TValue *rb = RKB(i);
TValue *rc = RKC(i);
setfltvalue(ra, (lua_Number)(ivalue(rb)) / (lua_Number)(ivalue(rc)));
} break;
case OP_RAVI_TOINT: {
@ -1474,22 +1354,22 @@ newframe: /* reentry point when frame changes (call/return) */
if (tointeger(ra, &j)) {
setivalue(ra, j);
} else
luaG_runerror(L, "TOINT: int type expected");
luaG_runerror(L, "integer expected");
} break;
case OP_RAVI_TOFLT: {
lua_Number j;
if (tonumber(ra, &j)) {
setfltvalue(ra, j);
} else
luaG_runerror(L, "TOFLT: double type expected");
luaG_runerror(L, "float expected");
} break;
case OP_RAVI_TOARRAYI: {
if (!ttistable(ra) || hvalue(ra)->ravi_array_type != RAVI_TARRAYINT)
luaG_runerror(L, "TOARRAYI: int[] expected");
luaG_runerror(L, "int[] expected");
} break;
case OP_RAVI_TOARRAYF: {
if (!ttistable(ra) || hvalue(ra)->ravi_array_type != RAVI_TARRAYFLT)
luaG_runerror(L, "TOARRAYF: double[] expected");
luaG_runerror(L, "double[] expected");
} break;
case OP_RAVI_MOVEI: {
TValue *rb = RB(i);
@ -1497,7 +1377,7 @@ newframe: /* reentry point when frame changes (call/return) */
if (tointeger(rb, &j)) {
setivalue(ra, j);
} else
luaG_runerror(L, "MOVEI: int type expected");
luaG_runerror(L, "integer expected");
} break;
case OP_RAVI_MOVEF: {
TValue *rb = RB(i);
@ -1505,21 +1385,21 @@ newframe: /* reentry point when frame changes (call/return) */
if (tonumber(rb, &j)) {
setfltvalue(ra, j);
} else
luaG_runerror(L, "MOVEF: double type expected");
luaG_runerror(L, "float expected");
} break;
case OP_RAVI_MOVEAI: {
TValue *rb = RB(i);
if (ttistable(rb) && hvalue(rb)->ravi_array_type == RAVI_TARRAYINT) {
setobjs2s(L, ra, rb);
} else
luaG_runerror(L, "MOVEAI: int[] expected");
luaG_runerror(L, "int[] expected");
} break;
case OP_RAVI_MOVEAF: {
TValue *rb = RB(i);
if (ttistable(rb) && hvalue(rb)->ravi_array_type == RAVI_TARRAYFLT) {
setobjs2s(L, ra, rb);
} else
luaG_runerror(L, "MOVEAF: double[] expected");
luaG_runerror(L, "double[] expected");
} break;
case OP_RAVI_GETTABLE_AI:
case OP_RAVI_GETTABLE_AF: {

Loading…
Cancel
Save