Keep the order left-right in shifts
Opcodes OP_SHLI-OP_SHRI and the cases for opcodes OP_SHL-OP_SHR were out of order.
This commit is contained in:
@@ -57,8 +57,8 @@ static const void *const disptab[NUM_OPCODES] = {
|
|||||||
&&L_OP_BANDK,
|
&&L_OP_BANDK,
|
||||||
&&L_OP_BORK,
|
&&L_OP_BORK,
|
||||||
&&L_OP_BXORK,
|
&&L_OP_BXORK,
|
||||||
&&L_OP_SHRI,
|
|
||||||
&&L_OP_SHLI,
|
&&L_OP_SHLI,
|
||||||
|
&&L_OP_SHRI,
|
||||||
&&L_OP_ADD,
|
&&L_OP_ADD,
|
||||||
&&L_OP_SUB,
|
&&L_OP_SUB,
|
||||||
&&L_OP_MUL,
|
&&L_OP_MUL,
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
|
|||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BANDK */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BANDK */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BORK */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BORK */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BXORK */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_BXORK */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SHRI */
|
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SHLI */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SHLI */
|
||||||
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SHRI */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_ADD */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_ADD */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SUB */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_SUB */
|
||||||
,opmode(0, 0, 0, 0, 1, iABC) /* OP_MUL */
|
,opmode(0, 0, 0, 0, 1, iABC) /* OP_MUL */
|
||||||
|
|||||||
@@ -272,8 +272,8 @@ OP_BANDK,/* A B C R[A] := R[B] & K[C]:integer */
|
|||||||
OP_BORK,/* A B C R[A] := R[B] | K[C]:integer */
|
OP_BORK,/* A B C R[A] := R[B] | K[C]:integer */
|
||||||
OP_BXORK,/* A B C R[A] := R[B] ~ K[C]:integer */
|
OP_BXORK,/* A B C R[A] := R[B] ~ K[C]:integer */
|
||||||
|
|
||||||
OP_SHRI,/* A B sC R[A] := R[B] >> sC */
|
|
||||||
OP_SHLI,/* A B sC R[A] := sC << R[B] */
|
OP_SHLI,/* A B sC R[A] := sC << R[B] */
|
||||||
|
OP_SHRI,/* A B sC R[A] := R[B] >> sC */
|
||||||
|
|
||||||
OP_ADD,/* A B C R[A] := R[B] + R[C] */
|
OP_ADD,/* A B C R[A] := R[B] + R[C] */
|
||||||
OP_SUB,/* A B C R[A] := R[B] - R[C] */
|
OP_SUB,/* A B C R[A] := R[B] - R[C] */
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ static const char *const opnames[] = {
|
|||||||
"BANDK",
|
"BANDK",
|
||||||
"BORK",
|
"BORK",
|
||||||
"BXORK",
|
"BXORK",
|
||||||
"SHRI",
|
|
||||||
"SHLI",
|
"SHLI",
|
||||||
|
"SHRI",
|
||||||
"ADD",
|
"ADD",
|
||||||
"SUB",
|
"SUB",
|
||||||
"MUL",
|
"MUL",
|
||||||
|
|||||||
28
lvm.c
28
lvm.c
@@ -1476,16 +1476,6 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
|
|||||||
op_bitwiseK(L, l_bxor);
|
op_bitwiseK(L, l_bxor);
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_SHRI) {
|
|
||||||
StkId ra = RA(i);
|
|
||||||
TValue *rb = vRB(i);
|
|
||||||
int ic = GETARG_sC(i);
|
|
||||||
lua_Integer ib;
|
|
||||||
if (tointegerns(rb, &ib)) {
|
|
||||||
pc++; setivalue(s2v(ra), luaV_shiftl(ib, -ic));
|
|
||||||
}
|
|
||||||
vmbreak;
|
|
||||||
}
|
|
||||||
vmcase(OP_SHLI) {
|
vmcase(OP_SHLI) {
|
||||||
StkId ra = RA(i);
|
StkId ra = RA(i);
|
||||||
TValue *rb = vRB(i);
|
TValue *rb = vRB(i);
|
||||||
@@ -1496,6 +1486,16 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
|
|||||||
}
|
}
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
|
vmcase(OP_SHRI) {
|
||||||
|
StkId ra = RA(i);
|
||||||
|
TValue *rb = vRB(i);
|
||||||
|
int ic = GETARG_sC(i);
|
||||||
|
lua_Integer ib;
|
||||||
|
if (tointegerns(rb, &ib)) {
|
||||||
|
pc++; setivalue(s2v(ra), luaV_shiftl(ib, -ic));
|
||||||
|
}
|
||||||
|
vmbreak;
|
||||||
|
}
|
||||||
vmcase(OP_ADD) {
|
vmcase(OP_ADD) {
|
||||||
op_arith(L, l_addi, luai_numadd);
|
op_arith(L, l_addi, luai_numadd);
|
||||||
vmbreak;
|
vmbreak;
|
||||||
@@ -1538,14 +1538,14 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
|
|||||||
op_bitwise(L, l_bxor);
|
op_bitwise(L, l_bxor);
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
vmcase(OP_SHR) {
|
|
||||||
op_bitwise(L, luaV_shiftr);
|
|
||||||
vmbreak;
|
|
||||||
}
|
|
||||||
vmcase(OP_SHL) {
|
vmcase(OP_SHL) {
|
||||||
op_bitwise(L, luaV_shiftl);
|
op_bitwise(L, luaV_shiftl);
|
||||||
vmbreak;
|
vmbreak;
|
||||||
}
|
}
|
||||||
|
vmcase(OP_SHR) {
|
||||||
|
op_bitwise(L, luaV_shiftr);
|
||||||
|
vmbreak;
|
||||||
|
}
|
||||||
vmcase(OP_MMBIN) {
|
vmcase(OP_MMBIN) {
|
||||||
StkId ra = RA(i);
|
StkId ra = RA(i);
|
||||||
Instruction pi = *(pc - 2); /* original arith. expression */
|
Instruction pi = *(pc - 2); /* original arith. expression */
|
||||||
|
|||||||
Reference in New Issue
Block a user