diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-02-22 11:31:43 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-02-22 11:31:43 -0200 |
commit | 3bc925138ebcb534f863b3fb32b21eb8d52aa915 (patch) | |
tree | 6fcbc3bf92357a5e2e1651bc38c79b9bbea42a51 /lvm.c | |
parent | 39e1f079bdf045d64ad6f1b5da1eb48cc79c6c38 (diff) | |
download | lua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.tar.gz lua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.tar.bz2 lua-3bc925138ebcb534f863b3fb32b21eb8d52aa915.zip |
first version of code optimizer
Diffstat (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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); |