16 #ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H 17 #define EIGEN_MATH_FUNCTIONS_ALTIVEC_H 87 static Packet2l p2l_1023 = { 1023, 1023 };
103 x =
pmax(x, p4f_min_norm_pos);
104 emm0 = vec_sr(reinterpret_cast<Packet4i>(x),
105 reinterpret_cast<Packet4ui>(p4i_23));
108 x =
pand(x, p4f_inv_mant_mask);
109 x =
por(x, p4f_half);
111 emm0 =
psub(emm0, p4i_0x7f);
120 Packet4f mask =
reinterpret_cast<Packet4f>(vec_cmplt(x, p4f_cephes_SQRTHF));
130 y =
pmadd(p4f_cephes_log_p0, x, p4f_cephes_log_p1);
131 y1 =
pmadd(p4f_cephes_log_p3, x, p4f_cephes_log_p4);
132 y2 =
pmadd(p4f_cephes_log_p6, x, p4f_cephes_log_p7);
133 y =
pmadd(y , x, p4f_cephes_log_p2);
134 y1 =
pmadd(y1, x, p4f_cephes_log_p5);
135 y2 =
pmadd(y2, x, p4f_cephes_log_p8);
136 y =
pmadd(y, x3, y1);
137 y =
pmadd(y, x3, y2);
140 y1 =
pmul(e, p4f_cephes_log_q1);
141 tmp =
pmul(x2, p4f_half);
144 y2 =
pmul(e, p4f_cephes_log_q2);
148 x = vec_sel(x, p4f_minus_inf, iszero_mask);
149 x = vec_sel(p4f_minus_nan, x, isvalid_mask);
162 x =
pmax(
pmin(x, p4f_exp_hi), p4f_exp_lo);
165 fx =
pmadd(x, p4f_cephes_LOG2EF, p4f_half);
169 tmp =
pmul(fx, p4f_cephes_exp_C1);
177 y =
pmadd(y, x, p4f_cephes_exp_p1);
178 y =
pmadd(y, x, p4f_cephes_exp_p2);
179 y =
pmadd(y, x, p4f_cephes_exp_p3);
180 y =
pmadd(y, x, p4f_cephes_exp_p4);
181 y =
pmadd(y, x, p4f_cephes_exp_p5);
186 emm0 = vec_cts(fx, 0);
187 emm0 = vec_add(emm0, p4i_0x7f);
188 emm0 = vec_sl(emm0, reinterpret_cast<Packet4ui>(p4i_23));
193 return vec_sel(_x,
pmax(
pmul(y, reinterpret_cast<Packet4f>(emm0)), _x),
197 #ifndef EIGEN_COMP_CLANG 206 #ifndef EIGEN_COMP_CLANG 233 #if EIGEN_GNUC_AT_LEAST(5, 4) || \ 234 (EIGEN_GNUC_AT(6, 1) && __GNUC_PATCHLEVEL__ >= 1) 235 return vec_cts(x, 0);
238 memcpy(tmp, &x,
sizeof(tmp));
239 Packet2l l = {
static_cast<long long>(tmp[0]),
240 static_cast<long long>(tmp[1]) };
254 x =
pmax(
pmin(x, p2d_exp_hi), p2d_exp_lo);
257 fx =
pmadd(x, p2d_cephes_LOG2EF, p2d_half);
261 tmp =
pmul(fx, p2d_cephes_exp_C1);
269 px =
pmadd(px, x2, p2d_cephes_exp_p1);
270 px =
pmadd(px, x2, p2d_cephes_exp_p2);
274 qx =
pmadd(qx, x2, p2d_cephes_exp_q1);
275 qx =
pmadd(qx, x2, p2d_cephes_exp_q2);
276 qx =
pmadd(qx, x2, p2d_cephes_exp_q3);
279 x =
pmadd(p2d_2,x,p2d_1);
282 emm0 = ConvertToPacket2l(fx);
284 #ifdef __POWER8_VECTOR__ 285 emm0 = vec_add(emm0, p2l_1023);
286 emm0 = vec_sl(emm0, p2ul_52);
295 emm04i = vec_add(emm04i, p4i_1023);
296 emm04i = vec_sl(emm04i, reinterpret_cast<Packet4ui>(p4i_20));
298 0x14, 0x15, 0x16, 0x17, 0x00, 0x01, 0x02, 0x03,
299 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b };
301 emm0 =
reinterpret_cast<Packet2l>(vec_perm(p4i_ZERO, emm04i, perm));
303 emm0 =
reinterpret_cast<Packet2l>(vec_perm(emm04i, p4i_ZERO, perm));
311 return vec_sel(_x,
pmax(
pmul(x, reinterpret_cast<Packet2d>(emm0)), _x),
320 #endif // EIGEN_MATH_FUNCTIONS_ALTIVEC_H static _EIGEN_DECLARE_CONST_Packet4i(0x7f, 0x7f)
__vector unsigned char Packet16uc
EIGEN_DEVICE_FUNC Packet por(const Packet &a, const Packet &b)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet2d psqrt< Packet2d >(const Packet2d &x)
static _EIGEN_DECLARE_CONST_Packet4f_FROM_INT(inv_mant_mask, ~0x7f800000)
__vector unsigned int Packet4ui
#define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
__vector long long Packet2l
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
EIGEN_DEVICE_FUNC Packet pmin(const Packet &a, const Packet &b)
__vector unsigned long long Packet2ul
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f plog< Packet4f >(const Packet4f &_x)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f prsqrt< Packet4f >(const Packet4f &x)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet2d prsqrt< Packet2d >(const Packet2d &x)
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pfloor(const Packet &a)
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f psqrt< Packet4f >(const Packet4f &x)
static _EIGEN_DECLARE_CONST_Packet4f(1, 1.0f)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f pexp< Packet4f >(const Packet4f &_x)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet2d pexp< Packet2d >(const Packet2d &_x)
EIGEN_DEVICE_FUNC Packet pmul(const Packet &a, const Packet &b)
static _EIGEN_DECLARE_CONST_Packet2d(1, 1.0)
EIGEN_DEVICE_FUNC Packet pmax(const Packet &a, const Packet &b)
EIGEN_DEVICE_FUNC Packet pand(const Packet &a, const Packet &b)