summaryrefslogtreecommitdiff
path: root/src/lopcodes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lopcodes.h')
-rw-r--r--src/lopcodes.h181
1 files changed, 181 insertions, 0 deletions
diff --git a/src/lopcodes.h b/src/lopcodes.h
new file mode 100644
index 00000000..27dded47
--- /dev/null
+++ b/src/lopcodes.h
@@ -0,0 +1,181 @@
+/*
+** $Id: lopcodes.h,v 1.18 1998/06/25 14:37:00 roberto Exp $
+** Opcodes for Lua virtual machine
+** See Copyright Notice in lua.h
+*/
+
+#ifndef lopcodes_h
+#define lopcodes_h
+
+
+/*
+** NOTICE: variants of the same opcode must be consecutive: First, those
+** with byte parameter, then with built-in parameters, and last with
+** word parameter.
+*/
+
+
+typedef enum {
+/* name parm before after side effect
+-----------------------------------------------------------------------------*/
+ENDCODE,/* - - - */
+
+PUSHNIL,/* b - nil_0...nil_b */
+PUSHNIL0,/* - - nil */
+
+PUSHNUMBER,/* b - (float)b */
+PUSHNUMBER0,/* - - 0.0 */
+PUSHNUMBER1,/* - - 1.0 */
+PUSHNUMBER2,/* - - 2.0 */
+PUSHNUMBERW,/* w - (float)w */
+
+PUSHCONSTANT,/* b - CNST[b] */
+PUSHCONSTANT0,/*- - CNST[0] */
+PUSHCONSTANT1,/*- - CNST[1] */
+PUSHCONSTANT2,/*- - CNST[2] */
+PUSHCONSTANT3,/*- - CNST[3] */
+PUSHCONSTANT4,/*- - CNST[4] */
+PUSHCONSTANT5,/*- - CNST[5] */
+PUSHCONSTANT6,/*- - CNST[6] */
+PUSHCONSTANT7,/*- - CNST[7] */
+PUSHCONSTANTW,/*w - CNST[w] */
+
+PUSHUPVALUE,/* b - Closure[b] */
+PUSHUPVALUE0,/* - - Closure[0] */
+PUSHUPVALUE1,/* - - Closure[1] */
+
+PUSHLOCAL,/* b - LOC[b] */
+PUSHLOCAL0,/* - - LOC[0] */
+PUSHLOCAL1,/* - - LOC[1] */
+PUSHLOCAL2,/* - - LOC[2] */
+PUSHLOCAL3,/* - - LOC[3] */
+PUSHLOCAL4,/* - - LOC[4] */
+PUSHLOCAL5,/* - - LOC[5] */
+PUSHLOCAL6,/* - - LOC[6] */
+PUSHLOCAL7,/* - - LOC[7] */
+
+GETGLOBAL,/* b - VAR[CNST[b]] */
+GETGLOBAL0,/* - - VAR[CNST[0]] */
+GETGLOBAL1,/* - - VAR[CNST[1]] */
+GETGLOBAL2,/* - - VAR[CNST[2]] */
+GETGLOBAL3,/* - - VAR[CNST[3]] */
+GETGLOBAL4,/* - - VAR[CNST[4]] */
+GETGLOBAL5,/* - - VAR[CNST[5]] */
+GETGLOBAL6,/* - - VAR[CNST[6]] */
+GETGLOBAL7,/* - - VAR[CNST[7]] */
+GETGLOBALW,/* w - VAR[CNST[w]] */
+
+GETTABLE,/* - i t t[i] */
+
+GETDOTTED,/* b t t[CNST[b]] */
+GETDOTTED0,/* - t t[CNST[0]] */
+GETDOTTED1,/* - t t[CNST[1]] */
+GETDOTTED2,/* - t t[CNST[2]] */
+GETDOTTED3,/* - t t[CNST[3]] */
+GETDOTTED4,/* - t t[CNST[4]] */
+GETDOTTED5,/* - t t[CNST[5]] */
+GETDOTTED6,/* - t t[CNST[6]] */
+GETDOTTED7,/* - t t[CNST[7]] */
+GETDOTTEDW,/* w t t[CNST[w]] */
+
+PUSHSELF,/* b t t t[CNST[b]] */
+PUSHSELF0,/* - t t t[CNST[0]] */
+PUSHSELF1,/* - t t t[CNST[1]] */
+PUSHSELF2,/* - t t t[CNST[2]] */
+PUSHSELF3,/* - t t t[CNST[3]] */
+PUSHSELF4,/* - t t t[CNST[4]] */
+PUSHSELF5,/* - t t t[CNST[5]] */
+PUSHSELF6,/* - t t t[CNST[6]] */
+PUSHSELF7,/* - t t t[CNST[7]] */
+PUSHSELFW,/* w t t t[CNST[w]] */
+
+CREATEARRAY,/* b - newarray(size = b) */
+CREATEARRAY0,/* - - newarray(size = 0) */
+CREATEARRAY1,/* - - newarray(size = 1) */
+CREATEARRAYW,/* w - newarray(size = w) */
+
+SETLOCAL,/* b x - LOC[b]=x */
+SETLOCAL0,/* - x - LOC[0]=x */
+SETLOCAL1,/* - x - LOC[1]=x */
+SETLOCAL2,/* - x - LOC[2]=x */
+SETLOCAL3,/* - x - LOC[3]=x */
+SETLOCAL4,/* - x - LOC[4]=x */
+SETLOCAL5,/* - x - LOC[5]=x */
+SETLOCAL6,/* - x - LOC[6]=x */
+SETLOCAL7,/* - x - LOC[7]=x */
+
+SETGLOBAL,/* b x - VAR[CNST[b]]=x */
+SETGLOBAL0,/* - x - VAR[CNST[0]]=x */
+SETGLOBAL1,/* - x - VAR[CNST[1]]=x */
+SETGLOBAL2,/* - x - VAR[CNST[2]]=x */
+SETGLOBAL3,/* - x - VAR[CNST[3]]=x */
+SETGLOBAL4,/* - x - VAR[CNST[4]]=x */
+SETGLOBAL5,/* - x - VAR[CNST[5]]=x */
+SETGLOBAL6,/* - x - VAR[CNST[6]]=x */
+SETGLOBAL7,/* - x - VAR[CNST[7]]=x */
+SETGLOBALW,/* w x - VAR[CNST[w]]=x */
+
+SETTABLE0,/* - v i t - t[i]=v */
+
+SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
+
+SETLIST,/* b c v_c...v_1 t - t[i+b*FPF]=v_i */
+SETLIST0,/* b v_b...v_1 t - t[i]=v_i */
+SETLISTW,/* w c v_c...v_1 t - t[i+w*FPF]=v_i */
+
+SETMAP,/* b v_b k_b ...v_0 k_0 t t t[k_i]=v_i */
+SETMAP0,/* - v_0 k_0 t t t[k_0]=v_0 */
+
+EQOP,/* - y x (x==y)? 1 : nil */
+NEQOP,/* - y x (x~=y)? 1 : nil */
+LTOP,/* - y x (x<y)? 1 : nil */
+LEOP,/* - y x (x<y)? 1 : nil */
+GTOP,/* - y x (x>y)? 1 : nil */
+GEOP,/* - y x (x>=y)? 1 : nil */
+ADDOP,/* - y x x+y */
+SUBOP,/* - y x x-y */
+MULTOP,/* - y x x*y */
+DIVOP,/* - y x x/y */
+POWOP,/* - y x x^y */
+CONCOP,/* - y x x..y */
+MINUSOP,/* - x -x */
+NOTOP,/* - x (x==nil)? 1 : nil */
+
+ONTJMP,/* b x (x!=nil)? x : - (x!=nil)? PC+=b */
+ONTJMPW,/* w x (x!=nil)? x : - (x!=nil)? PC+=w */
+ONFJMP,/* b x (x==nil)? x : - (x==nil)? PC+=b */
+ONFJMPW,/* w x (x==nil)? x : - (x==nil)? PC+=w */
+JMP,/* b - - PC+=b */
+JMPW,/* w - - PC+=w */
+IFFJMP,/* b x - (x==nil)? PC+=b */
+IFFJMPW,/* w x - (x==nil)? PC+=w */
+IFTUPJMP,/* b x - (x!=nil)? PC-=b */
+IFTUPJMPW,/* w x - (x!=nil)? PC-=w */
+IFFUPJMP,/* b x - (x==nil)? PC-=b */
+IFFUPJMPW,/* w x - (x==nil)? PC-=w */
+
+CLOSURE,/* b c v_c...v_1 closure(CNST[b], v_c...v_1) */
+CLOSUREW,/* w c v_b...v_1 closure(CNST[w], v_c...v_1) */
+
+CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */
+CALLFUNC0,/* b v_b...v_1 f - f(v1,...,v_b) */
+CALLFUNC1,/* b v_b...v_1 f r_1 f(v1,...,v_b) */
+
+RETCODE,/* b - - */
+
+SETLINE,/* b - - LINE=b */
+SETLINEW,/* w - - LINE=w */
+
+POP,/* b - - TOP-=(b+1) */
+POP0,/* - - - TOP-=1 */
+POP1/* - - - TOP-=2 */
+
+} OpCode;
+
+
+#define RFIELDS_PER_FLUSH 32 /* records (SETMAP) */
+#define LFIELDS_PER_FLUSH 64 /* lists (SETLIST) */
+
+#define ZEROVARARG 64
+
+#endif