diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-10-13 20:12:04 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-10-13 20:12:04 -0200 |
commit | 7c261a13b572fb0f7449f6cdf2b495d0e5bd57d5 (patch) | |
tree | 026cbe3e25e1929f171d0f30ac7a588bfb29f573 /lopcodes.h | |
parent | 2bb94d9e22f1f8ab2c00c9296a3920bebe4862bd (diff) | |
download | lua-7c261a13b572fb0f7449f6cdf2b495d0e5bd57d5.tar.gz lua-7c261a13b572fb0f7449f6cdf2b495d0e5bd57d5.tar.bz2 lua-7c261a13b572fb0f7449f6cdf2b495d0e5bd57d5.zip |
more uniform treatment to opcode variants.
Diffstat (limited to 'lopcodes.h')
-rw-r--r-- | lopcodes.h | 117 |
1 files changed, 66 insertions, 51 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lopcodes.h,v 1.6 1997/10/01 20:05:34 roberto Exp roberto $ | 2 | ** $Id: lopcodes.h,v 1.7 1997/10/06 14:51:11 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 | */ |
@@ -9,9 +9,9 @@ | |||
9 | 9 | ||
10 | 10 | ||
11 | /* | 11 | /* |
12 | ** NOTICE: variants of the same opcode (like PUSH0, PUSHBYTE, PUSHWORD) must | 12 | ** NOTICE: variants of the same opcode must be consecutive: First, those |
13 | ** be consecutive: First, those with built-in parameters, then with byte | 13 | ** with byte parameter, then with built-in parameters, and last with |
14 | ** parameter and last with word parameter. | 14 | ** word parameter. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | 17 | ||
@@ -20,15 +20,16 @@ typedef enum { | |||
20 | -----------------------------------------------------------------------------*/ | 20 | -----------------------------------------------------------------------------*/ |
21 | ENDCODE,/* - - - */ | 21 | ENDCODE,/* - - - */ |
22 | 22 | ||
23 | PUSHNIL,/* - - nil */ | 23 | PUSHNIL,/* b - nil_0...nil_b */ |
24 | PUSHNILS,/* b - nil_1...nil_b */ | 24 | PUSHNIL0,/* - - nil */ |
25 | 25 | ||
26 | PUSH0,/* - - 0.0 */ | 26 | PUSHNUMBER,/* b - (float)b */ |
27 | PUSH1,/* - - 1.0 */ | 27 | PUSHNUMBER0,/* - - 0.0 */ |
28 | PUSH2,/* - - 2.0 */ | 28 | PUSHNUMBER1,/* - - 1.0 */ |
29 | PUSHBYTE,/* b - (float)b */ | 29 | PUSHNUMBER2,/* - - 2.0 */ |
30 | PUSHWORD,/* w - (float)w */ | 30 | PUSHNUMBERW,/* w - (float)w */ |
31 | 31 | ||
32 | PUSHCONSTANT,/* b - CNST[b] */ | ||
32 | PUSHCONSTANT0,/*- - CNST[0] */ | 33 | PUSHCONSTANT0,/*- - CNST[0] */ |
33 | PUSHCONSTANT1,/*- - CNST[1] */ | 34 | PUSHCONSTANT1,/*- - CNST[1] */ |
34 | PUSHCONSTANT2,/*- - CNST[2] */ | 35 | PUSHCONSTANT2,/*- - CNST[2] */ |
@@ -37,15 +38,13 @@ PUSHCONSTANT4,/*- - CNST[4] */ | |||
37 | PUSHCONSTANT5,/*- - CNST[5] */ | 38 | PUSHCONSTANT5,/*- - CNST[5] */ |
38 | PUSHCONSTANT6,/*- - CNST[6] */ | 39 | PUSHCONSTANT6,/*- - CNST[6] */ |
39 | PUSHCONSTANT7,/*- - CNST[7] */ | 40 | PUSHCONSTANT7,/*- - CNST[7] */ |
40 | PUSHCONSTANT8,/*- - CNST[8] */ | 41 | PUSHCONSTANTW,/*w - CNST[w] */ |
41 | PUSHCONSTANT9,/*- - CNST[9] */ | ||
42 | PUSHCONSTANTB,/*b - CNST[b] */ | ||
43 | PUSHCONSTANT,/* w - CNST[w] */ | ||
44 | 42 | ||
43 | PUSHUPVALUE,/* b - Closure[b] */ | ||
45 | PUSHUPVALUE0,/* - - Closure[0] */ | 44 | PUSHUPVALUE0,/* - - Closure[0] */ |
46 | PUSHUPVALUE1,/* - - Closure[1] */ | 45 | PUSHUPVALUE1,/* - - Closure[1] */ |
47 | PUSHUPVALUE,/* b - Closure[b] */ | ||
48 | 46 | ||
47 | PUSHLOCAL,/* b - LOC[b] */ | ||
49 | PUSHLOCAL0,/* - - LOC[0] */ | 48 | PUSHLOCAL0,/* - - LOC[0] */ |
50 | PUSHLOCAL1,/* - - LOC[1] */ | 49 | PUSHLOCAL1,/* - - LOC[1] */ |
51 | PUSHLOCAL2,/* - - LOC[2] */ | 50 | PUSHLOCAL2,/* - - LOC[2] */ |
@@ -54,10 +53,8 @@ PUSHLOCAL4,/* - - LOC[4] */ | |||
54 | PUSHLOCAL5,/* - - LOC[5] */ | 53 | PUSHLOCAL5,/* - - LOC[5] */ |
55 | PUSHLOCAL6,/* - - LOC[6] */ | 54 | PUSHLOCAL6,/* - - LOC[6] */ |
56 | PUSHLOCAL7,/* - - LOC[7] */ | 55 | PUSHLOCAL7,/* - - LOC[7] */ |
57 | PUSHLOCAL8,/* - - LOC[8] */ | ||
58 | PUSHLOCAL9,/* - - LOC[9] */ | ||
59 | PUSHLOCAL,/* b - LOC[b] */ | ||
60 | 56 | ||
57 | GETGLOBAL,/* b - VAR[CNST[b]] */ | ||
61 | GETGLOBAL0,/* - - VAR[CNST[0]] */ | 58 | GETGLOBAL0,/* - - VAR[CNST[0]] */ |
62 | GETGLOBAL1,/* - - VAR[CNST[1]] */ | 59 | GETGLOBAL1,/* - - VAR[CNST[1]] */ |
63 | GETGLOBAL2,/* - - VAR[CNST[2]] */ | 60 | GETGLOBAL2,/* - - VAR[CNST[2]] */ |
@@ -66,19 +63,19 @@ GETGLOBAL4,/* - - VAR[CNST[4]] */ | |||
66 | GETGLOBAL5,/* - - VAR[CNST[5]] */ | 63 | GETGLOBAL5,/* - - VAR[CNST[5]] */ |
67 | GETGLOBAL6,/* - - VAR[CNST[6]] */ | 64 | GETGLOBAL6,/* - - VAR[CNST[6]] */ |
68 | GETGLOBAL7,/* - - VAR[CNST[7]] */ | 65 | GETGLOBAL7,/* - - VAR[CNST[7]] */ |
69 | GETGLOBAL8,/* - - VAR[CNST[8]] */ | 66 | GETGLOBALW,/* w - VAR[CNST[w]] */ |
70 | GETGLOBAL9,/* - - VAR[CNST[9]] */ | ||
71 | GETGLOBALB,/* b - VAR[CNST[b]] */ | ||
72 | GETGLOBAL,/* w - VAR[CNST[w]] */ | ||
73 | 67 | ||
74 | GETTABLE,/* - i t t[i] */ | 68 | GETTABLE,/* - i t t[i] */ |
75 | 69 | ||
76 | PUSHSELFB,/* b t t t[CNST[b]] */ | 70 | PUSHSELF,/* b t t t[CNST[b]] */ |
77 | PUSHSELF,/* w t t t[CNST[w]] */ | 71 | PUSHSELFW,/* w t t t[CNST[w]] */ |
78 | 72 | ||
79 | CREATEARRAYB,/* b - newarray(size = b) */ | 73 | CREATEARRAY,/* b - newarray(size = b) */ |
80 | CREATEARRAY,/* w - newarray(size = w) */ | 74 | CREATEARRAY0,/* - - newarray(size = 0) */ |
75 | CREATEARRAY1,/* - - newarray(size = 1) */ | ||
76 | CREATEARRAYW,/* w - newarray(size = w) */ | ||
81 | 77 | ||
78 | SETLOCAL,/* b x - LOC[b]=x */ | ||
82 | SETLOCAL0,/* - x - LOC[0]=x */ | 79 | SETLOCAL0,/* - x - LOC[0]=x */ |
83 | SETLOCAL1,/* - x - LOC[1]=x */ | 80 | SETLOCAL1,/* - x - LOC[1]=x */ |
84 | SETLOCAL2,/* - x - LOC[2]=x */ | 81 | SETLOCAL2,/* - x - LOC[2]=x */ |
@@ -87,19 +84,28 @@ SETLOCAL4,/* - x - LOC[4]=x */ | |||
87 | SETLOCAL5,/* - x - LOC[5]=x */ | 84 | SETLOCAL5,/* - x - LOC[5]=x */ |
88 | SETLOCAL6,/* - x - LOC[6]=x */ | 85 | SETLOCAL6,/* - x - LOC[6]=x */ |
89 | SETLOCAL7,/* - x - LOC[7]=x */ | 86 | SETLOCAL7,/* - x - LOC[7]=x */ |
90 | SETLOCAL8,/* - x - LOC[8]=x */ | ||
91 | SETLOCAL9,/* - x - LOC[9]=x */ | ||
92 | SETLOCAL,/* b x - LOC[b]=x */ | ||
93 | 87 | ||
94 | SETGLOBALB,/* b x - VAR[CNST[b]]=x */ | 88 | SETGLOBAL,/* b x - VAR[CNST[b]]=x */ |
95 | SETGLOBAL,/* w x - VAR[CNST[w]]=x */ | 89 | SETGLOBAL0,/* - x - VAR[CNST[0]]=x */ |
90 | SETGLOBAL1,/* - x - VAR[CNST[1]]=x */ | ||
91 | SETGLOBAL2,/* - x - VAR[CNST[2]]=x */ | ||
92 | SETGLOBAL3,/* - x - VAR[CNST[3]]=x */ | ||
93 | SETGLOBAL4,/* - x - VAR[CNST[4]]=x */ | ||
94 | SETGLOBAL5,/* - x - VAR[CNST[5]]=x */ | ||
95 | SETGLOBAL6,/* - x - VAR[CNST[6]]=x */ | ||
96 | SETGLOBAL7,/* - x - VAR[CNST[7]]=x */ | ||
97 | SETGLOBALW,/* w x - VAR[CNST[w]]=x */ | ||
96 | 98 | ||
97 | SETTABLE0,/* - v i t - t[i]=v */ | 99 | SETTABLE0,/* - v i t - t[i]=v */ |
100 | |||
98 | SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */ | 101 | SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */ |
99 | 102 | ||
100 | SETLIST0,/* b v_b...v_1 t - t[i]=v_i */ | ||
101 | SETLIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */ | 103 | SETLIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */ |
102 | SETMAP,/* b v_b k_b ...v_1 k_1 t t t[k_i]=v_i */ | 104 | SETLIST0,/* b v_b...v_1 t - t[i]=v_i */ |
105 | SETLISTW,/* w c v_b...v_1 t - t[i+c*FPF]=v_i */ | ||
106 | |||
107 | SETMAP,/* b v_b k_b ...v_0 k_0 t t t[k_i]=v_i */ | ||
108 | SETMAP0,/* - v_0 k_0 t t t[k_0]=v_0 */ | ||
103 | 109 | ||
104 | EQOP,/* - y x (x==y)? 1 : nil */ | 110 | EQOP,/* - y x (x==y)? 1 : nil */ |
105 | NEQOP,/* - y x (x~=y)? 1 : nil */ | 111 | NEQOP,/* - y x (x~=y)? 1 : nil */ |
@@ -117,25 +123,34 @@ MINUSOP,/* - x -x */ | |||
117 | NOTOP,/* - x (x==nil)? 1 : nil */ | 123 | NOTOP,/* - x (x==nil)? 1 : nil */ |
118 | 124 | ||
119 | ONTJMP,/* b x (x!=nil)? x : - (x!=nil)? PC+=b */ | 125 | ONTJMP,/* b x (x!=nil)? x : - (x!=nil)? PC+=b */ |
126 | ONTJMPW,/* w x (x!=nil)? x : - (x!=nil)? PC+=w */ | ||
120 | ONFJMP,/* b x (x==nil)? x : - (x==nil)? PC+=b */ | 127 | ONFJMP,/* b x (x==nil)? x : - (x==nil)? PC+=b */ |
121 | JMPB,/* b - - PC+=b */ | 128 | ONFJMPW,/* w x (x==nil)? x : - (x==nil)? PC+=w */ |
122 | JMP,/* w - - PC+=w */ | 129 | JMP,/* b - - PC+=b */ |
123 | IFFJMPB,/* b x - (x==nil)? PC+=b */ | 130 | JMPW,/* w - - PC+=w */ |
124 | IFFJMP,/* w x - (x==nil)? PC+=w */ | 131 | IFFJMP,/* b x - (x==nil)? PC+=b */ |
125 | IFTUPJMPB,/* b x - (x!=nil)? PC-=b */ | 132 | IFFJMPW,/* w x - (x==nil)? PC+=w */ |
126 | IFTUPJMP,/* w x - (x!=nil)? PC-=w */ | 133 | IFTUPJMP,/* b x - (x!=nil)? PC-=b */ |
127 | IFFUPJMPB,/* b x - (x==nil)? PC-=b */ | 134 | IFTUPJMPW,/* w x - (x!=nil)? PC-=w */ |
128 | IFFUPJMP,/* w x - (x==nil)? PC-=w */ | 135 | IFFUPJMP,/* b x - (x==nil)? PC-=b */ |
129 | 136 | IFFUPJMPW,/* w x - (x==nil)? PC-=w */ | |
130 | CLOSUREB,/* b v_1...v_n c(CNST[b]) */ | 137 | |
131 | CLOSURE,/* w v_1...v_n c(CNST[w]) */ | 138 | CLOSURE,/* b v_1...v_n c(CNST[b]) */ |
132 | 139 | CLOSUREW,/* w v_1...v_n c(CNST[w]) */ | |
133 | CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */ | 140 | |
141 | CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */ | ||
142 | CALLFUNC0,/* b v_b...v_1 f - f(v1,...,v_b) */ | ||
143 | CALLFUNC1,/* b v_b...v_1 f r_1 f(v1,...,v_b) */ | ||
144 | |||
134 | RETCODE,/* b - - */ | 145 | RETCODE,/* b - - */ |
135 | SETLINE,/* w - - LINE=w */ | 146 | |
136 | POP1,/* - - - TOP-=1 */ | 147 | SETLINE,/* b - - LINE=b */ |
137 | POP2,/* - - - TOP-=2 */ | 148 | SETLINEW,/* w - - LINE=w */ |
138 | POPS,/* b - - TOP-=b */ | 149 | |
150 | POP,/* b - - TOP-=(b+1) */ | ||
151 | POP0,/* - - - TOP-=1 */ | ||
152 | POP1,/* - - - TOP-=2 */ | ||
153 | |||
139 | ARGS,/* b - - TOP=BASE+b */ | 154 | ARGS,/* b - - TOP=BASE+b */ |
140 | VARARGS/* b v_x...v_1 {v_1...v_x;n=x} TOP=BASE+b+1 */ | 155 | VARARGS/* b v_x...v_1 {v_1...v_x;n=x} TOP=BASE+b+1 */ |
141 | } OpCode; | 156 | } OpCode; |