From 60d3ba8c64bbf2defb83017bc7374d488990ac4f Mon Sep 17 00:00:00 2001 From: dzaima Date: Sun, 20 Mar 2022 00:28:44 +0200 Subject: [PATCH] singeli collect --- src/jit/nvm_x86_64.c | 2 +- src/singeli/src/base.singeli | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index a08f8fbd..32b0e04f 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -603,7 +603,7 @@ Nvm_res m_nvm(Body* body) { if (sz==0 ) { TOPs; CCALL(i_ARR_0); } // unused with optimizations else if (sz==1 && o) { TOPp; GET(R_A3,0,2); CCALL(m_vec1); } // (B a) else if (sz==2 && o) { TOPpR(R_A1); GET(R_A0,1,1); CCALL(m_vec2); } // (B a, B b) - else { TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_ARR_p); } // (B a, i64 sz, S) + else { TOPp; IMM(R_A1, sz); lGPos=SPOSq(1-sz); INV(2,0,i_ARR_p); } // (B a, i64 sz, S) break; case DFND0: case DFND1: case DFND2: TOPs; // (u32* bc, Scope* sc, Block* bl) Block* bl = (Block*)L64; diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index 9148f4c2..df87e03a 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -39,6 +39,14 @@ def unroll{vars,begin,end,block & knum{begin} & knum{end}} = { } f{begin,end} } +def collect{vars,begin,end,block & knum{begin} & knum{end}} = { + def f{i,l & i==l} = tup{} + def f{i,l & i!=l} = { + def r = exec{i, vars, block} + merge{tup{r}, f{i+1, l}} + } + f{begin,end} +} def for{vars,begin,end,block} = { i:u64 = begin while (i < end) {