diff --git a/Eigen/src/Core/arch/AltiVec/PacketMath.h b/Eigen/src/Core/arch/AltiVec/PacketMath.h index c14d268c2..4cebd8fcb 100644 --- a/Eigen/src/Core/arch/AltiVec/PacketMath.h +++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h @@ -255,7 +255,11 @@ struct packet_traits : default_packet_traits { HasSub = 1, HasShift = 1, HasMul = 1, +#ifdef _ARCH_PWR10 + HasDiv = 1, +#else HasDiv = 0, +#endif HasBlend = 1, HasCmp = 1 }; @@ -1043,9 +1047,16 @@ template<> EIGEN_STRONG_INLINE Packet4f pdiv(const Packet4f& a, const #endif } -template<> EIGEN_STRONG_INLINE Packet4i pdiv(const Packet4i& /*a*/, const Packet4i& /*b*/) -{ eigen_assert(false && "packet integer division are not supported by AltiVec"); +template<> EIGEN_STRONG_INLINE Packet4i pdiv(const Packet4i& a, const Packet4i& b) +{ +#ifdef _ARCH_PWR10 + return vec_div(a, b); +#else + EIGEN_UNUSED_VARIABLE(a); + EIGEN_UNUSED_VARIABLE(b); + eigen_assert(false && "packet integer division are not supported by AltiVec"); return pset1(0); +#endif } // for some weird raisons, it has to be overloaded for packet of integers