summaryrefslogtreecommitdiffhomepage
path: root/src/vm.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-11-04 14:01:04 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-11-04 14:01:04 +0900
commitd13df1536d5513be64732aef41827d5d0329ee58 (patch)
tree8c4bbf7fd1d18a5429129d9babbee28438d9227d /src/vm.c
parentf8156ae17511e7255b5984075a025533d3771cd0 (diff)
downloadmruby-d13df1536d5513be64732aef41827d5d0329ee58.tar.gz
mruby-d13df1536d5513be64732aef41827d5d0329ee58.zip
Add a new instruction `OP_LOADI32`.
That loads 32 bit integer bypassing pool access.
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 1d6f82249..e3883bc48 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1030,7 +1030,7 @@ mrb_vm_exec(mrb_state *mrb, const struct RProc *proc, const mrb_code *pc)
struct mrb_jmpbuf c_jmp;
uint32_t a;
uint16_t b;
- uint8_t c;
+ uint16_t c;
mrb_sym mid;
const struct mrb_irep_catch_handler *ch;
@@ -1138,6 +1138,11 @@ RETRY_TRY_BLOCK:
NEXT;
}
+ CASE(OP_LOADI32, BSS) {
+ SET_INT_VALUE(mrb, regs[a], (mrb_int)(b<<16)+c);
+ NEXT;
+ }
+
CASE(OP_LOADSYM, BB) {
SET_SYM_VALUE(regs[a], syms[b]);
NEXT;