From b1b3b7eed376fb2030365396a1137944b175e9a3 Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 2 Jul 2021 19:36:54 +0300 Subject: [PATCH] stack management for DFND --- src/jit/nvm_x86_64.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index bbcaa3b1..f9d0f468 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -106,9 +106,9 @@ INS B i_ARR_p(B el0, i64 sz GA1) { assert(sz>0); return withFill(r.b, m_f64(0)); } else return r.b; } -INS B i_DFND_0(u32* bc, Scope* sc, Block* bl GA1) { GS_UPD;POS_UPD; return m_funBlock(bl, sc); } -INS B i_DFND_1(u32* bc, Scope* sc, Block* bl GA1) { GS_UPD;POS_UPD; return m_md1Block(bl, sc); } -INS B i_DFND_2(u32* bc, Scope* sc, Block* bl GA1) { GS_UPD;POS_UPD; return m_md2Block(bl, sc); } +INS B i_DFND_0(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_funBlock(bl, sc); } +INS B i_DFND_1(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md1Block(bl, sc); } +INS B i_DFND_2(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md2Block(bl, sc); } INS B i_OP1D(B f,B m, u32* bc) { POS_UPD; return m1_d (m,f ); } INS B i_OP2D(B f,B m, B g, u32* bc) { POS_UPD; return m2_d (m,f,g); } INS B i_OP2H(B m, B g ) { return m2_h (m, g); } @@ -532,11 +532,12 @@ Nvm_res m_nvm(Body* body) { if (sz) { TOPp; IMM(R_A1, sz); INV(2,0,i_ARR_p); } // (B, i64 sz, S) else { TOPs; CCALL(i_ARR_0); } // unused with optimizations break; - case DFND: TOPs; // (u32* bc, Scope* sc, Block* bl, S) + case DFND: TOPs; // (u32* bc, Scope* sc, Block* bl) Block* bl = blocks[*bc++]; u64 fn = (u64)(bl->ty==0? i_DFND_0 : bl->ty==1? i_DFND_1 : bl->ty==2? i_DFND_2 : NULL); if (fn==0) thrM("JIT: Bad DFND argument"); - IMM(R_A0,off); MOV(R_A1,r_SC); IMM(R_A2,bl); INV(3,1,fn); + GET(R_A3,-1,2); + IMM(R_A0,off); MOV(R_A1,r_SC); IMM(R_A2,bl); CCALL(fn); break; case OP1D: TOPp; GET(R_A1,1,1); IMM(R_A2,off); CCALL(i_OP1D); break; // (B f,B m, u32* bc) case OP2D: TOPp; GET(R_A1,1,0); GET(R_A2,2,1); IMM(R_A3,off); CCALL(i_OP2D); break; // (B f,B m, B g, u32* bc)