diff --git a/src/singeli/src/avx.singeli b/src/singeli/src/avx.singeli index cb59b3eb..374401d8 100644 --- a/src/singeli/src/avx.singeli +++ b/src/singeli/src/avx.singeli @@ -1,4 +1,5 @@ -def v2i{x:T & w256{T}} = [32]u8 ~~ x # for compact casting for the annoying intrinsic type system +# compact casting for the annoying intrinsic type system +def v2i{x:T & w256{T}} = if(isint{eltype{T}}) x else [32]u8 ~~ x def v2f{x:T & w256{T}} = [8]f32 ~~ x def v2d{x:T & w256{T}} = [4]f64 ~~ x diff --git a/src/singeli/src/base.singeli b/src/singeli/src/base.singeli index ecdb3726..931c5cae 100644 --- a/src/singeli/src/base.singeli +++ b/src/singeli/src/base.singeli @@ -6,6 +6,7 @@ oper ~~ reinterpret infix right 55 oper ** broadcast infix right 55 def Size = u64 def load{x} = *x +def reinterpret{T, x:X & T==X} = x def exportN{f, ...ns} = each{{n} => export{n, f}, ns} def exportT{name, fs} = { v:*type{tupsel{0,fs}} = fs; export{name, v} } diff --git a/src/singeli/src/sse2.singeli b/src/singeli/src/sse2.singeli index 0c51c81b..7c2d53e3 100644 --- a/src/singeli/src/sse2.singeli +++ b/src/singeli/src/sse2.singeli @@ -1,4 +1,5 @@ -def v2i{x:T & w128{T}} = [16]u8 ~~ x # for compact casting for the annoying intrinsic type system +# compact casting for the annoying intrinsic type system +def v2i{x:T & w128{T}} = if(isint{eltype{T}}) x else [16]u8 ~~ x def v2f{x:T & w128{T}} = [4]f32 ~~ x def v2d{x:T & w128{T}} = [2]f64 ~~ x