26 #ifndef EIGEN_MATH_FUNCTIONS_MSA_H
27 #define EIGEN_MATH_FUNCTIONS_MSA_H
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);
88 y2 =
pmadd(y2,
x, p4f_cephes_log_p8);
94 x = __builtin_msa_fmsub_w(
x,
x2, p4f_half);
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);
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,
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);
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);
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);
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);
378 x = __builtin_msa_fexp2_d(
x, x2_long);
387 #endif // EIGEN_MATH_FUNCTIONS_MSA_H