diff --git a/Eigen/src/Core/GenericPacketMath.h b/Eigen/src/Core/GenericPacketMath.h index f8950eaf7..fc5d7570c 100644 --- a/Eigen/src/Core/GenericPacketMath.h +++ b/Eigen/src/Core/GenericPacketMath.h @@ -135,7 +135,14 @@ template struct unpacket_traits { typedef T type; typedef T half; - enum { size = 1, alignment = 1, vectorizable = false, masked_load_available = false, masked_store_available = false }; + typedef typename numext::get_integer_by_size::signed_type integer_packet; + enum { + size = 1, + alignment = alignof(T), + vectorizable = false, + masked_load_available = false, + masked_store_available = false + }; }; template diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h index 06901df1a..eed545c48 100644 --- a/Eigen/src/Core/arch/AltiVec/PacketMath.h +++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h @@ -3178,8 +3178,8 @@ struct packet_traits : default_packet_traits { HasMin = 1, HasMax = 1, HasAbs = 1, - HasSin = 0, - HasCos = 0, + HasSin = EIGEN_FAST_MATH, + HasCos = EIGEN_FAST_MATH, HasATan = 0, HasLog = 0, HasExp = 1, @@ -3214,10 +3214,11 @@ struct unpacket_traits { template <> struct unpacket_traits { typedef int64_t type; + typedef Packet2l half; enum { size = 2, alignment = Aligned16, - vectorizable = true, + vectorizable = false, masked_load_available = false, masked_store_available = false };