/*
** $Id: lopcodes.c,v 1.37.1.1 2007/12/27 13:02:25 roberto Exp $
** See Copyright Notice in lua.h
*/

#define lopcodes_c
#define LUA_CORE

#include "lopcodes.h"

/* ORDER OP */

const char *const luaP_opnames[NUM_OPCODES + 1] = {
    "MOVE",     "LOADK",     "LOADBOOL", "LOADNIL",  "GETUPVAL", "GETGLOBAL",
    "GETTABLE", "SETGLOBAL", "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",  "TFORLOOP", "SETLIST",  "CLOSE",
    "CLOSURE",  "VARARG",    NULL};

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

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, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */
    ,
    opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LOADNIL */
    ,
    opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */
    ,
    opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_GETGLOBAL */
    ,
    opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */
    ,
    opmode(0, 0, OpArgK, OpArgN, iABx) /* OP_SETGLOBAL */
    ,
    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, 1, OpArgR, 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(1, 0, OpArgN, OpArgU, iABC) /* OP_TFORLOOP */
    ,
    opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */
    ,
    opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */
    ,
    opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */
    ,
    opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */
};
