diff --git a/src/celeritas/optical/OpticalGenData.hh b/src/celeritas/optical/OpticalGenData.hh index 1e37507169..0e50eee316 100644 --- a/src/celeritas/optical/OpticalGenData.hh +++ b/src/celeritas/optical/OpticalGenData.hh @@ -42,7 +42,7 @@ struct OpticalGenParamsData bool cerenkov{false}; //!< Whether Cerenkov is enabled bool scintillation{false}; //!< Whether scintillation is enabled - real_type capacity{0}; //!< Distribution data buffer capacity + size_type capacity{0}; //!< Distribution data buffer capacity //// METHODS //// diff --git a/src/corecel/sys/ScopedSignalHandler.cc b/src/corecel/sys/ScopedSignalHandler.cc index 4799fb0c49..9b7007cde3 100644 --- a/src/corecel/sys/ScopedSignalHandler.cc +++ b/src/corecel/sys/ScopedSignalHandler.cc @@ -26,7 +26,9 @@ sig_atomic_t volatile g_celer_signal_bits_ = 0; //! Set the bit corresponding to a signal extern "C" void celer_set_signal(int signal) { +#ifndef _WIN32 CELER_ASSERT(signal >= 0 && signal < static_cast(sizeof(int) * 8 - 1)); +#endif g_celer_signal_bits_ |= (1 << signal); } diff --git a/src/orange/MatrixUtils.cc b/src/orange/MatrixUtils.cc index 6032a3697a..b572ba595f 100644 --- a/src/orange/MatrixUtils.cc +++ b/src/orange/MatrixUtils.cc @@ -16,6 +16,26 @@ using Mat3 = celeritas::SquareMatrixReal3; namespace celeritas { +namespace +{ +//---------------------------------------------------------------------------// +//! Use fused multiply-add for floating point calculations +template::value, bool> = true> +T generic_fma(T a, T b, T y) +{ + return std::fma(a, b, y); +} + +//! Don't use FMA for integers +template::value, bool> = false> +T generic_fma(T a, T b, T y) +{ + return a * b + y; +} + +//---------------------------------------------------------------------------// +} // namespace + //---------------------------------------------------------------------------// /*! * Calculate the determiniant of a 3x3 matrix. @@ -73,7 +93,7 @@ gemm(SquareMatrix const& a, SquareMatrix const& b) // Accumulate dot products for (size_type k = 0; k != N; ++k) { - result[i][j] = std::fma(b[k][j], a[i][k], result[i][j]); + result[i][j] = generic_fma(b[k][j], a[i][k], result[i][j]); } } } diff --git a/src/orange/orangeinp/detail/PostfixLogicBuilder.cc b/src/orange/orangeinp/detail/PostfixLogicBuilder.cc index d770ceda4d..4fd8204fe5 100644 --- a/src/orange/orangeinp/detail/PostfixLogicBuilder.cc +++ b/src/orange/orangeinp/detail/PostfixLogicBuilder.cc @@ -7,6 +7,9 @@ //---------------------------------------------------------------------------// #include "PostfixLogicBuilder.hh" +#include +#include + #include "corecel/cont/VariantUtils.hh" #include "corecel/math/Algorithms.hh" #include "orange/OrangeTypes.hh"