summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-05 19:17:33 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:19 +0900
commitfd10c7231906ca48cb35892d2a86460004b62249 (patch)
tree80ae2f21bb4a68843069130ee9ff9e4040e19a3c /mrbgems/mruby-compiler/core/codegen.c
parentce7508e0d52e364358294fb3eb3414763d03516c (diff)
downloadmruby-fd10c7231906ca48cb35892d2a86460004b62249.tar.gz
mruby-fd10c7231906ca48cb35892d2a86460004b62249.zip
Remove `OP_EXT[123]` from operands.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c88
1 files changed, 5 insertions, 83 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 189bb95b8..9da80536b 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -217,9 +217,7 @@ genop_1(codegen_scope *s, mrb_code i, uint16_t a)
{
s->lastpc = s->pc;
if (a > 0xff) {
- gen_B(s, OP_EXT1);
- gen_B(s, i);
- gen_S(s, a);
+ codegen_error(s, "too big operand");
}
else {
gen_B(s, i);
@@ -231,23 +229,8 @@ static void
genop_2(codegen_scope *s, mrb_code i, uint16_t a, uint16_t b)
{
s->lastpc = s->pc;
- if (a > 0xff && b > 0xff) {
- gen_B(s, OP_EXT3);
- gen_B(s, i);
- gen_S(s, a);
- gen_S(s, b);
- }
- else if (b > 0xff) {
- gen_B(s, OP_EXT2);
- gen_B(s, i);
- gen_B(s, (uint8_t)a);
- gen_S(s, b);
- }
- else if (a > 0xff) {
- gen_B(s, OP_EXT1);
- gen_B(s, i);
- gen_S(s, a);
- gen_B(s, (uint8_t)b);
+ if (a > 0xff || b > 0xff) {
+ codegen_error(s, "too big operand");
}
else {
gen_B(s, i);
@@ -309,32 +292,6 @@ mrb_decode_insn(const mrb_code *pc)
#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x (); break;
#include "mruby/ops.h"
#undef OPCODE
- }
- switch (insn) {
- case OP_EXT1:
- insn = READ_B();
- switch (insn) {
-#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); break;
-#include "mruby/ops.h"
-#undef OPCODE
- }
- break;
- case OP_EXT2:
- insn = READ_B();
- switch (insn) {
-#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); break;
-#include "mruby/ops.h"
-#undef OPCODE
- }
- break;
- case OP_EXT3:
- insn = READ_B();
- switch (insn) {
-#define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); break;
-#include "mruby/ops.h"
-#undef OPCODE
- }
- break;
default:
break;
}
@@ -391,11 +348,8 @@ genjmp2(codegen_scope *s, mrb_code i, uint16_t a, int pc, int val)
s->lastpc = s->pc;
if (a > 0xff) {
- gen_B(s, OP_EXT1);
- gen_B(s, i);
- gen_S(s, a);
- pos = s->pc;
- gen_S(s, pc);
+ codegen_error(s, "too big operand");
+ pos = 0;
}
else {
gen_B(s, i);
@@ -3314,35 +3268,3 @@ uint8_t mrb_insn_size[] = {
#undef SB
#undef BBB
};
-/* EXT1 instruction sizes */
-uint8_t mrb_insn_size1[] = {
-#define B 3
-#define BB 4
-#define BBB 5
-#define BS 5
-#define SB 5
-#define OPCODE(_,x) x,
-#include "mruby/ops.h"
-#undef OPCODE
-#undef B
-};
-/* EXT2 instruction sizes */
-uint8_t mrb_insn_size2[] = {
-#define B 2
-#define OPCODE(_,x) x,
-#include "mruby/ops.h"
-#undef OPCODE
-#undef BB
-#undef BBB
-#undef BS
-#undef SB
-};
-/* EXT3 instruction sizes */
-#define BB 5
-#define BBB 6
-#define BS 4
-#define SB 5
-uint8_t mrb_insn_size3[] = {
-#define OPCODE(_,x) x,
-#include "mruby/ops.h"
-};