scummvm/engines/grim/lua/lopcodes.h
Paweł Kołodziejski 690f9d2a5c GRIM,LUA: Janitorial
2022-01-06 18:26:30 +01:00

181 lines
5.4 KiB
C++

/*
** 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