26 #ifndef EIGEN_MATH_FUNCTIONS_MSA_H
27 #define EIGEN_MATH_FUNCTIONS_MSA_H
53 Packet4i neg_mask = __builtin_msa_fclt_w(_x, zero);
54 Packet4i zero_mask = __builtin_msa_fceq_w(_x, zero);
60 Packet4i e_int = __builtin_msa_ftint_s_w(__builtin_msa_flog2_w(x));
62 x = __builtin_msa_fexp2_w(x, (
Packet4i)__builtin_msa_nori_b((v16u8)e_int, 0));
73 Packet4i ge_mask = __builtin_msa_fcle_w(p4f_cephes_SQRTHF, x);
74 e_int =
psub(e_int, ge_mask);
75 x = (
Packet4f)__builtin_msa_bsel_v((v16u8)ge_mask, (v16u8)xx, (v16u8)x);
77 Packet4f e = __builtin_msa_ffint_s_w(e_int);
83 y =
pmadd(p4f_cephes_log_p0, x, p4f_cephes_log_p1);
84 y1 =
pmadd(p4f_cephes_log_p3, x, p4f_cephes_log_p4);
85 y2 =
pmadd(p4f_cephes_log_p6, x, p4f_cephes_log_p7);
86 y =
pmadd(
y, x, p4f_cephes_log_p2);
87 y1 =
pmadd(y1, x, p4f_cephes_log_p5);
88 y2 =
pmadd(y2, x, p4f_cephes_log_p8);
93 y =
pmadd(e, p4f_cephes_log_q1,
y);
94 x = __builtin_msa_fmsub_w(x, x2, p4f_half);
96 x =
pmadd(e, p4f_cephes_log_q2, x);
112 x = __builtin_msa_fmin_w(x, non_neg_x_or_nan);
115 Packet4i neg_infs = __builtin_msa_slli_w(zero_mask, 23);
116 x = (
Packet4f)__builtin_msa_bsel_v((v16u8)zero_mask, (v16u8)x, (v16u8)neg_infs);
143 x = (
Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(x, p4f_exp_lo), (v16u8)x,
145 x = (
Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(p4f_exp_hi, x), (v16u8)x,
149 Packet4f x2_add = (
Packet4f)__builtin_msa_binsli_w((v4u32)p4f_half, (v4u32)x, 0);
151 Packet4i x2_int = __builtin_msa_ftrunc_s_w(x2);
152 Packet4f x2_int_f = __builtin_msa_ffint_s_w(x2_int);
154 x = __builtin_msa_fmsub_w(x, x2_int_f, p4f_cephes_exp_C1);
155 x = __builtin_msa_fmsub_w(x, x2_int_f, p4f_cephes_exp_C2);
160 y =
pmadd(
y, x, p4f_cephes_exp_p1);
161 y =
pmadd(
y, x, p4f_cephes_exp_p2);
162 y =
pmadd(
y, x, p4f_cephes_exp_p3);
163 y =
pmadd(
y, x, p4f_cephes_exp_p4);
164 y =
pmadd(
y, x, p4f_cephes_exp_p5);
169 y = __builtin_msa_fexp2_w(
y, x2_int);
194 Packet4i tiny_mask = __builtin_msa_fclt_w(x, p4f_tanh_tiny);
198 x = (
Packet4f)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_w(p4f_tanh_hi, x), (v16u8)x,
206 p =
pmadd(x2, p, p4f_alpha_9);
207 p =
pmadd(x2, p, p4f_alpha_7);
208 p =
pmadd(x2, p, p4f_alpha_5);
209 p =
pmadd(x2, p, p4f_alpha_3);
210 p =
pmadd(x2, p, p4f_alpha_1);
215 q =
pmadd(x2, q, p4f_beta_2);
216 q =
pmadd(x2, q, p4f_beta_0);
222 p = (
Packet4f)__builtin_msa_binsli_w((v4u32)p, (v4u32)_x, 0);
225 p = (
Packet4f)__builtin_msa_bsel_v((v16u8)tiny_mask, (v16u8)p, (v16u8)_x);
250 x =
padd(x, zero_or_nan_if_inf);
253 Packet4i small_or_nan_mask = __builtin_msa_fcult_w(x, p4f_sincos_max_arg);
259 Packet4i y_int = __builtin_msa_ftrunc_s_w(
y);
263 Packet4i y_int1 = __builtin_msa_addvi_w(y_int, 1);
265 y = __builtin_msa_ffint_s_w(y_int2);
269 : __builtin_msa_slli_w(__builtin_msa_addvi_w(y_int, 3), 29);
273 Packet4i poly_mask = __builtin_msa_ceqi_w(__builtin_msa_slli_w(y_int2, 30), 0);
288 y =
pmadd(
y, z, p4f_coscof_p1);
289 y =
pmadd(
y, z, p4f_coscof_p2);
292 y = __builtin_msa_fmsub_w(
y, z, p4f_half);
297 y2 =
pmadd(y2, z, p4f_sincof_p1);
298 y2 =
pmadd(y2, z, p4f_sincof_p2);
300 y2 =
pmadd(y2, x, x);
303 y = sine ? (
Packet4f)__builtin_msa_bsel_v((v16u8)poly_mask, (v16u8)
y, (v16u8)y2)
304 : (
Packet4f)__builtin_msa_bsel_v((v16u8)poly_mask, (v16u8)y2, (v16u8)
y);
308 y = (
Packet4f)__builtin_msa_binsli_w((v4u32)
y, (v4u32)sign_mask, 0);
348 x = (
Packet2d)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_d(x, p2d_exp_lo), (v16u8)x,
350 x = (
Packet2d)__builtin_msa_bsel_v((v16u8)__builtin_msa_fclt_d(p2d_exp_hi, x), (v16u8)x,
354 Packet2d x2_add = (
Packet2d)__builtin_msa_binsli_d((v2u64)p2d_half, (v2u64)x, 0);
356 Packet2l x2_long = __builtin_msa_ftrunc_s_d(x2);
357 Packet2d x2_long_d = __builtin_msa_ffint_s_d(x2_long);
359 x = __builtin_msa_fmsub_d(x, x2_long_d, p2d_cephes_exp_C1);
360 x = __builtin_msa_fmsub_d(x, x2_long_d, p2d_cephes_exp_C2);
365 px =
pmadd(px, x2, p2d_cephes_exp_p1);
366 px =
pmadd(px, x2, p2d_cephes_exp_p2);
370 qx =
pmadd(qx, x2, p2d_cephes_exp_q1);
371 qx =
pmadd(qx, x2, p2d_cephes_exp_q2);
372 qx =
pmadd(qx, x2, p2d_cephes_exp_q3);
375 x =
pmadd(p2d_2, x, p2d_1);
378 x = __builtin_msa_fexp2_d(x, x2_long);
#define EIGEN_UNUSED
Definition: Macros.h:1067
#define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Definition: Macros.h:985
v2f64 Packet2d
Definition: PacketMath.h:820
v2i64 Packet2l
Definition: PacketMath.h:821
EIGEN_DEVICE_FUNC Packet padd(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:215
__vector int Packet4i
Definition: PacketMath.h:31
const Scalar & y
Definition: MathFunctions.h:821
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:244
__vector unsigned int Packet4ui
Definition: PacketMath.h:32
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: PacketMath.h:827
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f ptanh< Packet4f >(const Packet4f &x)
Definition: MathFunctions.h:82
EIGEN_DEVICE_FUNC Packet pmul(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:237
EIGEN_STRONG_INLINE Packet4f pabs(const Packet4f &a)
Definition: PacketMath.h:1176
EIGEN_STRONG_INLINE Packet8h pand(const Packet8h &a, const Packet8h &b)
Definition: PacketMath.h:1050
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f pcos< Packet4f >(const Packet4f &_x)
Definition: MathFunctions.h:38
EIGEN_STRONG_INLINE Packet8h pxor(const Packet8h &a, const Packet8h &b)
Definition: PacketMath.h:1047
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:222
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f plog< Packet4f >(const Packet4f &_x)
Definition: MathFunctions.h:20
__vector float Packet4f
Definition: PacketMath.h:30
static _EIGEN_DECLARE_CONST_Packet4f(1, 1.0f)
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f pexp< Packet4f >(const Packet4f &_x)
Definition: MathFunctions.h:26
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet2d pexp< Packet2d >(const Packet2d &_x)
Definition: MathFunctions.h:326
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED Packet4f psin< Packet4f >(const Packet4f &_x)
Definition: MathFunctions.h:32
static _EIGEN_DECLARE_CONST_Packet2d(1, 1.0)
Packet4f psincos_inner_msa_float(const Packet4f &_x)
Definition: MathFunctions.h:231
Namespace containing all symbols from the Eigen library.
Definition: LDLT.h:16
Definition: document.h:416