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