Skip to content

Commit

Permalink
weeded out internal compiler errors and warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
petiaccja committed Apr 15, 2021
1 parent 222a798 commit 8015f28
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 29 deletions.
8 changes: 1 addition & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,9 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-instr-generate -fcoverage-mapping -mllvm -enable-name-compression=false")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -lpthread")
if (CMAKE_SYSTEM_NAME MATCHES "Windows")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /permissive-")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} /PROFILE")
add_compile_definitions("-D_ITERATOR_DEBUG_LEVEL=1")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
endif()

set(THREADS_PREFER_PTHREAD_FLAG ON)
Expand Down
42 changes: 21 additions & 21 deletions include/dspbb/Primitives/SignalArithmetic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,87 +34,87 @@ void CheckSizes(const SignalR& r, const SignalT& a) {

template <class SignalR, class SignalT, class SignalU>
auto Multiply(SignalR&& r, const SignalT& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<SignalR> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
CheckSizes(r, a, b);
Multiply(r.Data(), a.Data(), b.Data(), r.Length());
}

template <class SignalR, class T, class SignalU>
auto Multiply(SignalR&& r, const T& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<SignalR> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
CheckSizes(r, b);
Multiply(r.Data(), a, b.Data(), r.Length());
}

template <class SignalR, class SignalT, class U>
auto Multiply(SignalR&& r, const SignalT& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<SignalR> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
CheckSizes(r, a);
Multiply(r.Data(), a.Data(), b, r.Length());
}


template <class SignalR, class SignalT, class SignalU>
auto Divide(SignalR&& r, const SignalT& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
CheckSizes(r, a, b);
Divide(r.Data(), a.Data(), b.Data(), r.Length());
}

template <class SignalR, class T, class SignalU>
auto Divide(SignalR&& r, const T& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
CheckSizes(r, b);
Divide(r.Data(), a, b.Data(), r.Length());
}

template <class SignalR, class SignalT, class U>
auto Divide(SignalR&& r, const SignalT& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
CheckSizes(r, a);
Divide(r.Data(), a.Data(), b, r.Length());
}


template <class SignalR, class SignalT, class SignalU>
auto Add(SignalR&& r, const SignalT& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
CheckSizes(r, a, b);
Add(r.Data(), a.Data(), b.Data(), r.Length());
}

template <class SignalR, class T, class SignalU>
auto Add(SignalR&& r, const T& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
CheckSizes(r, b);
Add(r.Data(), a, b.Data(), r.Length());
}

template <class SignalR, class SignalT, class U>
auto Add(SignalR&& r, const SignalT& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
CheckSizes(r, a);
Add(r.Data(), a.Data(), b, r.Length());
}


template <class SignalR, class SignalT, class SignalU>
auto Subtract(SignalR&& r, const SignalT& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT, SignalU>, void> {
CheckSizes(r, a, b);
Subtract(r.Data(), a.Data(), b.Data(), r.Length());
}

template <class SignalR, class T, class SignalU>
auto Subtract(SignalR&& r, const T& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalU> && !is_signal_like_v<T>, void> {
CheckSizes(r, b);
Subtract(r.Data(), a, b.Data(), r.Length());
}

template <class SignalR, class SignalT, class U>
auto Subtract(SignalR&& r, const SignalT& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(r)> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
-> std::enable_if_t<is_mutable_signal_v<SignalR&> && is_same_domain_v<SignalR, SignalT> && !is_signal_like_v<U>, void> {
CheckSizes(r, a);
Subtract(r.Data(), a.Data(), b, r.Length());
}
Expand All @@ -134,7 +134,7 @@ auto operator*(const SignalT& a, const SignalU& b) {
using R = decltype(std::declval<typename signal_traits<SignalT>::type>() * std::declval<typename signal_traits<SignalU>::type>());
constexpr auto Domain = signal_traits<SignalT>::domain;
Signal<R, Domain> r(a.Size());
Multiply(r, a, b);
Multiply<Signal<R, Domain>&, SignalT, SignalU>(r, a, b);
return r;
}

Expand Down Expand Up @@ -250,28 +250,28 @@ auto operator-(const T& a, const SignalU& b) {

template <class SignalT, class SignalU>
auto operator*=(SignalT&& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
Multiply(a, a, b);
return a;
}

template <class SignalT, class SignalU>
auto operator/=(SignalT&& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
Divide(a, a, b);
return a;
}

template <class SignalT, class SignalU>
auto operator+=(SignalT&& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
Add(a, a, b);
return a;
}

template <class SignalT, class SignalU>
auto operator-=(SignalT&& a, const SignalU& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_same_domain_v<SignalT, SignalU>, SignalT&> {
Subtract(a, a, b);
return a;
}
Expand All @@ -283,28 +283,28 @@ auto operator-=(SignalT&& a, const SignalU& b)

template <class SignalT, class U>
auto operator*=(SignalT&& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
Multiply(a, a, b);
return a;
}

template <class SignalT, class U>
auto operator/=(SignalT&& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
Divide(a, a, b);
return a;
}

template <class SignalT, class U>
auto operator+=(SignalT&& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
Add(a, a, b);
return a;
}

template <class SignalT, class U>
auto operator-=(SignalT&& a, const U& b)
-> std::enable_if_t<is_mutable_signal_v<decltype(a)> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
-> std::enable_if_t<is_mutable_signal_v<SignalT&> && is_signal_like_v<std::decay_t<SignalT>> && !is_signal_like_v<U>, SignalT&> {
Subtract(a, a, b);
return a;
}
Expand Down
3 changes: 3 additions & 0 deletions include/dspbb/Vectorization/ComplexFunctions.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#pragma once

#pragma warning(push)
#pragma warning(disable: 4800)
#include <xsimd/xsimd.hpp>
#pragma warning(pop)

namespace dspbb {
namespace complex_functions {
Expand Down
3 changes: 3 additions & 0 deletions include/dspbb/Vectorization/Kernels.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#pragma once

#pragma warning(push)
#pragma warning(disable : 4800)
#include <xsimd/xsimd.hpp>
#pragma warning(pop)


namespace dspbb {
Expand Down
3 changes: 3 additions & 0 deletions include/dspbb/Vectorization/MathFunctions.hpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
#pragma once

#include <cmath>
#pragma warning(push)
#pragma warning(disable : 4800)
#include <xsimd/xsimd.hpp>
#pragma warning(pop)

namespace dspbb {
namespace math_functions {
Expand Down
2 changes: 1 addition & 1 deletion test/Test_Polyphase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ using namespace dspbb;


TEST_CASE("Polyphase upsample", "[Polyphase]") {
constexpr int factor = 4;
constexpr unsigned factor = 4;
const auto filter = FirLowPassWindowed(22050.f, factor * 44100, HammingWindow<float>(128));
const PolyphaseFilter<float> polyphase{ AsConstView(filter), factor };

Expand Down

0 comments on commit 8015f28

Please sign in to comment.