From 5018cf9b2e65ee86c30d219350c18f1ba16da2a5 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 1 Apr 2023 23:01:37 +0300 Subject: [PATCH] reduce unnecessary casts in C output --- src/singeli/src/avx.singeli | 3 ++- src/singeli/src/base.singeli | 1 + src/singeli/src/sse2.singeli | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) 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