diff --git a/src/singeli/src/avx2.singeli b/src/singeli/src/avx2.singeli index 58e717e1..599e8673 100644 --- a/src/singeli/src/avx2.singeli +++ b/src/singeli/src/avx2.singeli @@ -70,10 +70,10 @@ 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:[32]i8 } = emit{[32]i8 , '_mm256_abs_epi8', a} -def abs{a:[16]i16} = emit{[16]i16, '_mm256_abs_epi16', a} -def abs{a:[ 8]i32} = emit{[ 8]i32, '_mm256_abs_epi32', a} -def absu{a & w256u{a}} = ty_u{abs{a}} +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 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} def __add{a:T,b:T & w256i{T, 16}} = emit{T, '_mm256_add_epi16', a, b}; def __sub{a:T,b:T & w256i{T, 16}} = emit{T, '_mm256_sub_epi16', a, b} diff --git a/src/singeli/src/sse2.singeli b/src/singeli/src/sse2.singeli index 7c8fef3f..13ee3289 100644 --- a/src/singeli/src/sse2.singeli +++ b/src/singeli/src/sse2.singeli @@ -138,10 +138,10 @@ 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:[16]i8 } = { def U=[16]u8; ty_s{min{U~~a, U**0 - U~~a}} } -def abs{a:[ 8]i16} = max{a, [8]i16**0 - a} -def abs{a:[ 4]i32} = { t:= a>>31; (t^a) - t } -def absu{a & w128u{a}} = ty_u{abs{a}} +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,32}} = { t:= a>>31; (t^a) - t } +def absu{a:T & w128i{T}} = ty_u{abs{a}} # saturating def __adds{a:T,b:T & T==[16]i8 } = emit{T, '_mm_adds_epi8', a, b}; def __adds{a:T,b:T & T==[16]u8 } = emit{T, '_mm_adds_epu8', a, b}