update Singeli things

This commit is contained in:
dzaima 2023-02-16 21:31:19 +02:00
parent f700a3e150
commit 089e2a38c6
4 changed files with 38 additions and 3 deletions

@ -1 +1 @@
Subproject commit 0bc519ccbbe4051204d40bfc861a5bed7132e95f Subproject commit e6d3b11e59eea7614307a37b27e7f10f4d3d04b8

View File

@ -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}

View File

@ -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} }

View File

@ -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}