Browse Source

Opcodes for Lua virtual machine

Roberto Ierusalimschy 28 years ago
parent
commit
d985dc0629
2 changed files with 97 additions and 167 deletions
  1. 97 0
      lopcodes.h
  2. 0 167
      opcode.h

+ 97 - 0
lopcodes.h

@@ -0,0 +1,97 @@
+/*
+** $Id: $
+** Opcodes for Lua virtual machine
+** See Copyright Notice in lua.h
+*/
+
+#ifndef lopcodes_h
+#define lopcodes_h
+
+
+typedef enum {
+/* name          parm    before          after           side effect
+-----------------------------------------------------------------------------*/
+ENDCODE,
+
+PUSHNIL,/*		-		nil  */
+PUSHNILS,/*	b	-		nil_1...nil_b  */
+PUSH0,/*		-		0.0  */
+PUSH1,/*		-		1.0  */
+PUSH2,/*		-		2.0  */
+PUSHBYTE,/*	b	-		(float)b  */
+PUSHWORD,/*	w	-		(float)w  */
+PUSHCONSTANTB,/*b	-		CNST[b] */
+PUSHCONSTANT,/* w	-		CNST[w] */
+PUSHUPVALUE0,
+PUSHUPVALUE,/*	b	-		Closure[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]  */
+PUSHLOCAL8,/*		-		LOC[8]  */
+PUSHLOCAL9,/*		-		LOC[9]  */
+PUSHLOCAL,/*	b	-		LOC[b]  */
+PUSHGLOBAL,/*	w	-		VAR[w]  */
+PUSHTABLE,/*		i t		t[i]  */
+PUSHSELF,/*	w	t		t t[CNST[w]]  */
+CREATEARRAY,/*	w	-		newarray(size = w)  */
+
+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  */
+SETLOCAL8,/*		x		-		LOC[8]=x  */
+SETLOCAL9,/*		x		-		LOC[9]=x  */
+SETLOCAL,/*	b	x		-		LOC[b]=x  */
+SETGLOBAL,/*	w	x		-		VAR[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  */
+SETLIST0,/*	b	v_b...v_1 t	-		t[i]=v_i  */
+SETLIST,/*	b c	v_b...v_1 t	-		t[i+c*FPF]=v_i  */
+SETMAP,/*	b	v_b k_b ...v_1 k_1 t	t	t[k_i]=v_i  */
+
+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,/*	w	x		(x!=nil)? x : -	(x!=nil)? PC+=w  */
+ONFJMP,/*	w	x		(x==nil)? x : -	(x==nil)? PC+=w  */
+JMP,/*		w	-		-		PC+=w  */
+UPJMP,/*	w	-		-		PC-=w  */
+IFFJMP,/*	w	x		-		(x==nil)? PC+=w  */
+IFFUPJMP,/*	w	x		-		(x==nil)? PC-=w  */
+
+CLOSURE,/*		f v_1...v_n	c(f) */
+CALLFUNC,/*	b c	v_b...v_1 f	r_c...r_1	f(v1,...,v_b)  */
+RETCODE,/*	b	-		-  */
+SETLINE,/*	w	-		-		LINE=w  */
+POPS,/*		b	-		-		TOP-=b  */
+ARGS,/*		b	-		-		TOP=BASE+b  */
+VARARGS/*	b	v_x...v_1	{v_1...v_x;n=x}	TOP=BASE+b+1  */
+} OpCode;
+
+
+#define RFIELDS_PER_FLUSH 32	/* records (SETMAP) */
+#define LFIELDS_PER_FLUSH 64    /* lists (SETLIST) */
+
+
+#endif

+ 0 - 167
opcode.h

@@ -1,167 +0,0 @@
-/*
-** TeCGraf - PUC-Rio
-** $Id: opcode.h,v 3.37 1997/07/30 22:00:50 roberto Exp roberto $
-*/
-
-#ifndef opcode_h
-#define opcode_h
-
-#include "lua.h"
-#include "types.h"
-#include "tree.h"
-#include "func.h"
-
-
-#define FIELDS_PER_FLUSH 40
-
-/*
-* WARNING: if you change the order of this enumeration,
-* grep "ORDER LUA_T"
-*/
-typedef enum
-{
- LUA_T_NIL      = -9,
- LUA_T_NUMBER   = -8,
- LUA_T_STRING   = -7,
- LUA_T_ARRAY    = -6,  /* array==table */
- LUA_T_FUNCTION = -5,
- LUA_T_CFUNCTION= -4,
- LUA_T_MARK     = -3,
- LUA_T_CMARK    = -2,
- LUA_T_LINE     = -1,
- LUA_T_USERDATA = 0
-} lua_Type;
-
-#define NUM_TYPES 10
-
-
-extern char *luaI_typenames[];
-
-typedef enum {
-/* name          parm    before          after           side effect
------------------------------------------------------------------------------*/
-
-PUSHNIL,/*		-		nil  */
-PUSH0,/*		-		0.0  */
-PUSH1,/*		-		1.0  */
-PUSH2,/*		-		2.0  */
-PUSHBYTE,/*	b	-		(float)b  */
-PUSHWORD,/*	w	-		(float)w  */
-PUSHLOCAL0,/*		-		LOC[0]  */
-PUSHLOCAL1,/*		-		LOC[1]  */
-PUSHLOCAL2,/*		-		LOC[2]  */
-PUSHLOCAL3,/*		-		LOC[3]  */
-PUSHLOCAL4,/*		-		LOC[4]  */
-PUSHLOCAL5,/*		-		LOC[5]  */
-PUSHLOCAL6,/*		-		LOC[6]  */
-PUSHLOCAL7,/*		-		LOC[7]  */
-PUSHLOCAL8,/*		-		LOC[8]  */
-PUSHLOCAL9,/*		-		LOC[9]  */
-PUSHLOCAL,/*	b	-		LOC[b]  */
-PUSHGLOBAL,/*	w	-		VAR[w]  */
-PUSHINDEXED,/*		i t		t[i]  */
-PUSHSELF,/*	w	t		t t[CNST[w]]  */
-STORELOCAL0,/*		x		-		LOC[0]=x  */
-STORELOCAL1,/*		x		-		LOC[1]=x  */
-STORELOCAL2,/*		x		-		LOC[2]=x  */
-STORELOCAL3,/*		x		-		LOC[3]=x  */
-STORELOCAL4,/*		x		-		LOC[4]=x  */
-STORELOCAL5,/*		x		-		LOC[5]=x  */
-STORELOCAL6,/*		x		-		LOC[6]=x  */
-STORELOCAL7,/*		x		-		LOC[7]=x  */
-STORELOCAL8,/*		x		-		LOC[8]=x  */
-STORELOCAL9,/*		x		-		LOC[9]=x  */
-STORELOCAL,/*	b	x		-		LOC[b]=x  */
-STOREGLOBAL,/*	w	x		-		VAR[w]=x  */
-STOREINDEXED0,/*	v i t		-		t[i]=v  */
-STOREINDEXED,/*	b	v a_b...a_1 i t	a_b...a_1 i t	t[i]=v  */
-STORELIST0,/*	b	v_b...v_1 t	-		t[i]=v_i  */
-STORELIST,/*	b c	v_b...v_1 t	-		t[i+c*FPF]=v_i  */
-STORERECORD,/*	b
-		w_b...w_1 v_b...v_1 t	-		t[CNST[w_i]]=v_i  */
-ADJUST0,/*		-		-		TOP=BASE  */
-ADJUST,/*	b	-		-		TOP=BASE+b  */
-CREATEARRAY,/*	w	-		newarray(size = w)  */
-EQOP,/*			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,/*	w	x		(x!=nil)? x : -	(x!=nil)? PC+=w  */
-ONFJMP,/*	w	x		(x==nil)? x : -	(x==nil)? PC+=w  */
-JMP,/*		w	-		-		PC+=w  */
-UPJMP,/*	w	-		-		PC-=w  */
-IFFJMP,/*	w	x		-		(x==nil)? PC+=w  */
-IFFUPJMP,/*	w	x		-		(x==nil)? PC-=w  */
-CALLFUNC,/*	b c	v_b...v_1 f	r_c...r_1	f(v1,...,v_b)  */
-RETCODE0,
-RETCODE,/*	b	-		-  */
-SETLINE,/*	w	-		-		LINE=w  */
-VARARGS,/*	b	v_b...v_1	{v_1...v_b;n=b}  */
-STOREMAP,/*	b	v_b k_b ...v_1 k_1 t	-	t[k_i]=v_i  */
-PUSHCONSTANTB,/*b	-		CNST[b] */
-PUSHCONSTANT,/* w	-		CNST[w] */
-ENDCODE = 127
-} OpCode;
-
-
-#define MULT_RET	255
-
-
-typedef union
-{
- lua_CFunction f;
- real          n;
- TaggedString *ts;
- TFunc         *tf;
- struct Hash    *a;
- int	       i;
-} Value;
-
-typedef struct TObject
-{
- lua_Type ttype;
- Value value;
-} TObject;
-
-
-/* Macros to access structure members */
-#define ttype(o)	((o)->ttype)
-#define nvalue(o)	((o)->value.n)
-#define svalue(o)	((o)->value.ts->str)
-#define tsvalue(o)	((o)->value.ts)
-#define avalue(o)	((o)->value.a)
-#define fvalue(o)	((o)->value.f)
-
-/* Macros to access symbol table */
-#define s_object(i)	(lua_table[i].object)
-#define s_ttype(i)	(ttype(&s_object(i)))
-#define s_nvalue(i)	(nvalue(&s_object(i)))
-#define s_svalue(i)	(svalue(&s_object(i)))
-#define s_tsvalue(i)	(tsvalue(&s_object(i)))
-#define s_avalue(i)	(avalue(&s_object(i)))
-#define s_fvalue(i)	(fvalue(&s_object(i)))
-#define s_uvalue(i)	(uvalue(&s_object(i)))
-
-
-/* Exported functions */
-void    lua_parse      (TFunc *tf);	/* from "lua.stx" module */
-void	luaI_codedebugline (int line);  /* from "lua.stx" module */
-void    lua_travstack (int (*fn)(TObject *));
-TObject *luaI_Address (lua_Object o);
-void	luaI_pushobject (TObject *o);
-void    luaI_gcIM       (TObject *o);
-int     luaI_dorun (TFunc *tf);
-int     lua_domain (void);
-
-extern TObject luaI_errorim;
-
-#endif