diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-11-04 14:01:04 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-11-04 14:01:04 +0900 |
| commit | d13df1536d5513be64732aef41827d5d0329ee58 (patch) | |
| tree | 8c4bbf7fd1d18a5429129d9babbee28438d9227d /src | |
| parent | f8156ae17511e7255b5984075a025533d3771cd0 (diff) | |
| download | mruby-d13df1536d5513be64732aef41827d5d0329ee58.tar.gz mruby-d13df1536d5513be64732aef41827d5d0329ee58.zip | |
Add a new instruction `OP_LOADI32`.
That loads 32 bit integer bypassing pool access.
Diffstat (limited to 'src')
| -rw-r--r-- | src/codedump.c | 6 | ||||
| -rw-r--r-- | src/vm.c | 7 |
2 files changed, 11 insertions, 2 deletions
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); @@ -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; |
