From 7bd83313462ed66e657f11ae635483e77dab3d07 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 21 Jan 2023 23:32:17 +0200 Subject: [PATCH] add more GS_UPD --- src/jit/nvm_x86_64.c | 3 +++ src/vm.c | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index 6dadafa4..462f7209 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -114,6 +114,7 @@ INS B i_LST_0() { // TODO combine with ADDI return emptyHVec(); } INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0); + GS_UPD; HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated bool allNum = isNum(el0); r.a[sz-1] = el0; @@ -123,6 +124,7 @@ INS B i_LST_p(B el0, i64 sz, B* cStack) { assert(sz>0); return r.b; } INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0); + GS_UPD; HArr_p r = m_harrUv(sz); r.a[sz-1] = el0; for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP; @@ -130,6 +132,7 @@ INS B i_ARMO(B el0, i64 sz, B* cStack) { assert(sz>0); return bqn_merge(r.b); } INS B i_ARMM(B el0, i64 sz, B* cStack) { assert(sz>0); + GS_UPD; HArr_p r = m_harrUv(sz); // can't use harrs as gStack isn't updated r.a[sz-1] = el0; for (i64 i = 1; i < sz; i++) r.a[sz-i-1] = GSP; diff --git a/src/vm.c b/src/vm.c index 56a4e2f6..75f1dc58 100644 --- a/src/vm.c +++ b/src/vm.c @@ -765,7 +765,7 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume dec(f); break; } - case LSTO: case LSTM: { + case LSTO: case LSTM: { GS_UPD; u32 sz = *bc++; if (sz==0) { ADD(emptyHVec()); @@ -889,19 +889,21 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume break; } case FAIL: thrM(q_N(sc->vars[2])? "This block cannot be called monadically" : "This block cannot be called dyadically"); - case ARMO: { + case ARMO: { GS_UPD; u32 sz = *bc++; assert(sz>0); HArr_p r = m_harrUv(sz); for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP; + GS_UPD; ADD(bqn_merge(r.b)); break; } - case ARMM: { + case ARMM: { GS_UPD; u32 sz = *bc++; assert(sz>0); HArr_p r = m_harrUv(sz); for (i64 i = 0; i < sz; i++) r.a[sz-i-1] = POP; + GS_UPD; WrappedObj* a = mm_alloc(sizeof(WrappedObj), t_arrMerge); a->obj = r.b; ADD(tag(a,OBJ_TAG));