ResidualVM logo ResidualVM website - Forums - Contact us BuildBot - Doxygen - Wiki curved edge

lopcodes.h

Go to the documentation of this file.
00001 /*
00002 ** Opcodes for Lua virtual machine
00003 ** See Copyright Notice in lua.h
00004 */
00005 
00006 #ifndef GRIM_LOPCODES_H
00007 #define GRIM_LOPCODES_H
00008 
00009 namespace Grim {
00010 
00011 /*
00012 ** NOTICE: variants of the same opcode must be consecutive: First, those
00013 ** with byte parameter, then with built-in parameters, and last with
00014 ** word parameter.
00015 */
00016 
00017 typedef enum {
00018 //  name                parm    before          after           side effect
00019 //-----------------------------------------------------------------------------
00020     ENDCODE,        //  -       -               -  
00021 
00022     PUSHNIL,        //  b       -               nil_0...nil_b  
00023     PUSHNIL0,       //  -       -               nil  
00024 
00025     PUSHNUMBER,     //  b       -               (float)b  
00026     PUSHNUMBER0,    //  -       -               0.0  
00027     PUSHNUMBER1,    //  -       -               1.0  
00028     PUSHNUMBER2,    //  -       -               2.0  
00029     PUSHNUMBERW,    //  w       -               (float)w  
00030 
00031     PUSHCONSTANT,   //  b       -               CNST[b] 
00032     PUSHCONSTANT0,  //  -       -               CNST[0] 
00033     PUSHCONSTANT1,  //  -       -               CNST[1] 
00034     PUSHCONSTANT2,  //  -       -               CNST[2] 
00035     PUSHCONSTANT3,  //  -       -               CNST[3] 
00036     PUSHCONSTANT4,  //  -       -               CNST[4] 
00037     PUSHCONSTANT5,  //  -       -               CNST[5] 
00038     PUSHCONSTANT6,  //  -       -               CNST[6] 
00039     PUSHCONSTANT7,  //  -       -               CNST[7] 
00040     PUSHCONSTANTW,  //  w       -               CNST[w] 
00041 
00042     PUSHUPVALUE,    //  b       -               Closure[b] 
00043     PUSHUPVALUE0,   //  -       -               Closure[0] 
00044     PUSHUPVALUE1,   //  -       -               Closure[1] 
00045 
00046     PUSHLOCAL,      //  b       -               LOC[b]  
00047     PUSHLOCAL0,     //  -       -               LOC[0]  
00048     PUSHLOCAL1,     //  -       -               LOC[1]  
00049     PUSHLOCAL2,     //  -       -               LOC[2]  
00050     PUSHLOCAL3,     //  -       -               LOC[3]  
00051     PUSHLOCAL4,     //  -       -               LOC[4]  
00052     PUSHLOCAL5,     //  -       -               LOC[5]  
00053     PUSHLOCAL6,     //  -       -               LOC[6]  
00054     PUSHLOCAL7,     //  -       -               LOC[7]  
00055 
00056     GETGLOBAL,      //  b       -               VAR[CNST[b]]  
00057     GETGLOBAL0,     //  -       -               VAR[CNST[0]]  
00058     GETGLOBAL1,     //  -       -               VAR[CNST[1]]  
00059     GETGLOBAL2,     //  -       -               VAR[CNST[2]]  
00060     GETGLOBAL3,     //  -       -               VAR[CNST[3]]  
00061     GETGLOBAL4,     //  -       -               VAR[CNST[4]]  
00062     GETGLOBAL5,     //  -       -               VAR[CNST[5]]  
00063     GETGLOBAL6,     //  -       -               VAR[CNST[6]]  
00064     GETGLOBAL7,     //  -       -               VAR[CNST[7]]  
00065     GETGLOBALW,     //  w       -               VAR[CNST[w]]  
00066 
00067     GETTABLE,       //  -       i t             t[i]  
00068 
00069     GETDOTTED,      //  b       t               t[CNST[b]]  
00070     GETDOTTED0,     //  -       t               t[CNST[0]]  
00071     GETDOTTED1,     //  -       t               t[CNST[1]]  
00072     GETDOTTED2,     //  -       t               t[CNST[2]]  
00073     GETDOTTED3,     //  -       t               t[CNST[3]]  
00074     GETDOTTED4,     //  -       t               t[CNST[4]]  
00075     GETDOTTED5,     //  -       t               t[CNST[5]]  
00076     GETDOTTED6,     //  -       t               t[CNST[6]]  
00077     GETDOTTED7,     //  -       t               t[CNST[7]]  
00078     GETDOTTEDW,     //  w       t               t[CNST[w]]  
00079 
00080     PUSHSELF,       //  b       t               t t[CNST[b]]  
00081     PUSHSELF0,      //  -       t               t t[CNST[0]]  
00082     PUSHSELF1,      //  -       t               t t[CNST[1]]  
00083     PUSHSELF2,      //  -       t               t t[CNST[2]]  
00084     PUSHSELF3,      //  -       t               t t[CNST[3]]  
00085     PUSHSELF4,      //  -       t               t t[CNST[4]]  
00086     PUSHSELF5,      //  -       t               t t[CNST[5]]  
00087     PUSHSELF6,      //  -       t               t t[CNST[6]]  
00088     PUSHSELF7,      //  -       t               t t[CNST[7]]  
00089     PUSHSELFW,      //  w       t               t t[CNST[w]]  
00090 
00091     CREATEARRAY,    //  b       -               newarray(size = b)  
00092     CREATEARRAY0,   //  -       -               newarray(size = 0)  
00093     CREATEARRAY1,   //  -       -               newarray(size = 1)  
00094     CREATEARRAYW,   //  w       -               newarray(size = w)  
00095 
00096     SETLOCAL,       //  b       x               -               LOC[b]=x  
00097     SETLOCAL0,      //  -       x               -               LOC[0]=x  
00098     SETLOCAL1,      //  -       x               -               LOC[1]=x  
00099     SETLOCAL2,      //  -       x               -               LOC[2]=x  
00100     SETLOCAL3,      //  -       x               -               LOC[3]=x  
00101     SETLOCAL4,      //  -       x               -               LOC[4]=x  
00102     SETLOCAL5,      //  -       x               -               LOC[5]=x  
00103     SETLOCAL6,      //  -       x               -               LOC[6]=x  
00104     SETLOCAL7,      //  -       x               -               LOC[7]=x  
00105 
00106     SETGLOBAL,      //  b       x               -               VAR[CNST[b]]=x  
00107     SETGLOBAL0,     //  -       x               -               VAR[CNST[0]]=x  
00108     SETGLOBAL1,     //  -       x               -               VAR[CNST[1]]=x  
00109     SETGLOBAL2,     //  -       x               -               VAR[CNST[2]]=x  
00110     SETGLOBAL3,     //  -       x               -               VAR[CNST[3]]=x  
00111     SETGLOBAL4,     //  -       x               -               VAR[CNST[4]]=x  
00112     SETGLOBAL5,     //  -       x               -               VAR[CNST[5]]=x  
00113     SETGLOBAL6,     //  -       x               -               VAR[CNST[6]]=x  
00114     SETGLOBAL7,     //  -       x               -               VAR[CNST[7]]=x  
00115     SETGLOBALW,     //  w       x               -               VAR[CNST[w]]=x  
00116 
00117     SETTABLE0,      //  -       vci t           -               t[i]=v  
00118 
00119     SETTABLE,       //  b       v a_b...a_1 i   t a_b...a_1 i t t[i]=v  
00120 
00121     SETLIST,        //  b c     v_c...v_1 t     -               t[i+b*FPF]=v_i  
00122     SETLIST0,       //  b       v_b...v_1 t     -               t[i]=v_i  
00123     SETLISTW,       //  w c     v_c...v_1 t     -               t[i+w*FPF]=v_i  
00124 
00125     SETMAP,         //  b       v_b k_b ...v_0 k_0 t    t       t[k_i]=v_i  
00126     SETMAP0,        //  -       v_0 k_0 t       t               t[k_0]=v_0  
00127 
00128     EQOP,           //  -       y x             (x==y)? 1 : nil  
00129     NEQOP,          //  -       y x             (x~=y)? 1 : nil  
00130     LTOP,           //  -       y x             (x<y)? 1 : nil  
00131     LEOP,           //  -       y x             (x<y)? 1 : nil  
00132     GTOP,           //  -       y x             (x>y)? 1 : nil  
00133     GEOP,           //  -       y x             (x>=y)? 1 : nil  
00134     ADDOP,          //  -       y x             x+y  
00135     SUBOP,          //  -       y x             x-y  
00136     MULTOP,         //  -       y x             x*y  
00137     DIVOP,          //  -       y x             x/y  
00138     POWOP,          //  -       y x             x^y  
00139     CONCOP,         //  -       y x             x..y  
00140     MINUSOP,        //  -       x               -x  
00141     NOTOP,          //  -       x               (x==nil)? 1 : nil  
00142 
00143     ONTJMP,         //  b       x               (x!=nil)? x : - (x!=nil)? PC+=b  
00144     ONTJMPW,        //  w       x               (x!=nil)? x : - (x!=nil)? PC+=w  
00145     ONFJMP,         //  b       x               (x==nil)? x : - (x==nil)? PC+=b  
00146     ONFJMPW,        //  w       x               (x==nil)? x : - (x==nil)? PC+=w  
00147     JMP,            //  b       -               -               PC+=b  
00148     JMPW,           //  w       -               -               PC+=w  
00149     IFFJMP,         //  b       x               -               (x==nil)? PC+=b  
00150     IFFJMPW,        //  w       x               -               (x==nil)? PC+=w  
00151     IFTUPJMP,       //  b       x               -               (x!=nil)? PC-=b  
00152     IFTUPJMPW,      //  w       x               -               (x!=nil)? PC-=w  
00153     IFFUPJMP,       //  b       x               -               (x==nil)? PC-=b  
00154     IFFUPJMPW,      //  w       x               -               (x==nil)? PC-=w  
00155 
00156     CLOSURE,        //  c       f v_c...v_1     closure(f, v_c...v_1) 
00157     CLOSURE0,       //  -       f               closure(f) 
00158     CLOSURE1,       //  -       f v             closure(f, v) 
00159 
00160     CALLFUNC,       //  b c     v_c...v_1 f     r_b...r_1       f(v1,...,v_c)  
00161     CALLFUNC0,      //  b       v_b...v_1 f     -               f(v1,...,v_b)  
00162     CALLFUNC1,      //  b       v_b...v_1 f     r_1             f(v1,...,v_b)  
00163 
00164     RETCODE,        //  b       -               -  
00165 
00166     SETLINE,        //  b       -               -               LINE=b  
00167     SETLINEW,       //  w       -               -               LINE=w  
00168 
00169     POP,            //  b       -               -               TOP-=(b+1)
00170     POP0,           //  -       -               -               TOP-=1
00171     POP1            //  -       -               -               TOP-=2
00172 } OpCode;
00173 
00174 #define RFIELDS_PER_FLUSH 32    // records (SETMAP)
00175 #define LFIELDS_PER_FLUSH 64    // lists (SETLIST)
00176 #define ZEROVARARG  64
00177 
00178 } // end of namespace Grim
00179 
00180 #endif


Generated on Sat May 18 2019 05:01:07 for ResidualVM by doxygen 1.7.1
curved edge   curved edge