Imported from ../lua-3.1.tar.gz.
[lua.git] / src / lopcodes.h
blob27dded473063a5243244b9ce1a0139595058c55b
1 /*
2 ** $Id: lopcodes.h,v 1.18 1998/06/25 14:37:00 roberto Exp $
3 ** Opcodes for Lua virtual machine
4 ** See Copyright Notice in lua.h
5 */
7 #ifndef lopcodes_h
8 #define lopcodes_h
12 ** NOTICE: variants of the same opcode must be consecutive: First, those
13 ** with byte parameter, then with built-in parameters, and last with
14 ** word parameter.
18 typedef enum {
19 /* name parm before after side effect
20 -----------------------------------------------------------------------------*/
21 ENDCODE,/* - - - */
23 PUSHNIL,/* b - nil_0...nil_b */
24 PUSHNIL0,/* - - nil */
26 PUSHNUMBER,/* b - (float)b */
27 PUSHNUMBER0,/* - - 0.0 */
28 PUSHNUMBER1,/* - - 1.0 */
29 PUSHNUMBER2,/* - - 2.0 */
30 PUSHNUMBERW,/* w - (float)w */
32 PUSHCONSTANT,/* b - CNST[b] */
33 PUSHCONSTANT0,/*- - CNST[0] */
34 PUSHCONSTANT1,/*- - CNST[1] */
35 PUSHCONSTANT2,/*- - CNST[2] */
36 PUSHCONSTANT3,/*- - CNST[3] */
37 PUSHCONSTANT4,/*- - CNST[4] */
38 PUSHCONSTANT5,/*- - CNST[5] */
39 PUSHCONSTANT6,/*- - CNST[6] */
40 PUSHCONSTANT7,/*- - CNST[7] */
41 PUSHCONSTANTW,/*w - CNST[w] */
43 PUSHUPVALUE,/* b - Closure[b] */
44 PUSHUPVALUE0,/* - - Closure[0] */
45 PUSHUPVALUE1,/* - - Closure[1] */
47 PUSHLOCAL,/* b - LOC[b] */
48 PUSHLOCAL0,/* - - LOC[0] */
49 PUSHLOCAL1,/* - - LOC[1] */
50 PUSHLOCAL2,/* - - LOC[2] */
51 PUSHLOCAL3,/* - - LOC[3] */
52 PUSHLOCAL4,/* - - LOC[4] */
53 PUSHLOCAL5,/* - - LOC[5] */
54 PUSHLOCAL6,/* - - LOC[6] */
55 PUSHLOCAL7,/* - - LOC[7] */
57 GETGLOBAL,/* b - VAR[CNST[b]] */
58 GETGLOBAL0,/* - - VAR[CNST[0]] */
59 GETGLOBAL1,/* - - VAR[CNST[1]] */
60 GETGLOBAL2,/* - - VAR[CNST[2]] */
61 GETGLOBAL3,/* - - VAR[CNST[3]] */
62 GETGLOBAL4,/* - - VAR[CNST[4]] */
63 GETGLOBAL5,/* - - VAR[CNST[5]] */
64 GETGLOBAL6,/* - - VAR[CNST[6]] */
65 GETGLOBAL7,/* - - VAR[CNST[7]] */
66 GETGLOBALW,/* w - VAR[CNST[w]] */
68 GETTABLE,/* - i t t[i] */
70 GETDOTTED,/* b t t[CNST[b]] */
71 GETDOTTED0,/* - t t[CNST[0]] */
72 GETDOTTED1,/* - t t[CNST[1]] */
73 GETDOTTED2,/* - t t[CNST[2]] */
74 GETDOTTED3,/* - t t[CNST[3]] */
75 GETDOTTED4,/* - t t[CNST[4]] */
76 GETDOTTED5,/* - t t[CNST[5]] */
77 GETDOTTED6,/* - t t[CNST[6]] */
78 GETDOTTED7,/* - t t[CNST[7]] */
79 GETDOTTEDW,/* w t t[CNST[w]] */
81 PUSHSELF,/* b t t t[CNST[b]] */
82 PUSHSELF0,/* - t t t[CNST[0]] */
83 PUSHSELF1,/* - t t t[CNST[1]] */
84 PUSHSELF2,/* - t t t[CNST[2]] */
85 PUSHSELF3,/* - t t t[CNST[3]] */
86 PUSHSELF4,/* - t t t[CNST[4]] */
87 PUSHSELF5,/* - t t t[CNST[5]] */
88 PUSHSELF6,/* - t t t[CNST[6]] */
89 PUSHSELF7,/* - t t t[CNST[7]] */
90 PUSHSELFW,/* w t t t[CNST[w]] */
92 CREATEARRAY,/* b - newarray(size = b) */
93 CREATEARRAY0,/* - - newarray(size = 0) */
94 CREATEARRAY1,/* - - newarray(size = 1) */
95 CREATEARRAYW,/* w - newarray(size = w) */
97 SETLOCAL,/* b x - LOC[b]=x */
98 SETLOCAL0,/* - x - LOC[0]=x */
99 SETLOCAL1,/* - x - LOC[1]=x */
100 SETLOCAL2,/* - x - LOC[2]=x */
101 SETLOCAL3,/* - x - LOC[3]=x */
102 SETLOCAL4,/* - x - LOC[4]=x */
103 SETLOCAL5,/* - x - LOC[5]=x */
104 SETLOCAL6,/* - x - LOC[6]=x */
105 SETLOCAL7,/* - x - LOC[7]=x */
107 SETGLOBAL,/* b x - VAR[CNST[b]]=x */
108 SETGLOBAL0,/* - x - VAR[CNST[0]]=x */
109 SETGLOBAL1,/* - x - VAR[CNST[1]]=x */
110 SETGLOBAL2,/* - x - VAR[CNST[2]]=x */
111 SETGLOBAL3,/* - x - VAR[CNST[3]]=x */
112 SETGLOBAL4,/* - x - VAR[CNST[4]]=x */
113 SETGLOBAL5,/* - x - VAR[CNST[5]]=x */
114 SETGLOBAL6,/* - x - VAR[CNST[6]]=x */
115 SETGLOBAL7,/* - x - VAR[CNST[7]]=x */
116 SETGLOBALW,/* w x - VAR[CNST[w]]=x */
118 SETTABLE0,/* - v i t - t[i]=v */
120 SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
122 SETLIST,/* b c v_c...v_1 t - t[i+b*FPF]=v_i */
123 SETLIST0,/* b v_b...v_1 t - t[i]=v_i */
124 SETLISTW,/* w c v_c...v_1 t - t[i+w*FPF]=v_i */
126 SETMAP,/* b v_b k_b ...v_0 k_0 t t t[k_i]=v_i */
127 SETMAP0,/* - v_0 k_0 t t t[k_0]=v_0 */
129 EQOP,/* - y x (x==y)? 1 : nil */
130 NEQOP,/* - y x (x~=y)? 1 : nil */
131 LTOP,/* - y x (x<y)? 1 : nil */
132 LEOP,/* - y x (x<y)? 1 : nil */
133 GTOP,/* - y x (x>y)? 1 : nil */
134 GEOP,/* - y x (x>=y)? 1 : nil */
135 ADDOP,/* - y x x+y */
136 SUBOP,/* - y x x-y */
137 MULTOP,/* - y x x*y */
138 DIVOP,/* - y x x/y */
139 POWOP,/* - y x x^y */
140 CONCOP,/* - y x x..y */
141 MINUSOP,/* - x -x */
142 NOTOP,/* - x (x==nil)? 1 : nil */
144 ONTJMP,/* b x (x!=nil)? x : - (x!=nil)? PC+=b */
145 ONTJMPW,/* w x (x!=nil)? x : - (x!=nil)? PC+=w */
146 ONFJMP,/* b x (x==nil)? x : - (x==nil)? PC+=b */
147 ONFJMPW,/* w x (x==nil)? x : - (x==nil)? PC+=w */
148 JMP,/* b - - PC+=b */
149 JMPW,/* w - - PC+=w */
150 IFFJMP,/* b x - (x==nil)? PC+=b */
151 IFFJMPW,/* w x - (x==nil)? PC+=w */
152 IFTUPJMP,/* b x - (x!=nil)? PC-=b */
153 IFTUPJMPW,/* w x - (x!=nil)? PC-=w */
154 IFFUPJMP,/* b x - (x==nil)? PC-=b */
155 IFFUPJMPW,/* w x - (x==nil)? PC-=w */
157 CLOSURE,/* b c v_c...v_1 closure(CNST[b], v_c...v_1) */
158 CLOSUREW,/* w c v_b...v_1 closure(CNST[w], v_c...v_1) */
160 CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */
161 CALLFUNC0,/* b v_b...v_1 f - f(v1,...,v_b) */
162 CALLFUNC1,/* b v_b...v_1 f r_1 f(v1,...,v_b) */
164 RETCODE,/* b - - */
166 SETLINE,/* b - - LINE=b */
167 SETLINEW,/* w - - LINE=w */
169 POP,/* b - - TOP-=(b+1) */
170 POP0,/* - - - TOP-=1 */
171 POP1/* - - - TOP-=2 */
173 } OpCode;
176 #define RFIELDS_PER_FLUSH 32 /* records (SETMAP) */
177 #define LFIELDS_PER_FLUSH 64 /* lists (SETLIST) */
179 #define ZEROVARARG 64
181 #endif