From b2c89979fe2d6ebf848a2129dd6e0c93e7d018cb Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 28 Apr 2025 02:01:19 +0300 Subject: [PATCH] exclude [k]u1 from vector type check helpers --- src/singeli/src/base.singeli | 33 ++++++++++++++++---------------- src/singeli/src/bitalign.singeli | 6 +++--- src/singeli/src/neon.singeli | 5 +---- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index 8d4741e4..3a649f81 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -101,25 +101,24 @@ def maxvalue{T if isunsigned{T}} = (1< B{V} and F{T} - {V=[_]T, w} => B{V} and F{T} and width{T}==w +# vector type checks (all disallow u1 element) +def genchk{W, F} = match { + {V=[_]T } => W{V} and F{T} + {V=[_]T, w} => W{V} and F{T} and width{T}==w {..._} => 0 } -def genchks{B} = each{genchk{B,.}, tup{isint, issigned, isunsigned, isfloat}} -def { w64i, w64s, w64u, w64f} = genchks{w64} -def {w128i,w128s,w128u,w128f} = genchks{w128} -def {w256i,w256s,w256u,w256f} = genchks{w256} -def {w512i,w512s,w512u,w512f} = genchks{w512} -def { veci, vecs, vecu, vecf} = genchks{veca} +def genchks{W} = each{genchk{W,.}, tup{ + {E} => E!=u1, # vece / no postfix + {E} => isint{E} and E!=u1, # veci + issigned, # vecs + {E} => isunsigned{E} and E!=u1, # vecu + isfloat, # vecf +}} +def { w64, w64i, w64s, w64u, w64f} = genchks{{V} => width{V} == 64} +def {w128, w128i,w128s,w128u,w128f} = genchks{{V} => width{V} == 128} +def {w256, w256i,w256s,w256u,w256f} = genchks{{V} => width{V} == 256} +def {w512, w512i,w512s,w512u,w512f} = genchks{{V} => width{V} == 512} +def {vece, veci, vecs, vecu, vecf} = genchks{{_} => 1} def trunc{T, x:U if isint{T} and isint{U} and width{T}<=width{U}} = emit{T, '', x} def trunc{T, x if knum{x}} = cast{T, x} diff --git a/src/singeli/src/bitalign.singeli b/src/singeli/src/bitalign.singeli index d7bafbe6..f1c0ace9 100644 --- a/src/singeli/src/bitalign.singeli +++ b/src/singeli/src/bitalign.singeli @@ -7,7 +7,7 @@ def shuf_impl{rw, ...iw, data} = assert{0, 'shuffling failed', ...data{'info'}} def type0{vs} = type{select{vs,0}} # new_shuf{v0:[k]E, v1:[k]E, ..., indices} : [length{indices}]E; -1 for zero, -2 for arbitrary -def new_shuf{...vs0 if vect{try_same_type{vs0,'!'}}, {...is}} = { # : [length{is}]E +def new_shuf{...vs0 if vece{try_same_type{vs0,'!'}}, {...is}} = { # : [length{is}]E def vs = each{ty_u, vs0} def vn = length{vs} def S = type0{vs} @@ -39,9 +39,9 @@ def new_shuf{...vs0 if vect{try_same_type{vs0,'!'}}, {...is}} = { # : [length{is re_el{E, shuf_impl{width{E}*ni, ...vn**width{S}, data}} } -def new_shuf{w if ktyp{w} or knum{w}, ...vs if vect{try_same_type{vs,'!'}} and (not vect{w} or width{w} == width{type0{vs}}), {...is}} = { +def new_shuf{w if ktyp{w} or knum{w}, ...vs if vece{try_same_type{vs,'!'}} and (not vece{w} or width{w} == width{type0{vs}}), {...is}} = { def S = type0{vs} - def D = if (vect{w}) w else re_el{if (primt{w}) w else ty_u{w}, S} + def D = if (vece{w}) w else re_el{if (primt{w}) w else ty_u{w}, S} S~~new_shuf{...each{~~{D,.}, vs}, is} } diff --git a/src/singeli/src/neon.singeli b/src/singeli/src/neon.singeli index 2116c13c..5c8dfd22 100644 --- a/src/singeli/src/neon.singeli +++ b/src/singeli/src/neon.singeli @@ -1,7 +1,4 @@ -def nvec{T} = vect{T} and (width{T}==64 or width{T}==128) -def nvec{T,w} = nvec{T} and elwidth{T}==w -def {nveci,nvecs,nvecu,nvecf} = genchks{nvec} - +def {nvec,nveci,nvecs,nvecu,nvecf} = genchks{{V} => width{V}==64 or width{V}==128} local def nty{T} = { def q = quality{T}