mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-04-20 08:39:37 +08:00
Don't use generic sign function for sign(complex) unless it is vectorizable
This commit is contained in:
parent
c0d6a72611
commit
462758e8a3
@ -1146,7 +1146,8 @@ struct psign_impl<Packet, std::enable_if_t<!NumTraits<typename unpacket_traits<P
|
||||
|
||||
// \internal \returns the the sign of a complex number z, defined as z / abs(z).
|
||||
template <typename Packet>
|
||||
struct psign_impl<Packet, std::enable_if_t<NumTraits<typename unpacket_traits<Packet>::type>::IsComplex>> {
|
||||
struct psign_impl<Packet, std::enable_if_t<NumTraits<typename unpacket_traits<Packet>::type>::IsComplex &&
|
||||
unpacket_traits<Packet>::vectorizable>> {
|
||||
static EIGEN_DEVICE_FUNC inline Packet run(const Packet& a) {
|
||||
typedef typename unpacket_traits<Packet>::type Scalar;
|
||||
typedef typename Scalar::value_type RealScalar;
|
||||
|
@ -930,7 +930,7 @@ struct functor_traits<scalar_sign_op<Scalar> >
|
||||
NumTraits<Scalar>::IsComplex
|
||||
? ( 8*NumTraits<Scalar>::MulCost ) // roughly
|
||||
: ( 3*NumTraits<Scalar>::AddCost),
|
||||
PacketAccess = packet_traits<Scalar>::HasSign
|
||||
PacketAccess = packet_traits<Scalar>::HasSign && packet_traits<Scalar>::Vectorizable
|
||||
};
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user