ScummVM API documentation
lopcodes.h
1 /*
2 ** Opcodes for Lua virtual machine
3 ** See Copyright Notice in lua.h
4 */
5 
6 #ifndef GRIM_LOPCODES_H
7 #define GRIM_LOPCODES_H
8 
9 namespace Grim {
10 
11 /*
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.
15 */
16 
17 typedef enum {
18 // name parm before after side effect
19 //-----------------------------------------------------------------------------
20  ENDCODE, // - - -
21 
22  PUSHNIL, // b - nil_0...nil_b
23  PUSHNIL0, // - - nil
24 
25  PUSHNUMBER, // b - (float)b
26  PUSHNUMBER0, // - - 0.0
27  PUSHNUMBER1, // - - 1.0
28  PUSHNUMBER2, // - - 2.0
29  PUSHNUMBERW, // w - (float)w
30 
31  PUSHCONSTANT, // b - CNST[b]
32  PUSHCONSTANT0, // - - CNST[0]
33  PUSHCONSTANT1, // - - CNST[1]
34  PUSHCONSTANT2, // - - CNST[2]
35  PUSHCONSTANT3, // - - CNST[3]
36  PUSHCONSTANT4, // - - CNST[4]
37  PUSHCONSTANT5, // - - CNST[5]
38  PUSHCONSTANT6, // - - CNST[6]
39  PUSHCONSTANT7, // - - CNST[7]
40  PUSHCONSTANTW, // w - CNST[w]
41 
42  PUSHUPVALUE, // b - Closure[b]
43  PUSHUPVALUE0, // - - Closure[0]
44  PUSHUPVALUE1, // - - Closure[1]
45 
46  PUSHLOCAL, // b - LOC[b]
47  PUSHLOCAL0, // - - LOC[0]
48  PUSHLOCAL1, // - - LOC[1]
49  PUSHLOCAL2, // - - LOC[2]
50  PUSHLOCAL3, // - - LOC[3]
51  PUSHLOCAL4, // - - LOC[4]
52  PUSHLOCAL5, // - - LOC[5]
53  PUSHLOCAL6, // - - LOC[6]
54  PUSHLOCAL7, // - - LOC[7]
55 
56  GETGLOBAL, // b - VAR[CNST[b]]
57  GETGLOBAL0, // - - VAR[CNST[0]]
58  GETGLOBAL1, // - - VAR[CNST[1]]
59  GETGLOBAL2, // - - VAR[CNST[2]]
60  GETGLOBAL3, // - - VAR[CNST[3]]
61  GETGLOBAL4, // - - VAR[CNST[4]]
62  GETGLOBAL5, // - - VAR[CNST[5]]
63  GETGLOBAL6, // - - VAR[CNST[6]]
64  GETGLOBAL7, // - - VAR[CNST[7]]
65  GETGLOBALW, // w - VAR[CNST[w]]
66 
67  GETTABLE, // - i t t[i]
68 
69  GETDOTTED, // b t t[CNST[b]]
70  GETDOTTED0, // - t t[CNST[0]]
71  GETDOTTED1, // - t t[CNST[1]]
72  GETDOTTED2, // - t t[CNST[2]]
73  GETDOTTED3, // - t t[CNST[3]]
74  GETDOTTED4, // - t t[CNST[4]]
75  GETDOTTED5, // - t t[CNST[5]]
76  GETDOTTED6, // - t t[CNST[6]]
77  GETDOTTED7, // - t t[CNST[7]]
78  GETDOTTEDW, // w t t[CNST[w]]
79 
80  PUSHSELF, // b t t t[CNST[b]]
81  PUSHSELF0, // - t t t[CNST[0]]
82  PUSHSELF1, // - t t t[CNST[1]]
83  PUSHSELF2, // - t t t[CNST[2]]
84  PUSHSELF3, // - t t t[CNST[3]]
85  PUSHSELF4, // - t t t[CNST[4]]
86  PUSHSELF5, // - t t t[CNST[5]]
87  PUSHSELF6, // - t t t[CNST[6]]
88  PUSHSELF7, // - t t t[CNST[7]]
89  PUSHSELFW, // w t t t[CNST[w]]
90 
91  CREATEARRAY, // b - newarray(size = b)
92  CREATEARRAY0, // - - newarray(size = 0)
93  CREATEARRAY1, // - - newarray(size = 1)
94  CREATEARRAYW, // w - newarray(size = w)
95 
96  SETLOCAL, // b x - LOC[b]=x
97  SETLOCAL0, // - x - LOC[0]=x
98  SETLOCAL1, // - x - LOC[1]=x
99  SETLOCAL2, // - x - LOC[2]=x
100  SETLOCAL3, // - x - LOC[3]=x
101  SETLOCAL4, // - x - LOC[4]=x
102  SETLOCAL5, // - x - LOC[5]=x
103  SETLOCAL6, // - x - LOC[6]=x
104  SETLOCAL7, // - x - LOC[7]=x
105 
106  SETGLOBAL, // b x - VAR[CNST[b]]=x
107  SETGLOBAL0, // - x - VAR[CNST[0]]=x
108  SETGLOBAL1, // - x - VAR[CNST[1]]=x
109  SETGLOBAL2, // - x - VAR[CNST[2]]=x
110  SETGLOBAL3, // - x - VAR[CNST[3]]=x
111  SETGLOBAL4, // - x - VAR[CNST[4]]=x
112  SETGLOBAL5, // - x - VAR[CNST[5]]=x
113  SETGLOBAL6, // - x - VAR[CNST[6]]=x
114  SETGLOBAL7, // - x - VAR[CNST[7]]=x
115  SETGLOBALW, // w x - VAR[CNST[w]]=x
116 
117  SETTABLE0, // - vci t - t[i]=v
118 
119  SETTABLE, // b v a_b...a_1 i t a_b...a_1 i t t[i]=v
120 
121  SETLIST, // b c v_c...v_1 t - t[i+b*FPF]=v_i
122  SETLIST0, // b v_b...v_1 t - t[i]=v_i
123  SETLISTW, // w c v_c...v_1 t - t[i+w*FPF]=v_i
124 
125  SETMAP, // b v_b k_b ...v_0 k_0 t t t[k_i]=v_i
126  SETMAP0, // - v_0 k_0 t t t[k_0]=v_0
127 
128  EQOP, // - y x (x==y)? 1 : nil
129  NEQOP, // - y x (x~=y)? 1 : nil
130  LTOP, // - y x (x<y)? 1 : nil
131  LEOP, // - y x (x<y)? 1 : nil
132  GTOP, // - y x (x>y)? 1 : nil
133  GEOP, // - y x (x>=y)? 1 : nil
134  ADDOP, // - y x x+y
135  SUBOP, // - y x x-y
136  MULTOP, // - y x x*y
137  DIVOP, // - y x x/y
138  POWOP, // - y x x^y
139  CONCOP, // - y x x..y
140  MINUSOP, // - x -x
141  NOTOP, // - x (x==nil)? 1 : nil
142 
143  ONTJMP, // b x (x!=nil)? x : - (x!=nil)? PC+=b
144  ONTJMPW, // w x (x!=nil)? x : - (x!=nil)? PC+=w
145  ONFJMP, // b x (x==nil)? x : - (x==nil)? PC+=b
146  ONFJMPW, // w x (x==nil)? x : - (x==nil)? PC+=w
147  JMP, // b - - PC+=b
148  JMPW, // w - - PC+=w
149  IFFJMP, // b x - (x==nil)? PC+=b
150  IFFJMPW, // w x - (x==nil)? PC+=w
151  IFTUPJMP, // b x - (x!=nil)? PC-=b
152  IFTUPJMPW, // w x - (x!=nil)? PC-=w
153  IFFUPJMP, // b x - (x==nil)? PC-=b
154  IFFUPJMPW, // w x - (x==nil)? PC-=w
155 
156  CLOSURE, // c f v_c...v_1 closure(f, v_c...v_1)
157  CLOSURE0, // - f closure(f)
158  CLOSURE1, // - f v closure(f, v)
159 
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)
163 
164  RETCODE, // b - -
165 
166  SETLINE, // b - - LINE=b
167  SETLINEW, // w - - LINE=w
168 
169  POP, // b - - TOP-=(b+1)
170  POP0, // - - - TOP-=1
171  POP1 // - - - TOP-=2
172 } OpCode;
173 
174 #define RFIELDS_PER_FLUSH 32 // records (SETMAP)
175 #define LFIELDS_PER_FLUSH 64 // lists (SETLIST)
176 #define ZEROVARARG 64
177 
178 } // end of namespace Grim
179 
180 #endif
Definition: actor.h:33