aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-12-04 15:41:30 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-12-04 15:41:30 -0200
commitc7ee7fe026aa2247377bdd7915089a8e0074de1a (patch)
tree6c76f673032ede69516fc1c19c98e0d9a26d778d /lvm.c
parent421e459684f7fdf483454d99c048b47783cb0611 (diff)
downloadlua-c7ee7fe026aa2247377bdd7915089a8e0074de1a.tar.gz
lua-c7ee7fe026aa2247377bdd7915089a8e0074de1a.tar.bz2
lua-c7ee7fe026aa2247377bdd7915089a8e0074de1a.zip
new opcodes OP_SHLI/OP_SHRI
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c32
1 files changed, 30 insertions, 2 deletions
diff --git a/lvm.c b/lvm.c
index 0ba78b3d..9cbba4a9 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.322 2017/11/29 16:57:36 roberto Exp roberto $ 2** $Id: lvm.c,v 2.323 2017/11/30 13:29:18 roberto Exp roberto $
3** Lua virtual machine 3** Lua virtual machine
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -687,7 +687,8 @@ void luaV_finishOp (lua_State *L) {
687 case OP_MODI: case OP_POWI: 687 case OP_MODI: case OP_POWI:
688 case OP_ADD: case OP_SUB: 688 case OP_ADD: case OP_SUB:
689 case OP_MUL: case OP_DIV: case OP_IDIV: 689 case OP_MUL: case OP_DIV: case OP_IDIV:
690 case OP_BAND: case OP_BOR: case OP_BXOR: case OP_SHL: case OP_SHR: 690 case OP_BAND: case OP_BOR: case OP_BXOR:
691 case OP_SHRI: case OP_SHL: case OP_SHR:
691 case OP_MOD: case OP_POW: 692 case OP_MOD: case OP_POW:
692 case OP_UNM: case OP_BNOT: case OP_LEN: 693 case OP_UNM: case OP_BNOT: case OP_LEN:
693 case OP_GETTABUP: case OP_GETTABLE: case OP_GETI: 694 case OP_GETTABUP: case OP_GETTABLE: case OP_GETI:
@@ -1214,6 +1215,33 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1214 Protect(luaT_trybinTM(L, rb, rc, ra, TM_BXOR)); 1215 Protect(luaT_trybinTM(L, rb, rc, ra, TM_BXOR));
1215 vmbreak; 1216 vmbreak;
1216 } 1217 }
1218 vmcase(OP_SHRI) {
1219 TValue *rb = vRB(i);
1220 int ic = GETARG_sC(i);
1221 lua_Integer ib;
1222 if (tointegerns(rb, &ib)) {
1223 setivalue(vra, luaV_shiftl(ib, -ic));
1224 }
1225 else {
1226 TMS ev = TM_SHR;
1227 if (TESTARG_k(i)) {
1228 ic = -ic; ev = TM_SHL;
1229 }
1230 Protect(luaT_trybiniTM(L, rb, ic, 0, ra, ev));
1231 }
1232 vmbreak;
1233 }
1234 vmcase(OP_SHLI) {
1235 TValue *rb = vRB(i);
1236 int ic = GETARG_sC(i);
1237 lua_Integer ib;
1238 if (tointegerns(rb, &ib)) {
1239 setivalue(vra, luaV_shiftl(ic, ib));
1240 }
1241 else
1242 Protect(luaT_trybiniTM(L, rb, ic, 1, ra, TM_SHL));
1243 vmbreak;
1244 }
1217 vmcase(OP_SHL) { 1245 vmcase(OP_SHL) {
1218 TValue *rb = vRB(i); 1246 TValue *rb = vRB(i);
1219 TValue *rc = vRC(i); 1247 TValue *rc = vRC(i);