1/*
2** $Id: lopcodes.c,v 1.55.1.1 2017/04/19 17:20:42 roberto Exp $
3** Opcodes for Lua virtual machine
4** See Copyright Notice in lua.h
5*/
6
7#define lopcodes_c
8#define LUA_CORE
9
10#include "lprefix.h"
11
12
13#include <stddef.h>
14
15#include "lopcodes.h"
16
17
18/* ORDER OP */
19
20LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = {
21 "MOVE",
22 "LOADK",
23 "LOADKX",
24 "LOADBOOL",
25 "LOADNIL",
26 "GETUPVAL",
27 "GETTABUP",
28 "GETTABLE",
29 "SETTABUP",
30 "SETUPVAL",
31 "SETTABLE",
32 "NEWTABLE",
33 "SELF",
34 "ADD",
35 "SUB",
36 "MUL",
37 "MOD",
38 "POW",
39 "DIV",
40 "IDIV",
41 "BAND",
42 "BOR",
43 "BXOR",
44 "SHL",
45 "SHR",
46 "UNM",
47 "BNOT",
48 "NOT",
49 "LEN",
50 "CONCAT",
51 "JMP",
52 "EQ",
53 "LT",
54 "LE",
55 "TEST",
56 "TESTSET",
57 "CALL",
58 "TAILCALL",
59 "RETURN",
60 "FORLOOP",
61 "FORPREP",
62 "TFORCALL",
63 "TFORLOOP",
64 "SETLIST",
65 "CLOSURE",
66 "VARARG",
67 "EXTRAARG",
68 NULL
69};
70
71
72#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m))
73
74LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = {
75/* T A B C mode opcode */
76 opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */
77 ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */
78 ,opmode(0, 1, OpArgN, OpArgN, iABx) /* OP_LOADKX */
79 ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */
80 ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_LOADNIL */
81 ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */
82 ,opmode(0, 1, OpArgU, OpArgK, iABC) /* OP_GETTABUP */
83 ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */
84 ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABUP */
85 ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */
86 ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */
87 ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */
88 ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */
89 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */
90 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */
91 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */
92 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */
93 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */
94 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */
95 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_IDIV */
96 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BAND */
97 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BOR */
98 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BXOR */
99 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHL */
100 ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHR */
101 ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */
102 ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */
103 ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */
104 ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */
105 ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */
106 ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */
107 ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */
108 ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */
109 ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */
110 ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */
111 ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */
112 ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */
113 ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */
114 ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */
115 ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */
116 ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */
117 ,opmode(0, 0, OpArgN, OpArgU, iABC) /* OP_TFORCALL */
118 ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_TFORLOOP */
119 ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */
120 ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */
121 ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */
122 ,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */
123};
124
125