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