kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

commit d65dff134f3b40c069cf508c915d2adfec1acb9b
parent ebcbfd26454739f75d9c8c9db0dc08c993ff9ddc
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Tue, 26 Jul 2016 15:16:08 +0300

Small improvements and fixes

Diffstat:
Minclude/kfr/base/abs.hpp | 8++++----
Minclude/kfr/base/function.hpp | 8++++----
Minclude/kfr/base/sqrt.hpp | 6+++---
3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/include/kfr/base/abs.hpp b/include/kfr/base/abs.hpp @@ -50,10 +50,10 @@ KFR_SINTRIN u16sse abs(u16sse x) { return x; } KFR_SINTRIN u8sse abs(u8sse x) { return x; } #if defined CID_ARCH_AVX2 -KFR_SINTRIN i64avx abs(i64avx value) { return select(x >= 0, x, -x); } -KFR_SINTRIN i32avx abs(i32avx value) { return _mm256_abs_epi32(*value); } -KFR_SINTRIN i16avx abs(i16avx value) { return _mm256_abs_epi16(*value); } -KFR_SINTRIN i8avx abs(i8avx value) { return _mm256_abs_epi8(*value); } +KFR_SINTRIN i64avx abs(i64avx x) { return select(x >= 0, x, -x); } +KFR_SINTRIN i32avx abs(i32avx x) { return _mm256_abs_epi32(*x); } +KFR_SINTRIN i16avx abs(i16avx x) { return _mm256_abs_epi16(*x); } +KFR_SINTRIN i8avx abs(i8avx x) { return _mm256_abs_epi8(*x); } KFR_SINTRIN u64avx abs(u64avx x) { return x; } KFR_SINTRIN u32avx abs(u32avx x) { return x; } KFR_SINTRIN u16avx abs(u16avx x) { return x; } diff --git a/include/kfr/base/function.hpp b/include/kfr/base/function.hpp @@ -143,7 +143,7 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x) } #define KFR_HANDLE_SCALAR_1(fn) \ template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN T fn(T a) \ + KFR_SINTRIN auto fn(T a) \ { \ return fn(make_vector(a))[0]; \ } @@ -229,7 +229,7 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x) } #define KFR_HANDLE_SCALAR_2(fn) \ template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN T fn(T a, T b) \ + KFR_SINTRIN auto fn(T a, T b) \ { \ return fn(make_vector(a), make_vector(b))[0]; \ } @@ -247,7 +247,7 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x) } #define KFR_HANDLE_SCALAR_3(fn) \ template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN T fn(T a, T b, T c) \ + KFR_SINTRIN auto fn(T a, T b, T c) \ { \ return fn(make_vector(a), make_vector(b), make_vector(c))[0]; \ } @@ -265,7 +265,7 @@ KFR_SINTRIN vec<T, Nout> expand_simd(vec<T, N> x) } #define KFR_HANDLE_SCALAR_4(fn) \ template <typename T, KFR_ENABLE_IF(is_numeric<T>::value)> \ - KFR_SINTRIN T fn(T a, T b, T c, T d) \ + KFR_SINTRIN auto fn(T a, T b, T c, T d) \ { \ return fn(make_vector(a), make_vector(b), make_vector(c), make_vector(d))[0]; \ } diff --git a/include/kfr/base/sqrt.hpp b/include/kfr/base/sqrt.hpp @@ -47,10 +47,10 @@ KFR_HANDLE_ALL_SIZES_FLT_1(sqrt) #else // fallback -template <typename T, size_t N> -KFR_SINTRIN vec<T, N> sqrt(vec<T, N> x) +template <typename T, size_t N, typename Tout = flt_type<T>> +KFR_SINTRIN vec<Tout, N> sqrt(vec<T, N> x) { - return apply([](T x) { return std::sqrt(x); }, x); + return apply([](T x) { return std::sqrt(static_cast<Tout>(x)); }, x); } #endif KFR_HANDLE_SCALAR_1(sqrt)