From 0486adccb58c8a2f4d34835262f6c37b9966bb31 Mon Sep 17 00:00:00 2001 From: dzaima Date: Thu, 20 Jul 2023 00:19:54 +0300 Subject: [PATCH] fix signedness of abs{x} --- src/singeli/src/avx2.singeli | 6 +++--- src/singeli/src/sse2.singeli | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/singeli/src/avx2.singeli b/src/singeli/src/avx2.singeli index f9dbb3cd..484d49aa 100644 --- a/src/singeli/src/avx2.singeli +++ b/src/singeli/src/avx2.singeli @@ -76,9 +76,9 @@ def __mul{a:T,b:T & [ 8]i32==T} = emit{T, '_mm256_mullo_epi32', a, b} def mul32{a:T,b:T & [ 4]i64==T} = emit{T, '_mm256_mul_epi32', a, b} # reads only low 32 bits of arguments def mul32{a:T,b:T & [ 4]u64==T} = emit{T, '_mm256_mul_epu32', a, b} # reads only low 32 bits of arguments -def abs{a:T & w256i{T,8 }} = emit{[32]i8 , '_mm256_abs_epi8', a} -def abs{a:T & w256i{T,16}} = emit{[16]i16, '_mm256_abs_epi16', a} -def abs{a:T & w256i{T,32}} = emit{[ 8]i32, '_mm256_abs_epi32', a} +def abs{a:T & w256i{T,8 }} = emit{T, '_mm256_abs_epi8', a} +def abs{a:T & w256i{T,16}} = emit{T, '_mm256_abs_epi16', a} +def abs{a:T & w256i{T,32}} = emit{T, '_mm256_abs_epi32', a} def absu{a:T & w256i{T}} = ty_u{abs{a}} def __add{a:T,b:T & w256i{T, 8}} = emit{T, '_mm256_add_epi8', a, b}; def __sub{a:T,b:T & w256i{T, 8}} = emit{T, '_mm256_sub_epi8', a, b} diff --git a/src/singeli/src/sse2.singeli b/src/singeli/src/sse2.singeli index e595dc0f..0ab59a70 100644 --- a/src/singeli/src/sse2.singeli +++ b/src/singeli/src/sse2.singeli @@ -138,8 +138,8 @@ def min{a:T,b:T & w128u{T,16}} = a-subs{a,b} def min{a:T,b:T & T==[ 8]i16} = emit{T, '_mm_min_epi16', a, b}; def max{a:T,b:T & T==[ 8]i16} = emit{T, '_mm_max_epi16', a, b} def min{a:T,b:T & T==[16]u8 } = emit{T, '_mm_min_epu8', a, b}; def max{a:T,b:T & T==[16]u8 } = emit{T, '_mm_max_epu8', a, b} -def abs{a:T & w128i{T,8 }} = { def U=[16]u8; ty_s{min{U~~a, U**0 - U~~a}} } -def abs{a:T & w128i{T,16}} = max{a, [8]i16**0 - a} +def abs{a:T & w128i{T,8 }} = { def U=[16]u8; T~~min{U~~a, U**0 - U~~a} } +def abs{a:T & w128i{T,16}} = max{a, T**0 - a} def abs{a:T & w128i{T,32}} = { t:= a>>31; (t^a) - t } def absu{a:T & w128i{T}} = ty_u{abs{a}}