From 1bc439c214c71d22ef6d14df18380df37be0d83f Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 17 Apr 2023 13:19:38 +0300 Subject: [PATCH] ARMO needs source mapping --- src/jit/nvm_x86_64.c | 6 +++--- src/vm.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index cfd6361c..5e29c8d4 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -134,7 +134,7 @@ INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0); if (allNum) return num_squeeze(r.b); return r.b; } -INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0); +INS B i_ARMO(B el0, i64 sz, u32* bc, B* cStack) { assert(sz>0); POS_UPD; GS_UPD; HArr_p r = m_harrUv(sz); r.a[sz-1] = el0; @@ -676,8 +676,8 @@ Nvm_res m_nvm(Body* body) { else if (sz==2 && o) { TOPpR(R_A1); GET(R_A0,1,1); CCALL(i_LST_2); } // (B a, B b) else { TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_LST_p); } // (B a, i64 sz, S) } break; - case ARMO: { u32 sz = *bc++; TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_ARMO); break; } - case ARMM: { u32 sz = *bc++; TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_ARMM); break; } + case ARMO: { u32 sz = *bc++; TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); IMM(R_A2,off); INV(3,0,i_ARMO); break; } // (B el0, i64 sz, u32* bc, B* cStack) + case ARMM: { u32 sz = *bc++; TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_ARMM); break; } // (B el0, i64 sz, B* cStack) case DFND0: case DFND1: case DFND2: TOPs; // (u32* bc, Scope* sc, Block* bl) Block* bl = (Block*)L64; u64 fn = (u64)(bl->ty==0? i_DFND_0 : bl->ty==1? i_DFND_1 : bl->ty==2? i_DFND_2 : NULL); diff --git a/src/vm.c b/src/vm.c index 09670198..3269120d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -902,6 +902,7 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume } case FAIL: thrM(q_N(sc->vars[2])? "This block cannot be called monadically" : "This block cannot be called dyadically"); case ARMO: { GS_UPD; + POS_UPD; u32 sz = *bc++; assert(sz>0); HArr_p r = m_harrUv(sz);