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
12 ** NOTICE: variants of the same opcode must be consecutive: First, those
13 ** with byte parameter, then with built-in parameters, and last with
19 /* name parm before after side effect
20 -----------------------------------------------------------------------------*/
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 */
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) */
166 SETLINE
,/* b - - LINE=b */
167 SETLINEW
,/* w - - LINE=w */
169 POP
,/* b - - TOP-=(b+1) */
170 POP0
,/* - - - TOP-=1 */
171 POP1
/* - - - TOP-=2 */
176 #define RFIELDS_PER_FLUSH 32 /* records (SETMAP) */
177 #define LFIELDS_PER_FLUSH 64 /* lists (SETLIST) */
179 #define ZEROVARARG 64