add OP_RAVI and extension 64-bit instructions

Dibyendu Majumdar 9 years ago
parent af16b26e71
commit 2395683d35

@ -35,13 +35,13 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */
/*
** size and position of opcode arguments.
*/
#define SIZE_C 8
#define SIZE_B 8
#define SIZE_C 9
#define SIZE_B 9
#define SIZE_Bx (SIZE_C + SIZE_B)
#define SIZE_A 8
#define SIZE_Ax (SIZE_C + SIZE_B + SIZE_A)
#define SIZE_OP 8
#define SIZE_OP 6
#define POS_OP 0
#define POS_A (POS_OP + SIZE_OP)
@ -113,6 +113,21 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */
#define SETARG_sBx(i,b) SETARG_Bx((i),cast(unsigned int, (b)+MAXARG_sBx))
#define RAVI_GET_OPCODE(i) (cast(OpCode, ((i)>>SIZE_OP) & MASK1(10,0)))
#define RAVI_SET_OPCODE(i,o) ((i) = (((i)&MASK0(16,0)) | \
(((cast(Instruction, o)<<SIZE_OP)|OP_RAVI)&MASK1(SIZE_OP,POS_OP))))
#define RAVI_GETARG_A(i) getarg(i, 16, 16)
#define RAVI_SETARG_A(i,v) setarg(i, v, 16, 16)
#define RAVI_GETARG_B(i) getarg(i, 0, 16)
#define RAVI_SETARG_B(i,v) setarg(i, v, 0, 16)
#define RAVI_GETARG_C(i) getarg(i, 16, 16)
#define RAVI_SETARG_C(i,v) setarg(i, v, 16, 16)
#define CREATE_ABC(o,a,b,c) ((cast(Instruction, o)<<POS_OP) \
| (cast(Instruction, a)<<POS_A) \
| (cast(Instruction, b)<<POS_B) \
@ -125,6 +140,12 @@ enum OpMode {iABC, iABx, iAsBx, iAx}; /* basic instruction format */
#define CREATE_Ax(o,a) ((cast(Instruction, o)<<POS_OP) \
| (cast(Instruction, a)<<POS_Ax))
#define RAVI_CREATE_A(o,a) ((cast(Instruction, a)<<16) \
| (cast(Instruction, o)))
#define RAVI_CREATE_BC(b,c) ((cast(Instruction, c)<<16) \
| (cast(Instruction, b)))
/*
** Macros to operate RK indices
@ -227,14 +248,162 @@ OP_SETLIST,/* A B C R(A)[(C-1)*FPF+i] := R(A+i), 1 <= i <= B */
OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx]) */
OP_VARARG,/* A B R(A), R(A+1), ..., R(A+B-2) = vararg */
OP_UNMF, /* A B R(A) := -R(B) floating point */
OP_EXTRAARG/* Ax extra (larger) argument for previous opcode */
} OpCode;
OP_EXTRAARG,/* Ax extra (larger) argument for previous opcode */
OP_RAVI, /* Extension point for RAVI */
OP_RAVI_UNMF, /* A B R(A) := -R(B) floating point */
OP_RAVI_UNMI, /* A B R(A) := -R(B) integer */
OP_RAVI_ADDFFKK,/* A B C R(A) := Kst(B) + Kst(C) */
OP_RAVI_ADDFFKR,/* A B C R(A) := Kst(B) + R(C) */
OP_RAVI_ADDFFRK,/* A B C R(A) := R(B) + Kst(C) */
OP_RAVI_ADDFFRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_ADDFIKK,/* A B C R(A) := Kst(B) + Kst(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_ADDFIRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_ADDIFKK,/* A B C R(A) := Kst(B) + Kst(C) */
OP_RAVI_ADDIFKR,/* A B C R(A) := Kst(B) + R(C) */
OP_RAVI_ADDIFRK,/* A B C R(A) := R(B) + Kst(C) */
OP_RAVI_ADDIFRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_ADDIIKK,/* A B C R(A) := Kst(B) + Kst(C) */
OP_RAVI_ADDIIKR,/* A B C R(A) := Kst(B) + R(C) */
OP_RAVI_ADDIIRK,/* A B C R(A) := R(B) + Kst(C) */
OP_RAVI_ADDIIRR,/* A B C R(A) := R(B) + R(C) */
OP_RAVI_SUBFFKK,/* A B C R(A) := Kst(B) - Kst(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_SUBFIKK,/* A B C R(A) := Kst(B) - Kst(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_SUBIFKK,/* A B C R(A) := Kst(B) - Kst(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_SUBIIKK,/* A B C R(A) := Kst(B) - Kst(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_MULFFKK,/* A B C R(A) := Kst(B) * Kst(C) */
OP_RAVI_MULFFKR,/* A B C R(A) := Kst(B) * R(C) */
OP_RAVI_MULFFRK,/* A B C R(A) := R(B) * Kst(C) */
OP_RAVI_MULFFRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_MULFIKK,/* A B C R(A) := Kst(B) * Kst(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_MULFIRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_MULIFKK,/* A B C R(A) := Kst(B) * Kst(C) */
OP_RAVI_MULIFKR,/* A B C R(A) := Kst(B) * R(C) */
OP_RAVI_MULIFRK,/* A B C R(A) := R(B) * Kst(C) */
OP_RAVI_MULIFRR,/* A B C R(A) := R(B) * R(C) */
OP_RAVI_MULIIKK,/* A B C R(A) := Kst(B) * Kst(C) */
OP_RAVI_MULIIKR,/* A B C R(A) := Kst(B) * R(C) */
OP_RAVI_MULIIRK,/* A B C R(A) := R(B) * Kst(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_EQFFKK,/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQFFKR,/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQFFRK,/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQFFRR,/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQFIKK,/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQFIKR,/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQFIRK,/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQFIRR,/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQIFKK,/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQIFKR,/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQIFRK,/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQIFRR,/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQIIKK,/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQIIKR,/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
OP_RAVI_EQIIRK,/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
OP_RAVI_EQIIRR,/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
OP_RAVI_LTFFKK,/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTFFKR,/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTFFRK,/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTFFRR,/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTFIKK,/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTFIKR,/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTFIRK,/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTFIRR,/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTIFKK,/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTIFKR,/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTIFRK,/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTIFRR,/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTIIKK,/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTIIKR,/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LTIIRK,/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
OP_RAVI_LTIIRR,/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
OP_RAVI_LEFFKK,/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEFFKR,/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEFFRK,/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEFFRR,/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEFIKK,/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEFIKR,/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEFIRK,/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEFIRR,/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEIFKK,/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEIFKR,/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEIFRK,/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEIFRR,/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEIIKK,/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEIIKR,/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_LEIIRK,/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
OP_RAVI_LEIIRR,/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
OP_RAVI_ARRAYGET_SIK,/* A B C R(A) := R(B)[Kst(C)] */
OP_RAVI_ARRAYGET_SIR,/* A B C R(A) := R(B)[R(C)] */
OP_RAVI_ARRAYGET_IIK,/* A B C R(A) := R(B)[Kst(C)] */
OP_RAVI_ARRAYGET_IIR,/* A B C R(A) := R(B)[R(C)] */
OP_RAVI_ARRAYGET_FIK,/* A B C R(A) := R(B)[Kst(C)] */
OP_RAVI_ARRAYGET_FIR,/* A B C R(A) := R(B)[R(C)] */
OP_RAVI_ARRAYGET_LIK,/* A B C R(A) := R(B)[Kst(C)] */
OP_RAVI_ARRAYGET_LIR,/* A B C R(A) := R(B)[R(C)] */
OP_RAVI_ARRAYSET_ISKK,/* A B C R(A)[Kst(B)] := Kst(C) */
OP_RAVI_ARRAYSET_ISKR,/* A B C R(A)[Kst(B)] := R(C) */
OP_RAVI_ARRAYSET_ISRK,/* A B C R(A)[R(B)] := Kst(C) */
OP_RAVI_ARRAYSET_ISRR,/* A B C R(A)[R(B)] := R(C) */
OP_RAVI_ARRAYSET_IIKK,/* A B C R(A)[Kst(B)] := Kst(C) */
OP_RAVI_ARRAYSET_IIKR,/* A B C R(A)[Kst(B)] := R(C) */
OP_RAVI_ARRAYSET_IIRK,/* A B C R(A)[R(B)] := Kst(C) */
OP_RAVI_ARRAYSET_IIRR,/* A B C R(A)[R(B)] := R(C) */
OP_RAVI_ARRAYSET_IFKK,/* A B C R(A)[Kst(B)] := Kst(C) */
OP_RAVI_ARRAYSET_IFKR,/* A B C R(A)[Kst(B)] := R(C) */
OP_RAVI_ARRAYSET_IFRK,/* A B C R(A)[R(B)] := Kst(C) */
OP_RAVI_ARRAYSET_IFRR,/* A B C R(A)[R(B)] := R(C) */
OP_RAVI_ARRAYSET_ILKK,/* A B C R(A)[Kst(B)] := Kst(C) */
OP_RAVI_ARRAYSET_ILKR,/* A B C R(A)[Kst(B)] := R(C) */
OP_RAVI_ARRAYSET_ILRK,/* A B C R(A)[R(B)] := Kst(C) */
OP_RAVI_ARRAYSET_ILRR,/* A B C R(A)[R(B)] := R(C) */
#define NUM_OPCODES (cast(int, OP_EXTRAARG) + 1)
} OpCode;
#define NUM_OPCODES (cast(int, OP_RAVI_ARRAYSET_ILRR) + 1)
/*===========================================================================
Notes:

@ -62,8 +62,158 @@ LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = {
"SETLIST",
"CLOSURE",
"VARARG",
"UNMF", /* new opcode - floating point unary minus*/
"EXTRAARG",
"OP_RAVI", /* Extension point for RAVI */
"OP_RAVI_UNMF", /* A B R(A) := -R(B) floating point */
"OP_RAVI_UNMI", /* A B R(A) := -R(B) integer */
"OP_RAVI_ADDFFKK",/* A B C R(A) := Kst(B) + Kst(C) */
"OP_RAVI_ADDFFKR",/* A B C R(A) := Kst(B) + R(C) */
"OP_RAVI_ADDFFRK",/* A B C R(A) := R(B) + Kst(C) */
"OP_RAVI_ADDFFRR",/* A B C R(A) := R(B) + R(C) */
"OP_RAVI_ADDFIKK",/* A B C R(A) := Kst(B) + Kst(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_ADDFIRR",/* A B C R(A) := R(B) + R(C) */
"OP_RAVI_ADDIFKK",/* A B C R(A) := Kst(B) + Kst(C) */
"OP_RAVI_ADDIFKR",/* A B C R(A) := Kst(B) + R(C) */
"OP_RAVI_ADDIFRK",/* A B C R(A) := R(B) + Kst(C) */
"OP_RAVI_ADDIFRR",/* A B C R(A) := R(B) + R(C) */
"OP_RAVI_ADDIIKK",/* A B C R(A) := Kst(B) + Kst(C) */
"OP_RAVI_ADDIIKR",/* A B C R(A) := Kst(B) + R(C) */
"OP_RAVI_ADDIIRK",/* A B C R(A) := R(B) + Kst(C) */
"OP_RAVI_ADDIIRR",/* A B C R(A) := R(B) + R(C) */
"OP_RAVI_SUBFFKK",/* A B C R(A) := Kst(B) - Kst(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_SUBFIKK",/* A B C R(A) := Kst(B) - Kst(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_SUBIFKK",/* A B C R(A) := Kst(B) - Kst(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_SUBIIKK",/* A B C R(A) := Kst(B) - Kst(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_MULFFKK",/* A B C R(A) := Kst(B) * Kst(C) */
"OP_RAVI_MULFFKR",/* A B C R(A) := Kst(B) * R(C) */
"OP_RAVI_MULFFRK",/* A B C R(A) := R(B) * Kst(C) */
"OP_RAVI_MULFFRR",/* A B C R(A) := R(B) * R(C) */
"OP_RAVI_MULFIKK",/* A B C R(A) := Kst(B) * Kst(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_MULFIRR",/* A B C R(A) := R(B) * R(C) */
"OP_RAVI_MULIFKK",/* A B C R(A) := Kst(B) * Kst(C) */
"OP_RAVI_MULIFKR",/* A B C R(A) := Kst(B) * R(C) */
"OP_RAVI_MULIFRK",/* A B C R(A) := R(B) * Kst(C) */
"OP_RAVI_MULIFRR",/* A B C R(A) := R(B) * R(C) */
"OP_RAVI_MULIIKK",/* A B C R(A) := Kst(B) * Kst(C) */
"OP_RAVI_MULIIKR",/* A B C R(A) := Kst(B) * R(C) */
"OP_RAVI_MULIIRK",/* A B C R(A) := R(B) * Kst(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_EQFFKK",/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQFFKR",/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQFFRK",/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQFFRR",/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQFIKK",/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQFIKR",/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQFIRK",/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQFIRR",/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQIFKK",/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQIFKR",/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQIFRK",/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQIFRR",/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQIIKK",/* A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQIIKR",/* A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_EQIIRK",/* A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
"OP_RAVI_EQIIRR",/* A B C if ((R(B) == R(C)) ~= A) then pc++ */
"OP_RAVI_LTFFKK",/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTFFKR",/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTFFRK",/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTFFRR",/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTFIKK",/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTFIKR",/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTFIRK",/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTFIRR",/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTIFKK",/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTIFKR",/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTIFRK",/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTIFRR",/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTIIKK",/* A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTIIKR",/* A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LTIIRK",/* A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
"OP_RAVI_LTIIRR",/* A B C if ((R(B) < R(C)) ~= A) then pc++ */
"OP_RAVI_LEFFKK",/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEFFKR",/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEFFRK",/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEFFRR",/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEFIKK",/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEFIKR",/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEFIRK",/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEFIRR",/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEIFKK",/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEIFKR",/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEIFRK",/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEIFRR",/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEIIKK",/* A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEIIKR",/* A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_LEIIRK",/* A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
"OP_RAVI_LEIIRR",/* A B C if ((R(B) <= R(C)) ~= A) then pc++ */
"OP_RAVI_ARRAYGET_SIK",/* A B C R(A) := R(B)[Kst(C)] */
"OP_RAVI_ARRAYGET_SIR",/* A B C R(A) := R(B)[R(C)] */
"OP_RAVI_ARRAYGET_IIK",/* A B C R(A) := R(B)[Kst(C)] */
"OP_RAVI_ARRAYGET_IIR",/* A B C R(A) := R(B)[R(C)] */
"OP_RAVI_ARRAYGET_FIK",/* A B C R(A) := R(B)[Kst(C)] */
"OP_RAVI_ARRAYGET_FIR",/* A B C R(A) := R(B)[R(C)] */
"OP_RAVI_ARRAYGET_LIK",/* A B C R(A) := R(B)[Kst(C)] */
"OP_RAVI_ARRAYGET_LIR",/* A B C R(A) := R(B)[R(C)] */
"OP_RAVI_ARRAYSET_ISKK",/* A B C R(A)[Kst(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_ISKR",/* A B C R(A)[Kst(B)] := R(C) */
"OP_RAVI_ARRAYSET_ISRK",/* A B C R(A)[R(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_ISRR",/* A B C R(A)[R(B)] := R(C) */
"OP_RAVI_ARRAYSET_IIKK",/* A B C R(A)[Kst(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_IIKR",/* A B C R(A)[Kst(B)] := R(C) */
"OP_RAVI_ARRAYSET_IIRK",/* A B C R(A)[R(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_IIRR",/* A B C R(A)[R(B)] := R(C) */
"OP_RAVI_ARRAYSET_IFKK",/* A B C R(A)[Kst(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_IFKR",/* A B C R(A)[Kst(B)] := R(C) */
"OP_RAVI_ARRAYSET_IFRK",/* A B C R(A)[R(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_IFRR",/* A B C R(A)[R(B)] := R(C) */
"OP_RAVI_ARRAYSET_ILKK",/* A B C R(A)[Kst(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_ILKR",/* A B C R(A)[Kst(B)] := R(C) */
"OP_RAVI_ARRAYSET_ILRK",/* A B C R(A)[R(B)] := Kst(C) */
"OP_RAVI_ARRAYSET_ILRR",/* A B C R(A)[R(B)] := R(C) */
NULL
};
@ -118,7 +268,157 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */
,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */
,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */
,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNMF */
,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */
,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_RAVI Extension point for RAVI */
,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, OpArgK, iABC) /*RAVI_ADDFFKK A B C R(A) := Kst(B) + Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_ADDFFKR A B C R(A) := Kst(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ADDFFRK A B C R(A) := R(B) + Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDFFRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_ADDFIKK A B C R(A) := Kst(B) + Kst(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, OpArgR, iABC) /*RAVI_ADDFIRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_ADDIFKK A B C R(A) := Kst(B) + Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_ADDIFKR A B C R(A) := Kst(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ADDIFRK A B C R(A) := R(B) + Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDIFRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_ADDIIKK A B C R(A) := Kst(B) + Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_ADDIIKR A B C R(A) := Kst(B) + R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ADDIIRK A B C R(A) := R(B) + Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ADDIIRR A B C R(A) := R(B) + R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_SUBFFKK A B C R(A) := Kst(B) - Kst(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, OpArgK, iABC) /*RAVI_SUBFIKK A B C R(A) := Kst(B) - Kst(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, OpArgK, iABC) /*RAVI_SUBIFKK A B C R(A) := Kst(B) - Kst(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, OpArgK, iABC) /*RAVI_SUBIIKK A B C R(A) := Kst(B) - Kst(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, OpArgK, iABC) /*RAVI_MULFFKK A B C R(A) := Kst(B) * Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_MULFFKR A B C R(A) := Kst(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_MULFFRK A B C R(A) := R(B) * Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_MULFFRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_MULFIKK A B C R(A) := Kst(B) * Kst(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, OpArgR, iABC) /*RAVI_MULFIRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_MULIFKK A B C R(A) := Kst(B) * Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_MULIFKR A B C R(A) := Kst(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_MULIFRK A B C R(A) := R(B) * Kst(C) */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_MULIFRR A B C R(A) := R(B) * R(C) */
,opmode(0, 1, OpArgK, OpArgK, iABC) /*RAVI_MULIIKK A B C R(A) := Kst(B) * Kst(C) */
,opmode(0, 1, OpArgK, OpArgR, iABC) /*RAVI_MULIIKR A B C R(A) := Kst(B) * R(C) */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_MULIIRK A B C R(A) := R(B) * Kst(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(1, 0, OpArgK, OpArgK, iABC) /*RAVI_EQFFKK A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_EQFFKR A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_EQFFRK A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_EQFFRR A B C if ((R(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_EQFIKK A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_EQFIKR A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_EQFIRK A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_EQFIRR A B C if ((R(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_EQIFKK A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_EQIFKR A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_EQIFRK A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_EQIFRR A B C if ((R(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_EQIIKK A B C if ((Kst(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_EQIIKR A B C if ((Kst(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_EQIIRK A B C if ((R(B) == Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_EQIIRR A B C if ((R(B) == R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LTFFKK A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LTFFKR A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LTFFRK A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LTFFRR A B C if ((R(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LTFIKK A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LTFIKR A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LTFIRK A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LTFIRR A B C if ((R(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LTIFKK A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LTIFKR A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LTIFRK A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LTIFRR A B C if ((R(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LTIIKK A B C if ((Kst(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LTIIKR A B C if ((Kst(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LTIIRK A B C if ((R(B) < Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LTIIRR A B C if ((R(B) < R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LEFFKK A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LEFFKR A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LEFFRK A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LEFFRR A B C if ((R(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LEFIKK A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LEFIKR A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LEFIRK A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LEFIRR A B C if ((R(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LEIFKK A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LEIFKR A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LEIFRK A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LEIFRR A B C if ((R(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgK, iABC) /*RAVI_LEIIKK A B C if ((Kst(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgK, OpArgR, iABC) /*RAVI_LEIIKR A B C if ((Kst(B) <= R(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgK, iABC) /*RAVI_LEIIRK A B C if ((R(B) <= Kst(C)) ~= A) then pc++ */
,opmode(1, 0, OpArgR, OpArgR, iABC) /*RAVI_LEIIRR A B C if ((R(B) <= R(C)) ~= A) then pc++ */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ARRAYGET_SIK A B C R(A) := R(B)[Kst(C)] */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ARRAYGET_SIR A B C R(A) := R(B)[R(C)] */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ARRAYGET_IIK A B C R(A) := R(B)[Kst(C)] */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ARRAYGET_IIR A B C R(A) := R(B)[R(C)] */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ARRAYGET_FIK A B C R(A) := R(B)[Kst(C)] */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ARRAYGET_FIR A B C R(A) := R(B)[R(C)] */
,opmode(0, 1, OpArgR, OpArgK, iABC) /*RAVI_ARRAYGET_LIK A B C R(A) := R(B)[Kst(C)] */
,opmode(0, 1, OpArgR, OpArgR, iABC) /*RAVI_ARRAYGET_LIR A B C R(A) := R(B)[R(C)] */
,opmode(0, 0, OpArgK, OpArgK, iABC) /*RAVI_ARRAYSET_ISKK A B C R(A)[Kst(B)] := Kst(C) */
,opmode(0, 0, OpArgK, OpArgR, iABC) /*RAVI_ARRAYSET_ISKR A B C R(A)[Kst(B)] := R(C) */
,opmode(0, 0, OpArgR, OpArgK, iABC) /*RAVI_ARRAYSET_ISRK A B C R(A)[R(B)] := Kst(C) */
,opmode(0, 0, OpArgR, OpArgR, iABC) /*RAVI_ARRAYSET_ISRR A B C R(A)[R(B)] := R(C) */
,opmode(0, 0, OpArgK, OpArgK, iABC) /*RAVI_ARRAYSET_IIKK A B C R(A)[Kst(B)] := Kst(C) */
,opmode(0, 0, OpArgK, OpArgR, iABC) /*RAVI_ARRAYSET_IIKR A B C R(A)[Kst(B)] := R(C) */
,opmode(0, 0, OpArgR, OpArgK, iABC) /*RAVI_ARRAYSET_IIRK A B C R(A)[R(B)] := Kst(C) */
,opmode(0, 0, OpArgR, OpArgR, iABC) /*RAVI_ARRAYSET_IIRR A B C R(A)[R(B)] := R(C) */
,opmode(0, 0, OpArgK, OpArgK, iABC) /*RAVI_ARRAYSET_IFKK A B C R(A)[Kst(B)] := Kst(C) */
,opmode(0, 0, OpArgK, OpArgR, iABC) /*RAVI_ARRAYSET_IFKR A B C R(A)[Kst(B)] := R(C) */
,opmode(0, 0, OpArgR, OpArgK, iABC) /*RAVI_ARRAYSET_IFRK A B C R(A)[R(B)] := Kst(C) */
,opmode(0, 0, OpArgR, OpArgR, iABC) /*RAVI_ARRAYSET_IFRR A B C R(A)[R(B)] := R(C) */
,opmode(0, 0, OpArgK, OpArgK, iABC) /*RAVI_ARRAYSET_ILKK A B C R(A)[Kst(B)] := Kst(C) */
,opmode(0, 0, OpArgK, OpArgR, iABC) /*RAVI_ARRAYSET_ILKR A B C R(A)[Kst(B)] := R(C) */
,opmode(0, 0, OpArgR, OpArgK, iABC) /*RAVI_ARRAYSET_ILRK A B C R(A)[R(B)] := Kst(C) */
,opmode(0, 0, OpArgR, OpArgR, iABC) /*RAVI_ARRAYSET_ILRR A B C R(A)[R(B)] := R(C) */
};

@ -707,10 +707,11 @@ newframe: /* reentry point when frame changes (call/return) */
Protect(luaG_traceexec(L));
}
/* WARNING: several calls may realloc the stack and invalidate 'ra' */
ra = RA(i);
OpCode op = GET_OPCODE(i);
ra = (op == OP_RAVI) ? NULL : RA(i);
lua_assert(base == ci->u.l.base);
lua_assert(base <= L->top && L->top < L->stack + L->stacksize);
switch (GET_OPCODE(i)) {
switch (op) {
case OP_MOVE: {
setobjs2s(L, ra, RB(i));
} break;
@ -901,12 +902,6 @@ newframe: /* reentry point when frame changes (call/return) */
}
else { Protect(luaT_trybinTM(L, rb, rc, ra, TM_POW)); }
} break;
case OP_UNMF: {
/* R(A) = -R(B), R(B) must be a float */
TValue *rb = RB(i);
lua_assert(ttisfloat(rb));
setfltvalue(ra, -fltvalue(rb));
} break;
case OP_UNM: {
TValue *rb = RB(i);
lua_Number nb;
@ -1178,6 +1173,28 @@ newframe: /* reentry point when frame changes (call/return) */
case OP_EXTRAARG: {
lua_assert(0);
} break;
case OP_RAVI: {
Instruction j = *(ci->u.l.savedpc++);
OpCode ravi_opcode = RAVI_GET_OPCODE(i);
int a = RAVI_GETARG_A(i);
int b = RAVI_GETARG_B(j);
int c = RAVI_GETARG_C(j);
ra = base+a;
printf("Instruction %s\n", luaP_opnames[ravi_opcode]);
switch (ravi_opcode-OP_RAVI) {
case OP_RAVI_UNMF - OP_RAVI: {
/* R(A) = -R(B), R(B) must be a float */
TValue *rb = base+b;
lua_assert(ttisfloat(rb));
setfltvalue(ra, -fltvalue(rb));
} break;
}
} break;
}
}
}

@ -87,17 +87,13 @@ static int test_unmf()
* return value must be register 1
*/
h->instructions[0] = cast(Instruction, (1 << 16)) | (cast(Instruction,OP_RAVI_UNMF)<<6) | cast(Instruction, OP_RAVI);
/* R(1) = -R(0) */
/* register 1 holds q */
/* register 0 holds p */
h->instructions[0] = CREATE_ABC(OP_UNMF, 1, 0, 0);
h->instructions[1] = RAVI_CREATE_BC(0, 0);
/* return register 1 (q) */
h->instructions[1] = CREATE_ABC(OP_RETURN, 1, 2, 0);
if (GETARG_A(h->instructions[0]) != 1)
return 1;
if (GETARG_B(h->instructions[0]) != 0)
return 1;
h->instructions[2] = CREATE_ABC(OP_RETURN, 1, 2, 0);
/* set register 0 (p) */
h->stack[1].tt_ = LUA_TNUMFLT;
@ -174,8 +170,8 @@ static int test_return0()
int main(const char *argv[])
{
int failures = 0;
failures += test_return0();
failures += test_return1();
// failures += test_return0();
// failures += test_return1();
failures += test_unmf();
return failures ? 1 : 0;

Loading…
Cancel
Save