aboutsummaryrefslogtreecommitdiff
path: root/lopcodes.h
diff options
context:
space:
mode:
Diffstat (limited to 'lopcodes.h')
-rw-r--r--lopcodes.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/lopcodes.h b/lopcodes.h
new file mode 100644
index 00000000..b916092d
--- /dev/null
+++ b/lopcodes.h
@@ -0,0 +1,97 @@
1/*
2** $Id: $
3** Opcodes for Lua virtual machine
4** See Copyright Notice in lua.h
5*/
6
7#ifndef lopcodes_h
8#define lopcodes_h
9
10
11typedef enum {
12/* name parm before after side effect
13-----------------------------------------------------------------------------*/
14ENDCODE,
15
16PUSHNIL,/* - nil */
17PUSHNILS,/* b - nil_1...nil_b */
18PUSH0,/* - 0.0 */
19PUSH1,/* - 1.0 */
20PUSH2,/* - 2.0 */
21PUSHBYTE,/* b - (float)b */
22PUSHWORD,/* w - (float)w */
23PUSHCONSTANTB,/*b - CNST[b] */
24PUSHCONSTANT,/* w - CNST[w] */
25PUSHUPVALUE0,
26PUSHUPVALUE,/* b - Closure[b] */
27PUSHLOCAL0,/* - LOC[0] */
28PUSHLOCAL1,/* - LOC[1] */
29PUSHLOCAL2,/* - LOC[2] */
30PUSHLOCAL3,/* - LOC[3] */
31PUSHLOCAL4,/* - LOC[4] */
32PUSHLOCAL5,/* - LOC[5] */
33PUSHLOCAL6,/* - LOC[6] */
34PUSHLOCAL7,/* - LOC[7] */
35PUSHLOCAL8,/* - LOC[8] */
36PUSHLOCAL9,/* - LOC[9] */
37PUSHLOCAL,/* b - LOC[b] */
38PUSHGLOBAL,/* w - VAR[w] */
39PUSHTABLE,/* i t t[i] */
40PUSHSELF,/* w t t t[CNST[w]] */
41CREATEARRAY,/* w - newarray(size = w) */
42
43SETLOCAL0,/* x - LOC[0]=x */
44SETLOCAL1,/* x - LOC[1]=x */
45SETLOCAL2,/* x - LOC[2]=x */
46SETLOCAL3,/* x - LOC[3]=x */
47SETLOCAL4,/* x - LOC[4]=x */
48SETLOCAL5,/* x - LOC[5]=x */
49SETLOCAL6,/* x - LOC[6]=x */
50SETLOCAL7,/* x - LOC[7]=x */
51SETLOCAL8,/* x - LOC[8]=x */
52SETLOCAL9,/* x - LOC[9]=x */
53SETLOCAL,/* b x - LOC[b]=x */
54SETGLOBAL,/* w x - VAR[w]=x */
55SETTABLE0,/* v i t - t[i]=v */
56SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
57SETLIST0,/* b v_b...v_1 t - t[i]=v_i */
58SETLIST,/* b c v_b...v_1 t - t[i+c*FPF]=v_i */
59SETMAP,/* b v_b k_b ...v_1 k_1 t t t[k_i]=v_i */
60
61EQOP,/* y x (x==y)? 1 : nil */
62NEQOP,/* y x (x~=y)? 1 : nil */
63LTOP,/* y x (x<y)? 1 : nil */
64LEOP,/* y x (x<y)? 1 : nil */
65GTOP,/* y x (x>y)? 1 : nil */
66GEOP,/* y x (x>=y)? 1 : nil */
67ADDOP,/* y x x+y */
68SUBOP,/* y x x-y */
69MULTOP,/* y x x*y */
70DIVOP,/* y x x/y */
71POWOP,/* y x x^y */
72CONCOP,/* y x x..y */
73MINUSOP,/* x -x */
74NOTOP,/* x (x==nil)? 1 : nil */
75
76ONTJMP,/* w x (x!=nil)? x : - (x!=nil)? PC+=w */
77ONFJMP,/* w x (x==nil)? x : - (x==nil)? PC+=w */
78JMP,/* w - - PC+=w */
79UPJMP,/* w - - PC-=w */
80IFFJMP,/* w x - (x==nil)? PC+=w */
81IFFUPJMP,/* w x - (x==nil)? PC-=w */
82
83CLOSURE,/* f v_1...v_n c(f) */
84CALLFUNC,/* b c v_b...v_1 f r_c...r_1 f(v1,...,v_b) */
85RETCODE,/* b - - */
86SETLINE,/* w - - LINE=w */
87POPS,/* b - - TOP-=b */
88ARGS,/* b - - TOP=BASE+b */
89VARARGS/* b v_x...v_1 {v_1...v_x;n=x} TOP=BASE+b+1 */
90} OpCode;
91
92
93#define RFIELDS_PER_FLUSH 32 /* records (SETMAP) */
94#define LFIELDS_PER_FLUSH 64 /* lists (SETLIST) */
95
96
97#endif