From d13df1536d5513be64732aef41827d5d0329ee58 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 4 Nov 2020 14:01:04 +0900 Subject: Add a new instruction `OP_LOADI32`. That loads 32 bit integer bypassing pool access. --- src/codedump.c | 6 +++++- src/vm.c | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/codedump.c b/src/codedump.c index 9af609264..b62342c15 100644 --- a/src/codedump.c +++ b/src/codedump.c @@ -115,7 +115,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep) ptrdiff_t i; uint32_t a; uint16_t b; - uint8_t c; + uint16_t c; ai = mrb_gc_arena_save(mrb); @@ -169,6 +169,10 @@ codedump(mrb_state *mrb, const mrb_irep *irep) printf("OP_LOADI16\tR%d\t%d\t", a, (int)(int16_t)b); print_lv_a(mrb, irep, a); break; + CASE(OP_LOADI32, BSS); + printf("OP_LOADI32\tR%d\t%d\t", a, (int)(b<<16)+c); + print_lv_a(mrb, irep, a); + break; CASE(OP_LOADI__1, B); printf("OP_LOADI__1\tR%d\t\t", a); print_lv_a(mrb, irep, a); 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; -- cgit v1.2.3