1*412f47f9SXin Li /*
2*412f47f9SXin Li * Function wrappers for mathbench.
3*412f47f9SXin Li *
4*412f47f9SXin Li * Copyright (c) 2022-2023, Arm Limited.
5*412f47f9SXin Li * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6*412f47f9SXin Li */
7*412f47f9SXin Li
8*412f47f9SXin Li static double
atan2_wrap(double x)9*412f47f9SXin Li atan2_wrap (double x)
10*412f47f9SXin Li {
11*412f47f9SXin Li return atan2 (5.0, x);
12*412f47f9SXin Li }
13*412f47f9SXin Li
14*412f47f9SXin Li static float
atan2f_wrap(float x)15*412f47f9SXin Li atan2f_wrap (float x)
16*412f47f9SXin Li {
17*412f47f9SXin Li return atan2f (5.0f, x);
18*412f47f9SXin Li }
19*412f47f9SXin Li
20*412f47f9SXin Li static double
powi_wrap(double x)21*412f47f9SXin Li powi_wrap (double x)
22*412f47f9SXin Li {
23*412f47f9SXin Li return __builtin_powi (x, (int) round (x));
24*412f47f9SXin Li }
25*412f47f9SXin Li
26*412f47f9SXin Li #if __aarch64__ && defined(__vpcs)
27*412f47f9SXin Li
28*412f47f9SXin Li __vpcs static v_double
_Z_atan2_wrap(v_double x)29*412f47f9SXin Li _Z_atan2_wrap (v_double x)
30*412f47f9SXin Li {
31*412f47f9SXin Li return _ZGVnN2vv_atan2 (v_double_dup (5.0), x);
32*412f47f9SXin Li }
33*412f47f9SXin Li
34*412f47f9SXin Li __vpcs static v_float
_Z_atan2f_wrap(v_float x)35*412f47f9SXin Li _Z_atan2f_wrap (v_float x)
36*412f47f9SXin Li {
37*412f47f9SXin Li return _ZGVnN4vv_atan2f (v_float_dup (5.0f), x);
38*412f47f9SXin Li }
39*412f47f9SXin Li
40*412f47f9SXin Li __vpcs static v_float
_Z_hypotf_wrap(v_float x)41*412f47f9SXin Li _Z_hypotf_wrap (v_float x)
42*412f47f9SXin Li {
43*412f47f9SXin Li return _ZGVnN4vv_hypotf (v_float_dup (5.0f), x);
44*412f47f9SXin Li }
45*412f47f9SXin Li
46*412f47f9SXin Li __vpcs static v_double
_Z_hypot_wrap(v_double x)47*412f47f9SXin Li _Z_hypot_wrap (v_double x)
48*412f47f9SXin Li {
49*412f47f9SXin Li return _ZGVnN2vv_hypot (v_double_dup (5.0), x);
50*412f47f9SXin Li }
51*412f47f9SXin Li
52*412f47f9SXin Li __vpcs static v_double
xy_Z_pow(v_double x)53*412f47f9SXin Li xy_Z_pow (v_double x)
54*412f47f9SXin Li {
55*412f47f9SXin Li return _ZGVnN2vv_pow (x, x);
56*412f47f9SXin Li }
57*412f47f9SXin Li
58*412f47f9SXin Li __vpcs static v_double
x_Z_pow(v_double x)59*412f47f9SXin Li x_Z_pow (v_double x)
60*412f47f9SXin Li {
61*412f47f9SXin Li return _ZGVnN2vv_pow (x, v_double_dup (23.4));
62*412f47f9SXin Li }
63*412f47f9SXin Li
64*412f47f9SXin Li __vpcs static v_double
y_Z_pow(v_double x)65*412f47f9SXin Li y_Z_pow (v_double x)
66*412f47f9SXin Li {
67*412f47f9SXin Li return _ZGVnN2vv_pow (v_double_dup (2.34), x);
68*412f47f9SXin Li }
69*412f47f9SXin Li
70*412f47f9SXin Li __vpcs static v_float
_Z_sincosf_wrap(v_float x)71*412f47f9SXin Li _Z_sincosf_wrap (v_float x)
72*412f47f9SXin Li {
73*412f47f9SXin Li v_float s, c;
74*412f47f9SXin Li _ZGVnN4vl4l4_sincosf (x, &s, &c);
75*412f47f9SXin Li return s + c;
76*412f47f9SXin Li }
77*412f47f9SXin Li
78*412f47f9SXin Li __vpcs static v_float
_Z_cexpif_wrap(v_float x)79*412f47f9SXin Li _Z_cexpif_wrap (v_float x)
80*412f47f9SXin Li {
81*412f47f9SXin Li __f32x4x2_t sc = _ZGVnN4v_cexpif (x);
82*412f47f9SXin Li return sc.val[0] + sc.val[1];
83*412f47f9SXin Li }
84*412f47f9SXin Li
85*412f47f9SXin Li __vpcs static v_double
_Z_sincos_wrap(v_double x)86*412f47f9SXin Li _Z_sincos_wrap (v_double x)
87*412f47f9SXin Li {
88*412f47f9SXin Li v_double s, c;
89*412f47f9SXin Li _ZGVnN2vl8l8_sincos (x, &s, &c);
90*412f47f9SXin Li return s + c;
91*412f47f9SXin Li }
92*412f47f9SXin Li
93*412f47f9SXin Li __vpcs static v_double
_Z_cexpi_wrap(v_double x)94*412f47f9SXin Li _Z_cexpi_wrap (v_double x)
95*412f47f9SXin Li {
96*412f47f9SXin Li __f64x2x2_t sc = _ZGVnN2v_cexpi (x);
97*412f47f9SXin Li return sc.val[0] + sc.val[1];
98*412f47f9SXin Li }
99*412f47f9SXin Li
100*412f47f9SXin Li #endif // __arch64__ && __vpcs
101*412f47f9SXin Li
102*412f47f9SXin Li #if WANT_SVE_MATH
103*412f47f9SXin Li
104*412f47f9SXin Li static sv_float
_Z_sv_atan2f_wrap(sv_float x,sv_bool pg)105*412f47f9SXin Li _Z_sv_atan2f_wrap (sv_float x, sv_bool pg)
106*412f47f9SXin Li {
107*412f47f9SXin Li return _ZGVsMxvv_atan2f (x, svdup_f32 (5.0f), pg);
108*412f47f9SXin Li }
109*412f47f9SXin Li
110*412f47f9SXin Li static sv_double
_Z_sv_atan2_wrap(sv_double x,sv_bool pg)111*412f47f9SXin Li _Z_sv_atan2_wrap (sv_double x, sv_bool pg)
112*412f47f9SXin Li {
113*412f47f9SXin Li return _ZGVsMxvv_atan2 (x, svdup_f64 (5.0), pg);
114*412f47f9SXin Li }
115*412f47f9SXin Li
116*412f47f9SXin Li static sv_float
_Z_sv_hypotf_wrap(sv_float x,sv_bool pg)117*412f47f9SXin Li _Z_sv_hypotf_wrap (sv_float x, sv_bool pg)
118*412f47f9SXin Li {
119*412f47f9SXin Li return _ZGVsMxvv_hypotf (x, svdup_f32 (5.0), pg);
120*412f47f9SXin Li }
121*412f47f9SXin Li
122*412f47f9SXin Li static sv_double
_Z_sv_hypot_wrap(sv_double x,sv_bool pg)123*412f47f9SXin Li _Z_sv_hypot_wrap (sv_double x, sv_bool pg)
124*412f47f9SXin Li {
125*412f47f9SXin Li return _ZGVsMxvv_hypot (x, svdup_f64 (5.0), pg);
126*412f47f9SXin Li }
127*412f47f9SXin Li
128*412f47f9SXin Li static sv_float
_Z_sv_powi_wrap(sv_float x,sv_bool pg)129*412f47f9SXin Li _Z_sv_powi_wrap (sv_float x, sv_bool pg)
130*412f47f9SXin Li {
131*412f47f9SXin Li return _ZGVsMxvv_powi (x, svcvt_s32_f32_x (pg, x), pg);
132*412f47f9SXin Li }
133*412f47f9SXin Li
134*412f47f9SXin Li static sv_double
_Z_sv_powk_wrap(sv_double x,sv_bool pg)135*412f47f9SXin Li _Z_sv_powk_wrap (sv_double x, sv_bool pg)
136*412f47f9SXin Li {
137*412f47f9SXin Li return _ZGVsMxvv_powk (x, svcvt_s64_f64_x (pg, x), pg);
138*412f47f9SXin Li }
139*412f47f9SXin Li
140*412f47f9SXin Li static sv_float
xy_Z_sv_powf(sv_float x,sv_bool pg)141*412f47f9SXin Li xy_Z_sv_powf (sv_float x, sv_bool pg)
142*412f47f9SXin Li {
143*412f47f9SXin Li return _ZGVsMxvv_powf (x, x, pg);
144*412f47f9SXin Li }
145*412f47f9SXin Li
146*412f47f9SXin Li static sv_float
x_Z_sv_powf(sv_float x,sv_bool pg)147*412f47f9SXin Li x_Z_sv_powf (sv_float x, sv_bool pg)
148*412f47f9SXin Li {
149*412f47f9SXin Li return _ZGVsMxvv_powf (x, svdup_f32 (23.4f), pg);
150*412f47f9SXin Li }
151*412f47f9SXin Li
152*412f47f9SXin Li static sv_float
y_Z_sv_powf(sv_float x,sv_bool pg)153*412f47f9SXin Li y_Z_sv_powf (sv_float x, sv_bool pg)
154*412f47f9SXin Li {
155*412f47f9SXin Li return _ZGVsMxvv_powf (svdup_f32 (2.34f), x, pg);
156*412f47f9SXin Li }
157*412f47f9SXin Li
158*412f47f9SXin Li static sv_double
xy_Z_sv_pow(sv_double x,sv_bool pg)159*412f47f9SXin Li xy_Z_sv_pow (sv_double x, sv_bool pg)
160*412f47f9SXin Li {
161*412f47f9SXin Li return _ZGVsMxvv_pow (x, x, pg);
162*412f47f9SXin Li }
163*412f47f9SXin Li
164*412f47f9SXin Li static sv_double
x_Z_sv_pow(sv_double x,sv_bool pg)165*412f47f9SXin Li x_Z_sv_pow (sv_double x, sv_bool pg)
166*412f47f9SXin Li {
167*412f47f9SXin Li return _ZGVsMxvv_pow (x, svdup_f64 (23.4), pg);
168*412f47f9SXin Li }
169*412f47f9SXin Li
170*412f47f9SXin Li static sv_double
y_Z_sv_pow(sv_double x,sv_bool pg)171*412f47f9SXin Li y_Z_sv_pow (sv_double x, sv_bool pg)
172*412f47f9SXin Li {
173*412f47f9SXin Li return _ZGVsMxvv_pow (svdup_f64 (2.34), x, pg);
174*412f47f9SXin Li }
175*412f47f9SXin Li
176*412f47f9SXin Li static sv_float
_Z_sv_sincosf_wrap(sv_float x,sv_bool pg)177*412f47f9SXin Li _Z_sv_sincosf_wrap (sv_float x, sv_bool pg)
178*412f47f9SXin Li {
179*412f47f9SXin Li float s[svcntw ()], c[svcntw ()];
180*412f47f9SXin Li _ZGVsMxvl4l4_sincosf (x, s, c, pg);
181*412f47f9SXin Li return svadd_x (pg, svld1 (pg, s), svld1 (pg, s));
182*412f47f9SXin Li }
183*412f47f9SXin Li
184*412f47f9SXin Li static sv_float
_Z_sv_cexpif_wrap(sv_float x,sv_bool pg)185*412f47f9SXin Li _Z_sv_cexpif_wrap (sv_float x, sv_bool pg)
186*412f47f9SXin Li {
187*412f47f9SXin Li svfloat32x2_t sc = _ZGVsMxv_cexpif (x, pg);
188*412f47f9SXin Li return svadd_x (pg, svget2 (sc, 0), svget2 (sc, 1));
189*412f47f9SXin Li }
190*412f47f9SXin Li
191*412f47f9SXin Li static sv_double
_Z_sv_sincos_wrap(sv_double x,sv_bool pg)192*412f47f9SXin Li _Z_sv_sincos_wrap (sv_double x, sv_bool pg)
193*412f47f9SXin Li {
194*412f47f9SXin Li double s[svcntd ()], c[svcntd ()];
195*412f47f9SXin Li _ZGVsMxvl8l8_sincos (x, s, c, pg);
196*412f47f9SXin Li return svadd_x (pg, svld1 (pg, s), svld1 (pg, s));
197*412f47f9SXin Li }
198*412f47f9SXin Li
199*412f47f9SXin Li static sv_double
_Z_sv_cexpi_wrap(sv_double x,sv_bool pg)200*412f47f9SXin Li _Z_sv_cexpi_wrap (sv_double x, sv_bool pg)
201*412f47f9SXin Li {
202*412f47f9SXin Li svfloat64x2_t sc = _ZGVsMxv_cexpi (x, pg);
203*412f47f9SXin Li return svadd_x (pg, svget2 (sc, 0), svget2 (sc, 1));
204*412f47f9SXin Li }
205*412f47f9SXin Li
206*412f47f9SXin Li #endif // WANT_SVE_MATH
207