diff options
author | Antonio Sanchez <cantonios@google.com> | 2021-01-22 11:10:54 -0800 |
---|---|---|
committer | Antonio Sanchez <cantonios@google.com> | 2021-01-22 11:10:54 -0800 |
commit | f0e46ed5d41eeb450cbcbdb1ce3233d524ad3acd (patch) | |
tree | b2e862ad5f8c0788db4f3c39c0732db64fb5e217 /Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h | |
parent | f19bcffee6b8018ca101ceb370e6e550a940289f (diff) |
Fix pow and other cwise ops for half/bfloat16.
The new `generic_pow` implementation was failing for half/bfloat16 since
their construction from int/float is not `constexpr`. Modified
in `GenericPacketMathFunctions` to remove `constexpr`.
While adding tests for half/bfloat16, found other issues related to
implicit conversions.
Also needed to implement `numext::arg` for non-integer, non-complex,
non-float/double/long double types. These seem to be implicitly
converted to `std::complex<T>`, which then fails for half/bfloat16.
Diffstat (limited to 'Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h')
-rw-r--r-- | Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h index 69c92a8cc..e3e91f4ab 100644 --- a/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +++ b/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h @@ -804,8 +804,8 @@ EIGEN_STRONG_INLINE void veltkamp_splitting(const Packet& x, Packet& x_hi, Packet& x_lo) { typedef typename unpacket_traits<Packet>::type Scalar; EIGEN_CONSTEXPR int shift = (NumTraits<Scalar>::digits() + 1) / 2; - EIGEN_CONSTEXPR Scalar shift_scale = Scalar(uint64_t(1) << shift); - Packet gamma = pmul(pset1<Packet>(shift_scale + 1), x); + Scalar shift_scale = Scalar(uint64_t(1) << shift); // Scalar constructor not necessarily constexpr. + Packet gamma = pmul(pset1<Packet>(shift_scale + Scalar(1)), x); #ifdef EIGEN_HAS_SINGLE_INSTRUCTION_MADD x_hi = pmadd(pset1<Packet>(-shift_scale), x, gamma); #else |