Initial commit
This commit is contained in:
180
engines/grim/lua/lopcodes.h
Normal file
180
engines/grim/lua/lopcodes.h
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
** Opcodes for Lua virtual machine
|
||||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
|
||||
#ifndef GRIM_LOPCODES_H
|
||||
#define GRIM_LOPCODES_H
|
||||
|
||||
namespace Grim {
|
||||
|
||||
/*
|
||||
** 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, // - vci 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, // c f v_c...v_1 closure(f, v_c...v_1)
|
||||
CLOSURE0, // - f closure(f)
|
||||
CLOSURE1, // - f v closure(f, v)
|
||||
|
||||
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
|
||||
|
||||
} // end of namespace Grim
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user