From 66175403333bee518d276ea76758a63bf32e89be Mon Sep 17 00:00:00 2001 From: dzaima Date: Wed, 25 Jun 2025 21:38:31 +0300 Subject: [PATCH] add basic large constant replicate base-case --- src/singeli/src/replicate.singeli | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/singeli/src/replicate.singeli b/src/singeli/src/replicate.singeli index 734bdc03..5fb6dc74 100644 --- a/src/singeli/src/replicate.singeli +++ b/src/singeli/src/replicate.singeli @@ -65,7 +65,13 @@ def basic_rep = incl{2, 7} if_inline (not (hasarch{'SSSE3'} or hasarch{'AARCH64'})) { fn rep_const{T}(wv:u64, x:*void, r:*void, n:u64) : void = { - rep_by_scan{T, cast_i{usz,wv}, x, r, cast_i{usz, wv*n}} + assert{wv>=2} + if (width{T} < 32 and wv < 128/width{T}) { + rep_by_scan{T, cast_i{usz, wv}, x, r, cast_i{usz, wv*n}} + } else { + rw := *T~~r + @for (v in *T~~x over n) { @for (rw over wv) rw = v; rw += wv } + } } } else {