1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
| /*
| ** $Id: lopcodes.c,v 1.55.1.1 2017/04/19 17:20:42 roberto Exp $
| ** Opcodes for Lua virtual machine
| ** See Copyright Notice in lua.h
| */
|
| #define lopcodes_c
| #define LUA_CORE
|
| #include "lprefix.h"
|
|
| #include <stddef.h>
|
| #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",
| "MOD",
| "POW",
| "DIV",
| "IDIV",
| "BAND",
| "BOR",
| "BXOR",
| "SHL",
| "SHR",
| "UNM",
| "BNOT",
| "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_MOD */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_IDIV */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BAND */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BOR */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_BXOR */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHL */
| ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SHR */
| ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */
| ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */
| ,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 */
| };
|
|