update Singeli things
This commit is contained in:
parent
f700a3e150
commit
089e2a38c6
@ -1 +1 @@
|
|||||||
Subproject commit 0bc519ccbbe4051204d40bfc861a5bed7132e95f
|
Subproject commit e6d3b11e59eea7614307a37b27e7f10f4d3d04b8
|
||||||
@ -77,7 +77,8 @@ def __mul{a:T,b:T & T==[8]f32} = emit{T, '_mm256_mul_ps', a, b}
|
|||||||
def __div{a:T,b:T & T==[8]f32} = emit{T, '_mm256_div_ps', a, b}
|
def __div{a:T,b:T & T==[8]f32} = emit{T, '_mm256_div_ps', a, b}
|
||||||
def max{a:T,b:T & T==[8]f32} = emit{T, '_mm256_max_ps', a, b}
|
def max{a:T,b:T & T==[8]f32} = emit{T, '_mm256_max_ps', a, b}
|
||||||
def min{a:T,b:T & T==[8]f32} = emit{T, '_mm256_min_ps', a, b}
|
def min{a:T,b:T & T==[8]f32} = emit{T, '_mm256_min_ps', a, b}
|
||||||
def sqrt{a:T,b:T & T==[8]f32} = emit{T, '_mm256_sqrt_ps', a, b}
|
def sqrt{a:[8]f32} = emit{[8]f32, '_mm256_sqrt_ps', a}
|
||||||
|
def rsqrt{a:[8]f32} = emit{[8]f32, '_mm256_rsqrt_ps', a}
|
||||||
def abs{a:[8]f32} = emit{[8]f32, '_mm256_and_ps', a, v2f{[8]u32 ** 0x7FFFFFFF}}
|
def abs{a:[8]f32} = emit{[8]f32, '_mm256_and_ps', a, v2f{[8]u32 ** 0x7FFFFFFF}}
|
||||||
def floor{a:[8]f32} = emit{[8]f32, '_mm256_floor_ps', a}
|
def floor{a:[8]f32} = emit{[8]f32, '_mm256_floor_ps', a}
|
||||||
def ceil{a:[8]f32} = emit{[8]f32, '_mm256_ceil_ps', a}
|
def ceil{a:[8]f32} = emit{[8]f32, '_mm256_ceil_ps', a}
|
||||||
@ -89,7 +90,8 @@ def __mul{a:T,b:T & T==[4]f64} = emit{T, '_mm256_mul_pd', a, b}
|
|||||||
def __div{a:T,b:T & T==[4]f64} = emit{T, '_mm256_div_pd', a, b}
|
def __div{a:T,b:T & T==[4]f64} = emit{T, '_mm256_div_pd', a, b}
|
||||||
def max{a:T,b:T & T==[4]f64} = emit{T, '_mm256_max_pd', a, b}
|
def max{a:T,b:T & T==[4]f64} = emit{T, '_mm256_max_pd', a, b}
|
||||||
def min{a:T,b:T & T==[4]f64} = emit{T, '_mm256_min_pd', a, b}
|
def min{a:T,b:T & T==[4]f64} = emit{T, '_mm256_min_pd', a, b}
|
||||||
def sqrt{a:T,b:T & T==[4]f64} = emit{T, '_mm256_sqrt_pd', a, b}
|
def sqrt{a:[4]f64} = emit{[4]f64, '_mm256_sqrt_pd', a}
|
||||||
|
def rsqrt{a:[4]f64} = emit{[4]f64, '_mm256_rsqrt_pd', a}
|
||||||
def abs{a:[4]f64} = emit{[4]f64, '_mm256_and_pd', a, v2d{[4]u64 ** ((cast{u64,1}<<63)-1)}}
|
def abs{a:[4]f64} = emit{[4]f64, '_mm256_and_pd', a, v2d{[4]u64 ** ((cast{u64,1}<<63)-1)}}
|
||||||
def floor{a:[4]f64} = emit{[4]f64, '_mm256_floor_pd', a}
|
def floor{a:[4]f64} = emit{[4]f64, '_mm256_floor_pd', a}
|
||||||
def ceil{a:[4]f64} = emit{[4]f64, '_mm256_ceil_pd', a}
|
def ceil{a:[4]f64} = emit{[4]f64, '_mm256_ceil_pd', a}
|
||||||
|
|||||||
@ -188,3 +188,4 @@ def eachx{F, ...args} = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def makeregs{v, n} = @collect(n) { reg:=v }
|
def makeregs{v, n} = @collect(n) { reg:=v }
|
||||||
|
def makeregs{T, n & istype{T}} = @collect(n) { reg:=undefined{T} }
|
||||||
|
|||||||
@ -122,6 +122,32 @@ def __sub{a:T,b:T & w128i{T, 32}} = emit{T, '_mm_sub_epi32', a, b}
|
|||||||
def __sub{a:T,b:T & w128i{T, 64}} = emit{T, '_mm_sub_epi64', a, b}
|
def __sub{a:T,b:T & w128i{T, 64}} = emit{T, '_mm_sub_epi64', a, b}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# f32 arith
|
||||||
|
def __add{a:T,b:T & T==[4]f32} = emit{T, '_mm_add_ps', a, b}
|
||||||
|
def __sub{a:T,b:T & T==[4]f32} = emit{T, '_mm_sub_ps', a, b}
|
||||||
|
def __mul{a:T,b:T & T==[4]f32} = emit{T, '_mm_mul_ps', a, b}
|
||||||
|
def __div{a:T,b:T & T==[4]f32} = emit{T, '_mm_div_ps', a, b}
|
||||||
|
def max{a:T,b:T & T==[4]f32} = emit{T, '_mm_max_ps', a, b}
|
||||||
|
def min{a:T,b:T & T==[4]f32} = emit{T, '_mm_min_ps', a, b}
|
||||||
|
def sqrt{a:[4]f32} = emit{[4]f32, '_mm_sqrt_ps', a}
|
||||||
|
def rsqrt{a:[4]f32} = emit{[4]f32, '_mm_rsqrt_ps', a}
|
||||||
|
def abs{a:[4]f32} = emit{[4]f32, '_mm_and_ps', a, v2f{[2]u32 ** 0x7FFFFFFF}}
|
||||||
|
|
||||||
|
# f64 arith
|
||||||
|
def __add{a:T,b:T & T==[2]f64} = emit{T, '_mm_add_pd', a, b}
|
||||||
|
def __sub{a:T,b:T & T==[2]f64} = emit{T, '_mm_sub_pd', a, b}
|
||||||
|
def __mul{a:T,b:T & T==[2]f64} = emit{T, '_mm_mul_pd', a, b}
|
||||||
|
def __div{a:T,b:T & T==[2]f64} = emit{T, '_mm_div_pd', a, b}
|
||||||
|
def max{a:T,b:T & T==[2]f64} = emit{T, '_mm_max_pd', a, b}
|
||||||
|
def min{a:T,b:T & T==[2]f64} = emit{T, '_mm_min_pd', a, b}
|
||||||
|
def sqrt{a:[2]f64} = emit{[2]f64, '_mm_sqrt_pd', a}
|
||||||
|
def rsqrt{a:[2]f64} = emit{[2]f64, '_mm_rsqrt_pd', a}
|
||||||
|
def abs{a:[2]f64} = emit{[2]f64, '_mm_and_pd', a, v2d{[2]u64 ** ((cast{u64,1}<<63)-1)}}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# mask stuff
|
# mask stuff
|
||||||
def andAllZero{x:T, y:T & w128i{T}} = emit{u1, '_mm_testz_si128', x, y}
|
def andAllZero{x:T, y:T & w128i{T}} = emit{u1, '_mm_testz_si128', x, y}
|
||||||
|
|
||||||
@ -152,6 +178,12 @@ def extract{x:T, i & w128i{T, 8} & knum{i}} = emit{eltype{T}, '_mm_extract_epi8'
|
|||||||
def extract{x:T, i & w128i{T,32} & knum{i}} = emit{eltype{T}, '_mm_extract_epi32', x, i}
|
def extract{x:T, i & w128i{T,32} & knum{i}} = emit{eltype{T}, '_mm_extract_epi32', x, i}
|
||||||
def extract{x:T, i & w128i{T,64} & knum{i}} = emit{eltype{T}, '_mm_extract_epi64', x, i}
|
def extract{x:T, i & w128i{T,64} & knum{i}} = emit{eltype{T}, '_mm_extract_epi64', x, i}
|
||||||
|
|
||||||
|
# float
|
||||||
|
def floor{a:[4]f32} = emit{[4]f32, '_mm_floor_ps', a}
|
||||||
|
def ceil{a:[4]f32} = emit{[4]f32, '_mm_ceil_ps', a}
|
||||||
|
def floor{a:[2]f64} = emit{[2]f64, '_mm_floor_pd', a}
|
||||||
|
def ceil{a:[2]f64} = emit{[2]f64, '_mm_ceil_pd', a}
|
||||||
|
|
||||||
# conversion
|
# conversion
|
||||||
def widen{T==[8]u16, x:X & X==[16]u8} = emit{T, '_mm_cvtepu8_epi16', x}; def widen{T==[8]i16, x:X & X==[16]i8} = emit{T, '_mm_cvtepi8_epi16', x}
|
def widen{T==[8]u16, x:X & X==[16]u8} = emit{T, '_mm_cvtepu8_epi16', x}; def widen{T==[8]i16, x:X & X==[16]i8} = emit{T, '_mm_cvtepi8_epi16', x}
|
||||||
def widen{T==[4]u32, x:X & X==[16]u8} = emit{T, '_mm_cvtepu8_epi32', x}; def widen{T==[4]i32, x:X & X==[16]i8} = emit{T, '_mm_cvtepi8_epi32', x}
|
def widen{T==[4]u32, x:X & X==[16]u8} = emit{T, '_mm_cvtepu8_epi32', x}; def widen{T==[4]i32, x:X & X==[16]i8} = emit{T, '_mm_cvtepi8_epi32', x}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user