1 // clang-format off
2 /*
3  * Function entries for mathbench.
4  *
5  * Copyright (c) 2022-2023, Arm Limited.
6  * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
7  */
8 
9 #define _ZSF1(fun, a, b) F(fun##f, a, b)
10 #define _ZSD1(f, a, b) D(f, a, b)
11 
12 #if defined(__vpcs) && __aarch64__
13 
14 #define _ZVF1(fun, a, b) VNF(_ZGVnN4v_##fun##f, a, b)
15 #define _ZVD1(f, a, b) VND(_ZGVnN2v_##f, a, b)
16 
17 #else
18 
19 #define _ZVF1(f, a, b)
20 #define _ZVD1(f, a, b)
21 
22 #endif
23 
24 #if WANT_SVE_MATH
25 
26 #define _ZSVF1(fun, a, b) SVF(_ZGVsMxv_##fun##f, a, b)
27 #define _ZSVD1(f, a, b) SVD(_ZGVsMxv_##f, a, b)
28 
29 #else
30 
31 #define _ZSVF1(f, a, b)
32 #define _ZSVD1(f, a, b)
33 
34 #endif
35 
36 /* No auto-generated wrappers for binary functions - they have be
37    manually defined in mathbench_wrappers.h. We have to define silent
38    macros for them anyway as they will be emitted by PL_SIG.  */
39 #define _ZSF2(...)
40 #define _ZSD2(...)
41 #define _ZVF2(...)
42 #define _ZVD2(...)
43 #define _ZSVF2(...)
44 #define _ZSVD2(...)
45 
46 #include "mathbench_funcs_gen.h"
47 
48 /* PL_SIG only emits entries for unary functions, since if a function
49    needs to be wrapped in mathbench there is no way for it to know the
50    same of the wrapper. Add entries for binary functions, or any other
51    exotic signatures that need wrapping, below.  */
52 
53 {"atan2f", 'f', 0, -10.0, 10.0, {.f = atan2f_wrap}},
54 {"atan2",  'd', 0, -10.0, 10.0, {.d = atan2_wrap}},
55 {"powi",   'd', 0,  0.01, 11.1, {.d = powi_wrap}},
56 
57 {"_ZGVnN4vv_atan2f", 'f', 'n', -10.0, 10.0, {.vnf = _Z_atan2f_wrap}},
58 {"_ZGVnN2vv_atan2",  'd', 'n', -10.0, 10.0, {.vnd = _Z_atan2_wrap}},
59 {"_ZGVnN4vv_hypotf", 'f', 'n', -10.0, 10.0, {.vnf = _Z_hypotf_wrap}},
60 {"_ZGVnN2vv_hypot",  'd', 'n', -10.0, 10.0, {.vnd = _Z_hypot_wrap}},
61 {"_ZGVnN2vv_pow",    'd', 'n', -10.0, 10.0, {.vnd = xy_Z_pow}},
62 {"x_ZGVnN2vv_pow",   'd', 'n', -10.0, 10.0, {.vnd = x_Z_pow}},
63 {"y_ZGVnN2vv_pow",   'd', 'n', -10.0, 10.0, {.vnd = y_Z_pow}},
64 {"_ZGVnN4vl4l4_sincosf", 'f', 'n', -3.1, 3.1, {.vnf = _Z_sincosf_wrap}},
65 {"_ZGVnN2vl8l8_sincos", 'd', 'n', -3.1, 3.1, {.vnd = _Z_sincos_wrap}},
66 {"_ZGVnN4v_cexpif", 'f', 'n', -3.1, 3.1, {.vnf = _Z_cexpif_wrap}},
67 {"_ZGVnN2v_cexpi", 'd', 'n', -3.1, 3.1, {.vnd = _Z_cexpi_wrap}},
68 
69 #if WANT_SVE_MATH
70 {"_ZGVsMxvv_atan2f", 'f', 's', -10.0, 10.0, {.svf = _Z_sv_atan2f_wrap}},
71 {"_ZGVsMxvv_atan2",  'd', 's', -10.0, 10.0, {.svd = _Z_sv_atan2_wrap}},
72 {"_ZGVsMxvv_hypotf", 'f', 's', -10.0, 10.0, {.svf = _Z_sv_hypotf_wrap}},
73 {"_ZGVsMxvv_hypot",  'd', 's', -10.0, 10.0, {.svd = _Z_sv_hypot_wrap}},
74 {"_ZGVsMxvv_powi",   'f', 's', -10.0, 10.0, {.svf = _Z_sv_powi_wrap}},
75 {"_ZGVsMxvv_powk",   'd', 's', -10.0, 10.0, {.svd = _Z_sv_powk_wrap}},
76 {"_ZGVsMxvv_powf",   'f', 's', -10.0, 10.0, {.svf = xy_Z_sv_powf}},
77 {"x_ZGVsMxvv_powf",  'f', 's', -10.0, 10.0, {.svf = x_Z_sv_powf}},
78 {"y_ZGVsMxvv_powf",  'f', 's', -10.0, 10.0, {.svf = y_Z_sv_powf}},
79 {"_ZGVsMxvv_pow",    'd', 's', -10.0, 10.0, {.svd = xy_Z_sv_pow}},
80 {"x_ZGVsMxvv_pow",   'd', 's', -10.0, 10.0, {.svd = x_Z_sv_pow}},
81 {"y_ZGVsMxvv_pow",   'd', 's', -10.0, 10.0, {.svd = y_Z_sv_pow}},
82 {"_ZGVsMxvl4l4_sincosf", 'f', 's', -3.1, 3.1, {.svf = _Z_sv_sincosf_wrap}},
83 {"_ZGVsMxvl8l8_sincos", 'd', 's', -3.1, 3.1, {.svd = _Z_sv_sincos_wrap}},
84 {"_ZGVsMxv_cexpif", 'f', 's', -3.1, 3.1, {.svf = _Z_sv_cexpif_wrap}},
85 {"_ZGVsMxv_cexpi", 'd', 's', -3.1, 3.1, {.svd = _Z_sv_cexpi_wrap}},
86 #endif
87     // clang-format on
88