/*
** $Id: lopcodes.c,v 1.49 2012/05/14 13:34:18 roberto Exp $
** Opcodes for Lua virtual machine
** See Copyright Notice in lua.h
*/


#define lopcodes_c
#define LUA_CORE


#include "lopcodes.h"


/* ORDER OP */

LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES + 1] = {
    "MOVE",
    "LOADK",
    "LOADKX",
    "LOADBOOL",
    "LOADNIL",
    "GETUPVAL",
    "GETTABUP",
    "GETTABLE",
    "SETTABUP",
    "SETUPVAL",
    "SETTABLE",
    "NEWTABLE",
    "SELF",
    "ADD",
    "SUB",
    "MUL",
    "DIV",
    "MOD",
    "POW",
    "UNM",
    "NOT",
    "LEN",
    "CONCAT",
    "JMP",
    "EQ",
    "LT",
    "LE",
    "TEST",
    "TESTSET",
    "CALL",
    "TAILCALL",
    "RETURN",
    "FORLOOP",
    "FORPREP",
    "TFORCALL",
    "TFORLOOP",
    "SETLIST",
    "CLOSURE",
    "VARARG",
    "EXTRAARG",
    NULL
};


#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m))

LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
    /*       T  A    B       C     mode     opcode */
    opmode(0, 1, OpArgR, OpArgN, iABC)    /* OP_MOVE */
    , opmode(0, 1, OpArgK, OpArgN, iABx)   /* OP_LOADK */
    , opmode(0, 1, OpArgN, OpArgN, iABx)   /* OP_LOADKX */
    , opmode(0, 1, OpArgU, OpArgU, iABC)   /* OP_LOADBOOL */
    , opmode(0, 1, OpArgU, OpArgN, iABC)   /* OP_LOADNIL */
    , opmode(0, 1, OpArgU, OpArgN, iABC)   /* OP_GETUPVAL */
    , opmode(0, 1, OpArgU, OpArgK, iABC)   /* OP_GETTABUP */
    , opmode(0, 1, OpArgR, OpArgK, iABC)   /* OP_GETTABLE */
    , opmode(0, 0, OpArgK, OpArgK, iABC)   /* OP_SETTABUP */
    , opmode(0, 0, OpArgU, OpArgN, iABC)   /* OP_SETUPVAL */
    , opmode(0, 0, OpArgK, OpArgK, iABC)   /* OP_SETTABLE */
    , opmode(0, 1, OpArgU, OpArgU, iABC)   /* OP_NEWTABLE */
    , opmode(0, 1, OpArgR, OpArgK, iABC)   /* OP_SELF */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_ADD */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_SUB */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_MUL */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_DIV */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_MOD */
    , opmode(0, 1, OpArgK, OpArgK, iABC)   /* OP_POW */
    , opmode(0, 1, OpArgR, OpArgN, iABC)   /* OP_UNM */
    , opmode(0, 1, OpArgR, OpArgN, iABC)   /* OP_NOT */
    , opmode(0, 1, OpArgR, OpArgN, iABC)   /* OP_LEN */
    , opmode(0, 1, OpArgR, OpArgR, iABC)   /* OP_CONCAT */
    , opmode(0, 0, OpArgR, OpArgN, iAsBx)  /* OP_JMP */
    , opmode(1, 0, OpArgK, OpArgK, iABC)   /* OP_EQ */
    , opmode(1, 0, OpArgK, OpArgK, iABC)   /* OP_LT */
    , opmode(1, 0, OpArgK, OpArgK, iABC)   /* OP_LE */
    , opmode(1, 0, OpArgN, OpArgU, iABC)   /* OP_TEST */
    , opmode(1, 1, OpArgR, OpArgU, iABC)   /* OP_TESTSET */
    , opmode(0, 1, OpArgU, OpArgU, iABC)   /* OP_CALL */
    , opmode(0, 1, OpArgU, OpArgU, iABC)   /* OP_TAILCALL */
    , opmode(0, 0, OpArgU, OpArgN, iABC)   /* OP_RETURN */
    , opmode(0, 1, OpArgR, OpArgN, iAsBx)  /* OP_FORLOOP */
    , opmode(0, 1, OpArgR, OpArgN, iAsBx)  /* OP_FORPREP */
    , opmode(0, 0, OpArgN, OpArgU, iABC)   /* OP_TFORCALL */
    , opmode(0, 1, OpArgR, OpArgN, iAsBx)  /* OP_TFORLOOP */
    , opmode(0, 0, OpArgU, OpArgU, iABC)   /* OP_SETLIST */
    , opmode(0, 1, OpArgU, OpArgN, iABx)   /* OP_CLOSURE */
    , opmode(0, 1, OpArgU, OpArgN, iABC)   /* OP_VARARG */
    , opmode(0, 0, OpArgU, OpArgU, iAx)    /* OP_EXTRAARG */
};

