stack management for DFND
This commit is contained in:
parent
9de843aeb5
commit
b1b3b7eed3
@ -106,9 +106,9 @@ INS B i_ARR_p(B el0, i64 sz GA1) { assert(sz>0);
|
|||||||
return withFill(r.b, m_f64(0));
|
return withFill(r.b, m_f64(0));
|
||||||
} else return r.b;
|
} 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_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 GA1) { GS_UPD;POS_UPD; return m_md1Block(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 GA1) { GS_UPD;POS_UPD; return m_md2Block(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_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_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); }
|
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)
|
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
|
else { TOPs; CCALL(i_ARR_0); } // unused with optimizations
|
||||||
break;
|
break;
|
||||||
case DFND: TOPs; // (u32* bc, Scope* sc, Block* bl, S)
|
case DFND: TOPs; // (u32* bc, Scope* sc, Block* bl)
|
||||||
Block* bl = blocks[*bc++];
|
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);
|
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");
|
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;
|
break;
|
||||||
case OP1D: TOPp; GET(R_A1,1,1); IMM(R_A2,off); CCALL(i_OP1D); break; // (B f,B m, u32* bc)
|
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)
|
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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user