From 94cdc28ea9275aca009aa9bf4c4121d47411a5e4 Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 1 May 2025 19:36:13 +0300 Subject: [PATCH] hom_ones --- src/singeli/src/base.singeli | 3 +++ src/singeli/src/slash.singeli | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index 72b1fc0a..745b879b 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -294,6 +294,9 @@ def broadcast{V=[_]T, v} = vec_broadcast{V, if (knum{v}) v else promote{T,v}} def make{V=[_]_, ...xs} = vec_make{V, ...xs} def iota{V=[k]_} = make{V, ...range{k}} def absu{a:[_]_} = ty_u{__abs{a}} +def hom_ones{[k]E} = [k]E ** hom_ones{E} +def hom_ones{E if issigned{E}} = E ~~ -1 +def hom_ones{E if isunsigned{E}} = E ~~ maxvalue{E} def shuf = vec_shuffle diff --git a/src/singeli/src/slash.singeli b/src/singeli/src/slash.singeli index 3b0ac17e..509dc440 100644 --- a/src/singeli/src/slash.singeli +++ b/src/singeli/src/slash.singeli @@ -341,7 +341,7 @@ def pext_popc{x0:V, m0:V if hasarch{'PCLMUL'} and V==[2]u64} = { m := m0 x := x0 & m d := ~m << 1 # One bit of the position difference at x - c := V**tail{64} + c := hom_ones{V} @unroll (i to lb{scalwidth{V}}) { def sh = 1 << i def shift_at{v, s} = { v = (v&~s) | (v&s)>>sh }