diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-22 17:53:20 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-22 17:53:20 -0300 |
commit | d6c867ea507c5f6f9aee730bdcecee8f80a2feed (patch) | |
tree | 0eda337c0057614118656222e00966dec68a227f /lopcodes.h | |
parent | 2079cfe8faa34ebe435d1ef0526b04d3e57b5349 (diff) | |
download | lua-d6c867ea507c5f6f9aee730bdcecee8f80a2feed.tar.gz lua-d6c867ea507c5f6f9aee730bdcecee8f80a2feed.tar.bz2 lua-d6c867ea507c5f6f9aee730bdcecee8f80a2feed.zip |
better way to cope with opcode variants
Diffstat (limited to 'lopcodes.h')
-rw-r--r-- | lopcodes.h | 31 |
1 files changed, 27 insertions, 4 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lopcodes.h,v 1.2 1997/09/19 18:40:32 roberto Exp roberto $ | 2 | ** $Id: lopcodes.h,v 1.3 1997/09/19 21:17:52 roberto Exp roberto $ |
3 | ** Opcodes for Lua virtual machine | 3 | ** Opcodes for Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -8,6 +8,13 @@ | |||
8 | #define lopcodes_h | 8 | #define lopcodes_h |
9 | 9 | ||
10 | 10 | ||
11 | /* | ||
12 | ** NOTICE: variants of the same opcode (like PUSH0, PUSHBYTE, PUSHWORD) must | ||
13 | ** be consecutive: First, those with built-in parameters, then with byte | ||
14 | ** parameter and last with word parameter. | ||
15 | */ | ||
16 | |||
17 | |||
11 | typedef enum { | 18 | typedef enum { |
12 | /* name parm before after side effect | 19 | /* name parm before after side effect |
13 | -----------------------------------------------------------------------------*/ | 20 | -----------------------------------------------------------------------------*/ |
@@ -15,15 +22,19 @@ ENDCODE, | |||
15 | 22 | ||
16 | PUSHNIL,/* - nil */ | 23 | PUSHNIL,/* - nil */ |
17 | PUSHNILS,/* b - nil_1...nil_b */ | 24 | PUSHNILS,/* b - nil_1...nil_b */ |
25 | |||
18 | PUSH0,/* - 0.0 */ | 26 | PUSH0,/* - 0.0 */ |
19 | PUSH1,/* - 1.0 */ | 27 | PUSH1,/* - 1.0 */ |
20 | PUSH2,/* - 2.0 */ | 28 | PUSH2,/* - 2.0 */ |
21 | PUSHBYTE,/* b - (float)b */ | 29 | PUSHBYTE,/* b - (float)b */ |
22 | PUSHWORD,/* w - (float)w */ | 30 | PUSHWORD,/* w - (float)w */ |
31 | |||
23 | PUSHCONSTANTB,/*b - CNST[b] */ | 32 | PUSHCONSTANTB,/*b - CNST[b] */ |
24 | PUSHCONSTANT,/* w - CNST[w] */ | 33 | PUSHCONSTANT,/* w - CNST[w] */ |
34 | |||
25 | PUSHUPVALUE0, | 35 | PUSHUPVALUE0, |
26 | PUSHUPVALUE,/* b - Closure[b] */ | 36 | PUSHUPVALUE,/* b - Closure[b] */ |
37 | |||
27 | PUSHLOCAL0,/* - LOC[0] */ | 38 | PUSHLOCAL0,/* - LOC[0] */ |
28 | PUSHLOCAL1,/* - LOC[1] */ | 39 | PUSHLOCAL1,/* - LOC[1] */ |
29 | PUSHLOCAL2,/* - LOC[2] */ | 40 | PUSHLOCAL2,/* - LOC[2] */ |
@@ -35,10 +46,15 @@ PUSHLOCAL7,/* - LOC[7] */ | |||
35 | PUSHLOCAL8,/* - LOC[8] */ | 46 | PUSHLOCAL8,/* - LOC[8] */ |
36 | PUSHLOCAL9,/* - LOC[9] */ | 47 | PUSHLOCAL9,/* - LOC[9] */ |
37 | PUSHLOCAL,/* b - LOC[b] */ | 48 | PUSHLOCAL,/* b - LOC[b] */ |
38 | PUSHGLOBALB,/* b - VAR[CNST[b]] */ | 49 | |
39 | PUSHGLOBAL,/* w - VAR[CNST[w]] */ | 50 | GETGLOBALB,/* b - VAR[CNST[b]] */ |
51 | GETGLOBAL,/* w - VAR[CNST[w]] */ | ||
52 | |||
40 | GETTABLE,/* i t t[i] */ | 53 | GETTABLE,/* i t t[i] */ |
54 | |||
55 | PUSHSELFB,/* b t t t[CNST[b]] */ | ||
41 | PUSHSELF,/* w t t t[CNST[w]] */ | 56 | PUSHSELF,/* w t t t[CNST[w]] */ |
57 | |||
42 | CREATEARRAY,/* w - newarray(size = w) */ | 58 | CREATEARRAY,/* w - newarray(size = w) */ |
43 | 59 | ||
44 | SETLOCAL0,/* x - LOC[0]=x */ | 60 | SETLOCAL0,/* x - LOC[0]=x */ |
@@ -52,10 +68,13 @@ SETLOCAL7,/* x - LOC[7]=x */ | |||
52 | SETLOCAL8,/* x - LOC[8]=x */ | 68 | SETLOCAL8,/* x - LOC[8]=x */ |
53 | SETLOCAL9,/* x - LOC[9]=x */ | 69 | SETLOCAL9,/* x - LOC[9]=x */ |
54 | SETLOCAL,/* b x - LOC[b]=x */ | 70 | SETLOCAL,/* b x - LOC[b]=x */ |
71 | |||
55 | SETGLOBALB,/* b x - VAR[CNST[b]]=x */ | 72 | SETGLOBALB,/* b x - VAR[CNST[b]]=x */ |
56 | SETGLOBAL,/* w x - VAR[CNST[w]]=x */ | 73 | SETGLOBAL,/* w x - VAR[CNST[w]]=x */ |
74 | |||
57 | SETTABLE0,/* v i t - t[i]=v */ | 75 | SETTABLE0,/* v i t - t[i]=v */ |
58 | SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */ | 76 | SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */ |
77 | |||
59 | SETLIST0,/* b v_b...v_1 t - t[i]=v_i */ | 78 | SETLIST0,/* b v_b...v_1 t - t[i]=v_i */ |
60 | SETLIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */ | 79 | SETLIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */ |
61 | SETMAP,/* b v_b k_b ...v_1 k_1 t t t[k_i]=v_i */ | 80 | SETMAP,/* b v_b k_b ...v_1 k_1 t t t[k_i]=v_i */ |
@@ -82,10 +101,14 @@ UPJMP,/* w - - PC-=w */ | |||
82 | IFFJMP,/* w x - (x==nil)? PC+=w */ | 101 | IFFJMP,/* w x - (x==nil)? PC+=w */ |
83 | IFFUPJMP,/* w x - (x==nil)? PC-=w */ | 102 | IFFUPJMP,/* w x - (x==nil)? PC-=w */ |
84 | 103 | ||
85 | CLOSURE,/* f v_1...v_n c(f) */ | 104 | CLOSUREB,/* b v_1...v_n c(CNST[b]) */ |
105 | CLOSURE,/* w v_1...v_n c(CNST[w]) */ | ||
106 | |||
86 | CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */ | 107 | CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */ |
87 | RETCODE,/* b - - */ | 108 | RETCODE,/* b - - */ |
88 | SETLINE,/* w - - LINE=w */ | 109 | SETLINE,/* w - - LINE=w */ |
110 | POP1,/* - - TOP-=1 */ | ||
111 | POP2,/* - - TOP-=2 */ | ||
89 | POPS,/* b - - TOP-=b */ | 112 | POPS,/* b - - TOP-=b */ |
90 | ARGS,/* b - - TOP=BASE+b */ | 113 | ARGS,/* b - - TOP=BASE+b */ |
91 | VARARGS/* b v_x...v_1 {v_1...v_x;n=x} TOP=BASE+b+1 */ | 114 | VARARGS/* b v_x...v_1 {v_1...v_x;n=x} TOP=BASE+b+1 */ |