aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-10-01 17:05:34 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1997-10-01 17:05:34 -0300
commit28d47a0aaa646f8762085cc7fcf8953b62df0927 (patch)
treebe44656bb1a639f82c24a013f0f9d44de22f77e0 /lvm.c
parenteb617df2d87f8476e722ade7319998d7912a6edf (diff)
downloadlua-28d47a0aaa646f8762085cc7fcf8953b62df0927.tar.gz
lua-28d47a0aaa646f8762085cc7fcf8953b62df0927.tar.bz2
lua-28d47a0aaa646f8762085cc7fcf8953b62df0927.zip
all jumps have byte variants; WHILE optimization
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c64
1 files changed, 33 insertions, 31 deletions
diff --git a/lvm.c b/lvm.c
index 6051067e..5f9db8f9 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.5 1997/09/24 19:43:11 roberto Exp roberto $ 2** $Id: lvm.c,v 1.6 1997/09/26 15:02:26 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*/
@@ -452,8 +452,13 @@ StkId luaV_execute (Closure *cl, StkId base)
452 break; 452 break;
453 453
454 case CREATEARRAY: 454 case CREATEARRAY:
455 aux = next_word(pc); goto createarray;
456
457 case CREATEARRAYB:
458 aux = *pc++;
459 createarray:
455 luaC_checkGC(); 460 luaC_checkGC();
456 avalue(luaD_stack.top) = luaH_new(next_word(pc)); 461 avalue(luaD_stack.top) = luaH_new(aux);
457 ttype(luaD_stack.top) = LUA_T_ARRAY; 462 ttype(luaD_stack.top) = LUA_T_ARRAY;
458 luaD_stack.top++; 463 luaD_stack.top++;
459 break; 464 break;
@@ -565,54 +570,51 @@ StkId luaV_execute (Closure *cl, StkId base)
565 break; 570 break;
566 571
567 case ONTJMP: 572 case ONTJMP:
568 if (ttype(luaD_stack.top-1) != LUA_T_NIL) 573 if (ttype(luaD_stack.top-1) != LUA_T_NIL) pc += *pc;
569 pc += *pc; 574 else { pc++; luaD_stack.top--; }
570 else {
571 pc++;
572 luaD_stack.top--;
573 }
574 break; 575 break;
575 576
576 case ONFJMP: 577 case ONFJMP:
577 if (ttype(luaD_stack.top-1) == LUA_T_NIL) 578 if (ttype(luaD_stack.top-1) == LUA_T_NIL) pc += *pc;
578 pc += *pc; 579 else { pc++; luaD_stack.top--; }
579 else { 580 break;
580 pc++; 581
581 luaD_stack.top--; 582 case JMPB:
582 } 583 pc += *pc;
583 break; 584 break;
584 585
585 case JMP: 586 case JMP:
586 pc += get_word(pc); 587 pc += get_word(pc);
587 break; 588 break;
588 589
589 case UPJMPB: 590 case IFFJMPB:
590 pc -= *pc; 591 if (ttype(--luaD_stack.top) == LUA_T_NIL) pc += *pc;
592 else pc++;
591 break; 593 break;
592 594
593 case UPJMP: 595 case IFFJMP:
594 pc -= get_word(pc); 596 if (ttype(--luaD_stack.top) == LUA_T_NIL) pc += get_word(pc);
597 else skip_word(pc);
595 break; 598 break;
596 599
597 case IFFJMP: 600 case IFTUPJMPB:
598 if (ttype(--luaD_stack.top) == LUA_T_NIL) 601 if (ttype(--luaD_stack.top) != LUA_T_NIL) pc -= *pc;
599 pc += get_word(pc); 602 else pc++;
600 else 603 break;
601 skip_word(pc); 604
605 case IFTUPJMP:
606 if (ttype(--luaD_stack.top) != LUA_T_NIL) pc -= get_word(pc);
607 else skip_word(pc);
602 break; 608 break;
603 609
604 case IFFUPJMPB: 610 case IFFUPJMPB:
605 if (ttype(--luaD_stack.top) == LUA_T_NIL) 611 if (ttype(--luaD_stack.top) == LUA_T_NIL) pc -= *pc;
606 pc -= *pc; 612 else pc++;
607 else
608 pc++;
609 break; 613 break;
610 614
611 case IFFUPJMP: 615 case IFFUPJMP:
612 if (ttype(--luaD_stack.top) == LUA_T_NIL) 616 if (ttype(--luaD_stack.top) == LUA_T_NIL) pc -= get_word(pc);
613 pc -= get_word(pc); 617 else skip_word(pc);
614 else
615 skip_word(pc);
616 break; 618 break;
617 619
618 case CLOSURE: 620 case CLOSURE: