aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-02-22 11:31:43 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-02-22 11:31:43 -0200
commit3bc925138ebcb534f863b3fb32b21eb8d52aa915 (patch)
tree6fcbc3bf92357a5e2e1651bc38c79b9bbea42a51 /lvm.c
parent39e1f079bdf045d64ad6f1b5da1eb48cc79c6c38 (diff)
downloadlua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.tar.gz
lua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.tar.bz2
lua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.zip
first version of code optimizer
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/lvm.c b/lvm.c
index f1c1ee83..79f6800e 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.86 2000/02/11 16:52:54 roberto Exp roberto $ 2** $Id: lvm.c,v 1.87 2000/02/14 16:51:08 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*/
@@ -376,12 +376,18 @@ StkId luaV_execute (lua_State *L, const Closure *cl, const TProtoFunc *tf,
376 top++; 376 top++;
377 break; 377 break;
378 378
379 case PUSHNUMBER: 379 case PUSHNUM:
380 ttype(top) = LUA_T_NUMBER; 380 ttype(top) = LUA_T_NUMBER;
381 nvalue(top) = tf->knum[GETARG_U(i)]; 381 nvalue(top) = tf->knum[GETARG_U(i)];
382 top++; 382 top++;
383 break; 383 break;
384 384
385 case PUSHNEGNUM:
386 ttype(top) = LUA_T_NUMBER;
387 nvalue(top) = -tf->knum[GETARG_U(i)];
388 top++;
389 break;
390
385 case PUSHUPVALUE: 391 case PUSHUPVALUE:
386 *top++ = cl->consts[GETARG_U(i)+1]; 392 *top++ = cl->consts[GETARG_U(i)+1];
387 break; 393 break;
@@ -524,6 +530,16 @@ StkId luaV_execute (lua_State *L, const Closure *cl, const TProtoFunc *tf,
524 top--; 530 top--;
525 break; 531 break;
526 532
533 case ADDI:
534 if (tonumber(top-1)) {
535 ttype(top) = LUA_T_NUMBER;
536 nvalue(top) = (real)GETARG_S(i);
537 call_arith(L, top+1, IM_ADD);
538 }
539 else
540 nvalue(top-1) += (real)GETARG_S(i);
541 break;
542
527 case SUBOP: 543 case SUBOP:
528 if (tonumber(top-1) || tonumber(top-2)) 544 if (tonumber(top-1) || tonumber(top-2))
529 call_arith(L, top, IM_SUB); 545 call_arith(L, top, IM_SUB);