aboutsummaryrefslogtreecommitdiff
path: root/ldebug.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-11 11:56:42 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2001-06-11 11:56:42 -0300
commit0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf (patch)
treef7c4e2b02380381e65fb19956ab7921bba33be97 /ldebug.c
parent79acf5ea6083fe4aebeb24740d25ddf35654944a (diff)
downloadlua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.tar.gz
lua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.tar.bz2
lua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.zip
details about opcode parameters
Diffstat (limited to 'ldebug.c')
-rw-r--r--ldebug.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/ldebug.c b/ldebug.c
index 62372fca..27494a4e 100644
--- a/ldebug.c
+++ b/ldebug.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldebug.c,v 1.80 2001/06/08 12:29:27 roberto Exp roberto $ 2** $Id: ldebug.c,v 1.81 2001/06/08 19:00:57 roberto Exp roberto $
3** Debug Interface 3** Debug Interface
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -349,6 +349,7 @@ static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) {
349 int a = GETARG_A(i); 349 int a = GETARG_A(i);
350 int b = 0; 350 int b = 0;
351 int c = 0; 351 int c = 0;
352 checkreg(pt, a);
352 switch (getOpMode(op)) { 353 switch (getOpMode(op)) {
353 case iABC: { 354 case iABC: {
354 b = GETARG_B(i); 355 b = GETARG_B(i);
@@ -370,7 +371,6 @@ static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) {
370 break; 371 break;
371 } 372 }
372 } 373 }
373 if (testOpMode(op, OpModeAreg)) checkreg(pt, a);
374 if (testOpMode(op, OpModesetA)) { 374 if (testOpMode(op, OpModesetA)) {
375 if (a == reg) last = pc; /* change register `a' */ 375 if (a == reg) last = pc; /* change register `a' */
376 } 376 }
@@ -414,20 +414,20 @@ static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) {
414 break; 414 break;
415 } 415 }
416 case OP_CALL: { 416 case OP_CALL: {
417 if (b == NO_REG) b = pt->maxstacksize; 417 if (b != NO_REG) {
418 checkreg(pt, a+b);
419 }
418 if (c == NO_REG) { 420 if (c == NO_REG) {
419 check(checkopenop(pt->code[pc+1])); 421 check(checkopenop(pt->code[pc+1]));
420 c = 1;
421 } 422 }
422 check(b > a); 423 else if (c != 0)
423 checkreg(pt, b-1); 424 checkreg(pt, a+c-1);
424 checkreg(pt, c-1);
425 if (reg >= a) last = pc; /* affect all registers above base */ 425 if (reg >= a) last = pc; /* affect all registers above base */
426 break; 426 break;
427 } 427 }
428 case OP_RETURN: { 428 case OP_RETURN: {
429 if (b == NO_REG) b = pt->maxstacksize; 429 if (b != NO_REG && b != 0)
430 checkreg(pt, b-1); 430 checkreg(pt, a+b-1);
431 break; 431 break;
432 } 432 }
433 case OP_FORPREP: 433 case OP_FORPREP:
@@ -566,49 +566,49 @@ void luaG_ordererror (lua_State *L, const TObject *p1, const TObject *p2) {
566 566
567 567
568#define opmode(t,a,b,c,sa,k,m) (((t)<<OpModeT) | \ 568#define opmode(t,a,b,c,sa,k,m) (((t)<<OpModeT) | \
569 ((a)<<OpModeAreg) | ((b)<<OpModeBreg) | ((c)<<OpModeCreg) | \ 569 ((b)<<OpModeBreg) | ((c)<<OpModeCreg) | \
570 ((sa)<<OpModesetA) | ((k)<<OpModeK) | (m)) 570 ((sa)<<OpModesetA) | ((k)<<OpModeK) | (m))
571 571
572 572
573const lu_byte luaG_opmodes[] = { 573const lu_byte luaG_opmodes[] = {
574/* T A B C sA K mode opcode */ 574/* T J B C sA K mode opcode */
575 opmode(0,1,1,0, 1,0,iABC), /* OP_MOVE */ 575 opmode(0,0,1,0, 1,0,iABC), /* OP_MOVE */
576 opmode(0,1,0,0, 1,1,iABc), /* OP_LOADK */ 576 opmode(0,0,0,0, 1,1,iABc), /* OP_LOADK */
577 opmode(0,1,0,0, 1,0,iAsBc), /* OP_LOADINT */ 577 opmode(0,0,0,0, 1,0,iAsBc), /* OP_LOADINT */
578 opmode(0,1,1,0, 1,0,iABC), /* OP_LOADNIL */ 578 opmode(0,0,1,0, 1,0,iABC), /* OP_LOADNIL */
579 opmode(0,1,0,0, 1,0,iABc), /* OP_LOADUPVAL */ 579 opmode(0,0,0,0, 1,0,iABc), /* OP_LOADUPVAL */
580 opmode(0,1,0,0, 1,1,iABc), /* OP_GETGLOBAL */ 580 opmode(0,0,0,0, 1,1,iABc), /* OP_GETGLOBAL */
581 opmode(0,1,1,1, 1,0,iABC), /* OP_GETTABLE */ 581 opmode(0,0,1,1, 1,0,iABC), /* OP_GETTABLE */
582 opmode(0,1,0,0, 0,1,iABc), /* OP_SETGLOBAL */ 582 opmode(0,0,0,0, 0,1,iABc), /* OP_SETGLOBAL */
583 opmode(0,1,1,1, 0,0,iABC), /* OP_SETTABLE */ 583 opmode(0,0,1,1, 0,0,iABC), /* OP_SETTABLE */
584 opmode(0,1,0,0, 1,0,iABc), /* OP_NEWTABLE */ 584 opmode(0,0,0,0, 1,0,iABc), /* OP_NEWTABLE */
585 opmode(0,1,1,1, 1,0,iABC), /* OP_SELF */ 585 opmode(0,0,1,1, 1,0,iABC), /* OP_SELF */
586 opmode(0,1,1,1, 1,0,iABC), /* OP_ADD */ 586 opmode(0,0,1,1, 1,0,iABC), /* OP_ADD */
587 opmode(0,1,1,1, 1,0,iABC), /* OP_SUB */ 587 opmode(0,0,1,1, 1,0,iABC), /* OP_SUB */
588 opmode(0,1,1,1, 1,0,iABC), /* OP_MUL */ 588 opmode(0,0,1,1, 1,0,iABC), /* OP_MUL */
589 opmode(0,1,1,1, 1,0,iABC), /* OP_DIV */ 589 opmode(0,0,1,1, 1,0,iABC), /* OP_DIV */
590 opmode(0,1,1,1, 1,0,iABC), /* OP_POW */ 590 opmode(0,0,1,1, 1,0,iABC), /* OP_POW */
591 opmode(0,1,1,0, 1,0,iABC), /* OP_UNM */ 591 opmode(0,0,1,0, 1,0,iABC), /* OP_UNM */
592 opmode(0,1,1,0, 1,0,iABC), /* OP_NOT */ 592 opmode(0,0,1,0, 1,0,iABC), /* OP_NOT */
593 opmode(0,1,1,1, 1,0,iABC), /* OP_CONCAT */ 593 opmode(0,0,1,1, 1,0,iABC), /* OP_CONCAT */
594 opmode(0,0,0,0, 0,0,iAsBc), /* OP_JMP */ 594 opmode(0,1,0,0, 0,0,iAsBc), /* OP_JMP */
595 opmode(0,0,0,0, 0,0,iAsBc), /* OP_CJMP */ 595 opmode(0,1,0,0, 0,0,iAsBc), /* OP_CJMP */
596 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTEQ */ 596 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTEQ */
597 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTNE */ 597 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTNE */
598 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTLT */ 598 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTLT */
599 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTLE */ 599 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTLE */
600 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTGT */ 600 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTGT */
601 opmode(1,0,1,1, 0,0,iABC), /* OP_TESTGE */ 601 opmode(1,0,0,1, 0,0,iABC), /* OP_TESTGE */
602 opmode(1,1,1,0, 1,0,iABC), /* OP_TESTT */ 602 opmode(1,0,1,0, 1,0,iABC), /* OP_TESTT */
603 opmode(1,1,1,0, 1,0,iABC), /* OP_TESTF */ 603 opmode(1,0,1,0, 1,0,iABC), /* OP_TESTF */
604 opmode(0,1,0,0, 1,0,iAsBc), /* OP_NILJMP */ 604 opmode(0,0,0,0, 1,0,iAsBc), /* OP_NILJMP */
605 opmode(0,1,0,0, 0,0,iABC), /* OP_CALL */ 605 opmode(0,0,0,0, 0,0,iABC), /* OP_CALL */
606 opmode(0,1,0,0, 0,0,iABC), /* OP_RETURN */ 606 opmode(0,0,0,0, 0,0,iABC), /* OP_RETURN */
607 opmode(0,1,0,0, 0,0,iAsBc), /* OP_FORPREP */ 607 opmode(0,0,0,0, 0,0,iAsBc), /* OP_FORPREP */
608 opmode(0,1,0,0, 0,0,iAsBc), /* OP_FORLOOP */ 608 opmode(0,0,0,0, 0,0,iAsBc), /* OP_FORLOOP */
609 opmode(0,1,0,0, 0,0,iAsBc), /* OP_TFORPREP */ 609 opmode(0,1,0,0, 0,0,iAsBc), /* OP_TFORPREP */
610 opmode(0,1,0,0, 0,0,iAsBc), /* OP_TFORLOOP */ 610 opmode(0,1,0,0, 0,0,iAsBc), /* OP_TFORLOOP */
611 opmode(0,1,0,0, 0,0,iABc), /* OP_SETLIST */ 611 opmode(0,0,0,0, 0,0,iABc), /* OP_SETLIST */
612 opmode(0,1,0,0, 0,0,iABc), /* OP_SETLIST0 */ 612 opmode(0,0,0,0, 0,0,iABc), /* OP_SETLIST0 */
613 opmode(0,1,0,0, 0,0,iABc) /* OP_CLOSURE */ 613 opmode(0,0,0,0, 0,0,iABc) /* OP_CLOSURE */
614}; 614};