16 #ifndef EIGEN_MATH_FUNCTIONS_ALTIVEC_H 17 #define EIGEN_MATH_FUNCTIONS_ALTIVEC_H 87 #ifdef __POWER8_VECTOR__ 88 static Packet2l p2l_1023 = { 1023, 1023 };
105 x =
pmax(x, p4f_min_norm_pos);
106 emm0 = vec_sr(reinterpret_cast<Packet4i>(x),
107 reinterpret_cast<Packet4ui>(p4i_23));
110 x =
pand(x, p4f_inv_mant_mask);
111 x =
por(x, p4f_half);
113 emm0 =
psub(emm0, p4i_0x7f);
122 Packet4f mask =
reinterpret_cast<Packet4f>(vec_cmplt(x, p4f_cephes_SQRTHF));
132 y =
pmadd(p4f_cephes_log_p0, x, p4f_cephes_log_p1);
133 y1 =
pmadd(p4f_cephes_log_p3, x, p4f_cephes_log_p4);
134 y2 =
pmadd(p4f_cephes_log_p6, x, p4f_cephes_log_p7);
135 y =
pmadd(y , x, p4f_cephes_log_p2);
136 y1 =
pmadd(y1, x, p4f_cephes_log_p5);
137 y2 =
pmadd(y2, x, p4f_cephes_log_p8);
138 y =
pmadd(y, x3, y1);
139 y =
pmadd(y, x3, y2);
142 y1 =
pmul(e, p4f_cephes_log_q1);
143 tmp =
pmul(x2, p4f_half);
146 y2 =
pmul(e, p4f_cephes_log_q2);
150 x = vec_sel(x, p4f_minus_inf, iszero_mask);
151 x = vec_sel(p4f_minus_nan, x, isvalid_mask);
164 x =
pmax(
pmin(x, p4f_exp_hi), p4f_exp_lo);
167 fx =
pmadd(x, p4f_cephes_LOG2EF, p4f_half);
171 tmp =
pmul(fx, p4f_cephes_exp_C1);
179 y =
pmadd(y, x, p4f_cephes_exp_p1);
180 y =
pmadd(y, x, p4f_cephes_exp_p2);
181 y =
pmadd(y, x, p4f_cephes_exp_p3);
182 y =
pmadd(y, x, p4f_cephes_exp_p4);
183 y =
pmadd(y, x, p4f_cephes_exp_p5);
188 emm0 = vec_cts(fx, 0);
189 emm0 = vec_add(emm0, p4i_0x7f);
190 emm0 = vec_sl(emm0, reinterpret_cast<Packet4ui>(p4i_23));
195 return vec_sel(_x,
pmax(
pmul(y, reinterpret_cast<Packet4f>(emm0)), _x),
199 #ifndef EIGEN_COMP_CLANG 208 #ifndef EIGEN_COMP_CLANG 235 #if EIGEN_GNUC_AT_LEAST(5, 4) || \ 236 (EIGEN_GNUC_AT(6, 1) && __GNUC_PATCHLEVEL__ >= 1) 237 return vec_cts(x, 0);
240 memcpy(tmp, &x,
sizeof(tmp));
241 Packet2l l = {
static_cast<long long>(tmp[0]),
242 static_cast<long long>(tmp[1]) };
256 x =
pmax(
pmin(x, p2d_exp_hi), p2d_exp_lo);
259 fx =
pmadd(x, p2d_cephes_LOG2EF, p2d_half);
263 tmp =
pmul(fx, p2d_cephes_exp_C1);
271 px =
pmadd(px, x2, p2d_cephes_exp_p1);
272 px =
pmadd(px, x2, p2d_cephes_exp_p2);
276 qx =
pmadd(qx, x2, p2d_cephes_exp_q1);
277 qx =
pmadd(qx, x2, p2d_cephes_exp_q2);
278 qx =
pmadd(qx, x2, p2d_cephes_exp_q3);
281 x =
pmadd(p2d_2,x,p2d_1);
284 emm0 = ConvertToPacket2l(fx);
286 #ifdef __POWER8_VECTOR__ 287 emm0 = vec_add(emm0, p2l_1023);
288 emm0 = vec_sl(emm0, p2ul_52);
297 emm04i = vec_add(emm04i, p4i_1023);
298 emm04i = vec_sl(emm04i, reinterpret_cast<Packet4ui>(p4i_20));
300 0x14, 0x15, 0x16, 0x17, 0x00, 0x01, 0x02, 0x03,
301 0x1c, 0x1d, 0x1e, 0x1f, 0x08, 0x09, 0x0a, 0x0b };
303 emm0 =
reinterpret_cast<Packet2l>(vec_perm(p4i_ZERO, emm04i, perm));
305 emm0 =
reinterpret_cast<Packet2l>(vec_perm(emm04i, p4i_ZERO, perm));
313 return vec_sel(_x,
pmax(
pmul(x, reinterpret_cast<Packet2d>(emm0)), _x),
322 #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 int f(const TensorMap< Tensor< int, 3 > > &tensor)
__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)
TFSIMD_FORCE_INLINE const tfScalar & z() const
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)
static _EIGEN_DECLARE_CONST_Packet4f_FROM_INT(inv_mant_mask,~0x7f800000)