From b0d8bcb428948d8561d05c180680ce78af6662c8 Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 6 Apr 2023 22:39:52 +0300 Subject: [PATCH] add argument passing to makeOptBranch --- src/singeli/src/base.singeli | 6 ++++-- src/singeli/src/search.singeli | 2 +- src/singeli/src/squeeze.singeli | 12 ++++++------ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index 58f90119..1daf174b 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -239,5 +239,7 @@ def eachx{F, ...args} = { each{F, ...each{{x} => {if (istup{x}) x; else l**x}, args}} } -def makeregs{v, n} = @collect(n) { reg:=v } -def makeregs{T, n & istype{T}} = @collect(n) { reg:=undefined{T} } +def undef{T, n & istype{T}} = @collect(n) undef{T} +def undef{Ts & istup{Ts}} = each{undef, Ts} +def undef{x:T} = undef{T} +def undef{T & istype{T}} = { reg:=undefined{T} } diff --git a/src/singeli/src/search.singeli b/src/singeli/src/search.singeli index 7302474e..30758074 100644 --- a/src/singeli/src/search.singeli +++ b/src/singeli/src/search.singeli @@ -12,7 +12,7 @@ include './mask' def findFirst{C, M, F, ...v1} = { def exit = makelabel{} - def args = each{{c:T}=>{ a:=undefined{T} }, M{...each{{c}=>tupsel{0,c}, v1}}} + def args = undef{M{...each{{c}=>tupsel{0,c}, v1}}} def am = tuplen{tupsel{0,v1}} each{{last, ...v2} => { if (last or C{...v2}) { diff --git a/src/singeli/src/squeeze.singeli b/src/singeli/src/squeeze.singeli index 1d22a8e2..8c9909d9 100644 --- a/src/singeli/src/squeeze.singeli +++ b/src/singeli/src/squeeze.singeli @@ -43,13 +43,14 @@ def anyNonChar{M, x:T & isvec{T} & hasarch{'X86_64'}} = { -def makeOptBranch{enable, F} = { +def makeOptBranch{enable, Ts, F} = { if (enable) { + def args = undef{Ts} def skip = makelabel{}; goto{skip} def start = setlabel{} - F{} + F{...args} setlabel{skip} - start + {...vs} => { each{=, args, vs}; goto{start} } } else { 'not defined' } @@ -105,8 +106,7 @@ fn squeeze{vw, X, CHR, B}(x0:*void, len:Size) : u32 = { }} 0 } else { # i16, i32, f64 - iCont:Size = 0 - def case_B = makeOptBranch{B, {} => { + def case_B = makeOptBranch{B, tup{Size}, {iCont} => { maskedLoop{bulk, iCont, len, {i, M} => { def XU = [bulk]u64 v:= XU ~~ loadBatch{xp, i, XV} @@ -160,7 +160,7 @@ fn squeeze{vw, X, CHR, B}(x0:*void, len:Size) : u32 = { else ~homAll{tree_fold{&, each{==, as, bs}}} } if (cond) { # is any not an integer - if (B) { iCont=tupsel{0, is}; goto{case_B} } # if B, need to give an even more special result + if (B) case_B{tupsel{0, is}} # if B, need to give an even more special result else return{0xffff_ffff} # else, not integer => float } int