diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-09-28 13:53:29 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2017-09-28 13:53:29 -0300 |
commit | 722bdbe17d0192baf72978f88069d12a921e9bfb (patch) | |
tree | 78da619d4799721e67a760bf4220b568f636cb86 /lopcodes.c | |
parent | 1b100335839e13021b4731f0407b87e4f7544dc0 (diff) | |
download | lua-722bdbe17d0192baf72978f88069d12a921e9bfb.tar.gz lua-722bdbe17d0192baf72978f88069d12a921e9bfb.tar.bz2 lua-722bdbe17d0192baf72978f88069d12a921e9bfb.zip |
no more 'getBMode'-'getCMode' (imprecise + we will need more space
for op mode) + better control of op modes
Diffstat (limited to 'lopcodes.c')
-rw-r--r-- | lopcodes.c | 116 |
1 files changed, 57 insertions, 59 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lopcodes.c,v 1.63 2017/09/19 18:38:14 roberto Exp roberto $ | 2 | ** $Id: lopcodes.c,v 1.64 2017/09/26 18:14:45 roberto Exp roberto $ |
3 | ** Opcodes for Lua virtual machine | 3 | ** Opcodes for Lua virtual machine |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -77,64 +77,62 @@ LUAI_DDEF const char *const luaP_opnames[NUM_OPCODES+1] = { | |||
77 | }; | 77 | }; |
78 | 78 | ||
79 | 79 | ||
80 | #define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) | ||
81 | |||
82 | LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { | 80 | LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { |
83 | /* T A B C mode opcode */ | 81 | /* T A mode opcode */ |
84 | opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ | 82 | opmode(0, 1, iABC) /* OP_MOVE */ |
85 | ,opmode(0, 1, OpArgU, OpArgN, iAsBx) /* OP_LOADI */ | 83 | ,opmode(0, 1, iAsBx) /* OP_LOADI */ |
86 | ,opmode(0, 1, OpArgU, OpArgN, iAsBx) /* OP_LOADF */ | 84 | ,opmode(0, 1, iAsBx) /* OP_LOADF */ |
87 | ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ | 85 | ,opmode(0, 1, iABx) /* OP_LOADK */ |
88 | ,opmode(0, 1, OpArgN, OpArgN, iABx) /* OP_LOADKX */ | 86 | ,opmode(0, 1, iABx) /* OP_LOADKX */ |
89 | ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ | 87 | ,opmode(0, 1, iABC) /* OP_LOADBOOL */ |
90 | ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_LOADNIL */ | 88 | ,opmode(0, 1, iABC) /* OP_LOADNIL */ |
91 | ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ | 89 | ,opmode(0, 1, iABC) /* OP_GETUPVAL */ |
92 | ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ | 90 | ,opmode(0, 0, iABC) /* OP_SETUPVAL */ |
93 | ,opmode(0, 1, OpArgU, OpArgK, iABC) /* OP_GETTABUP */ | 91 | ,opmode(0, 1, iABC) /* OP_GETTABUP */ |
94 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_GETTABLE */ | 92 | ,opmode(0, 1, iABC) /* OP_GETTABLE */ |
95 | ,opmode(0, 1, OpArgR, OpArgU, iABC) /* OP_GETI */ | 93 | ,opmode(0, 1, iABC) /* OP_GETI */ |
96 | ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETFIELD */ | 94 | ,opmode(0, 1, iABC) /* OP_GETFIELD */ |
97 | ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABUP */ | 95 | ,opmode(0, 0, iABC) /* OP_SETTABUP */ |
98 | ,opmode(0, 0, OpArgR, OpArgK, iABC) /* OP_SETTABLE */ | 96 | ,opmode(0, 0, iABC) /* OP_SETTABLE */ |
99 | ,opmode(0, 0, OpArgU, OpArgK, iABC) /* OP_SETI */ | 97 | ,opmode(0, 0, iABC) /* OP_SETI */ |
100 | ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETFIELD */ | 98 | ,opmode(0, 0, iABC) /* OP_SETFIELD */ |
101 | ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ | 99 | ,opmode(0, 1, iABC) /* OP_NEWTABLE */ |
102 | ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ | 100 | ,opmode(0, 1, iABC) /* OP_SELF */ |
103 | ,opmode(0, 1, OpArgR, OpArgU, iABC) /* OP_ADDI */ | 101 | ,opmode(0, 1, iABC) /* OP_ADDI */ |
104 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_ADD */ | 102 | ,opmode(0, 1, iABC) /* OP_ADD */ |
105 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SUB */ | 103 | ,opmode(0, 1, iABC) /* OP_SUB */ |
106 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_MUL */ | 104 | ,opmode(0, 1, iABC) /* OP_MUL */ |
107 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_MOD */ | 105 | ,opmode(0, 1, iABC) /* OP_MOD */ |
108 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_POW */ | 106 | ,opmode(0, 1, iABC) /* OP_POW */ |
109 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_DIV */ | 107 | ,opmode(0, 1, iABC) /* OP_DIV */ |
110 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_IDIV */ | 108 | ,opmode(0, 1, iABC) /* OP_IDIV */ |
111 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BAND */ | 109 | ,opmode(0, 1, iABC) /* OP_BAND */ |
112 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BOR */ | 110 | ,opmode(0, 1, iABC) /* OP_BOR */ |
113 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_BXOR */ | 111 | ,opmode(0, 1, iABC) /* OP_BXOR */ |
114 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SHL */ | 112 | ,opmode(0, 1, iABC) /* OP_SHL */ |
115 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_SHR */ | 113 | ,opmode(0, 1, iABC) /* OP_SHR */ |
116 | ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ | 114 | ,opmode(0, 1, iABC) /* OP_UNM */ |
117 | ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_BNOT */ | 115 | ,opmode(0, 1, iABC) /* OP_BNOT */ |
118 | ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ | 116 | ,opmode(0, 1, iABC) /* OP_NOT */ |
119 | ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ | 117 | ,opmode(0, 1, iABC) /* OP_LEN */ |
120 | ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ | 118 | ,opmode(0, 1, iABC) /* OP_CONCAT */ |
121 | ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */ | 119 | ,opmode(0, 0, iABC) /* OP_CLOSE */ |
122 | ,opmode(0, 0, OpArgU, OpArgN, iAsBx) /* OP_JMP */ | 120 | ,opmode(0, 0, iAsBx) /* OP_JMP */ |
123 | ,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_EQ */ | 121 | ,opmode(1, 0, iABC) /* OP_EQ */ |
124 | ,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_LT */ | 122 | ,opmode(1, 0, iABC) /* OP_LT */ |
125 | ,opmode(1, 0, OpArgR, OpArgR, iABC) /* OP_LE */ | 123 | ,opmode(1, 0, iABC) /* OP_LE */ |
126 | ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TEST */ | 124 | ,opmode(1, 0, iABC) /* OP_TEST */ |
127 | ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ | 125 | ,opmode(1, 1, iABC) /* OP_TESTSET */ |
128 | ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ | 126 | ,opmode(0, 1, iABC) /* OP_CALL */ |
129 | ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ | 127 | ,opmode(0, 1, iABC) /* OP_TAILCALL */ |
130 | ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ | 128 | ,opmode(0, 0, iABC) /* OP_RETURN */ |
131 | ,opmode(0, 1, OpArgR, OpArgN, iABx) /* OP_FORLOOP */ | 129 | ,opmode(0, 1, iABx) /* OP_FORLOOP */ |
132 | ,opmode(0, 1, OpArgR, OpArgN, iABx) /* OP_FORPREP */ | 130 | ,opmode(0, 1, iABx) /* OP_FORPREP */ |
133 | ,opmode(0, 0, OpArgN, OpArgU, iABC) /* OP_TFORCALL */ | 131 | ,opmode(0, 0, iABC) /* OP_TFORCALL */ |
134 | ,opmode(0, 1, OpArgR, OpArgN, iABx) /* OP_TFORLOOP */ | 132 | ,opmode(0, 1, iABx) /* OP_TFORLOOP */ |
135 | ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ | 133 | ,opmode(0, 0, iABC) /* OP_SETLIST */ |
136 | ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ | 134 | ,opmode(0, 1, iABx) /* OP_CLOSURE */ |
137 | ,opmode(0, 1, OpArgU, OpArgR, iABC) /* OP_VARARG */ | 135 | ,opmode(0, 1, iABC) /* OP_VARARG */ |
138 | ,opmode(0, 0, OpArgU, OpArgU, iAx) /* OP_EXTRAARG */ | 136 | ,opmode(0, 0, iAx) /* OP_EXTRAARG */ |
139 | }; | 137 | }; |
140 | 138 | ||