better Singeli abs & absu definitions
This commit is contained in:
parent
c3fe3c5b42
commit
6a0385b44b
@ -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}
|
||||
|
||||
@ -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}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user