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 #ifdef __vpcs 13 14 #define _ZVF1(fun, a, b) F(__s_##fun##f, a, b) VF(__v_##fun##f, a, b) VNF(__vn_##fun##f, a, b) VNF(_ZGVnN4v_##fun##f, a, b) 15 #define _ZVD1(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) VND(__vn_##f, a, b) VND(_ZGVnN2v_##f, a, b) 16 17 #elif __aarch64__ 18 19 #define _ZVF1(fun, a, b) F(__s_##fun##f, a, b) VF(__v_##fun##f, a, b) 20 #define _ZVD1(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) 21 22 #elif WANT_VMATH 23 24 #define _ZVF1(fun, a, b) F(__s_##fun##f, a, b) 25 #define _ZVD1(f, a, b) D(__s_##f, a, b) 26 27 #else 28 29 #define _ZVF1(f, a, b) 30 #define _ZVD1(f, a, b) 31 32 #endif 33 34 #if WANT_SVE_MATH 35 36 #define _ZSVF1(fun, a, b) SVF(__sv_##fun##f_x, a, b) SVF(_ZGVsMxv_##fun##f, a, b) 37 #define _ZSVD1(f, a, b) SVD(__sv_##f##_x, a, b) SVD(_ZGVsMxv_##f, a, b) 38 39 #else 40 41 #define _ZSVF1(f, a, b) 42 #define _ZSVD1(f, a, b) 43 44 #endif 45 46 /* No auto-generated wrappers for binary functions - they have be 47 manually defined in mathbench_wrappers.h. We have to define silent 48 macros for them anyway as they will be emitted by PL_SIG. */ 49 #define _ZSF2(...) 50 #define _ZSD2(...) 51 #define _ZVF2(...) 52 #define _ZVD2(...) 53 #define _ZSVF2(...) 54 #define _ZSVD2(...) 55 56 #include "mathbench_funcs_gen.h" 57 58 /* PL_SIG only emits entries for unary functions, since if a function 59 needs to be wrapped in mathbench there is no way for it to know the 60 same of the wrapper. Add entries for binary functions, or any other 61 exotic signatures that need wrapping, below. */ 62 63 {"atan2f", 'f', 0, -10.0, 10.0, {.f = atan2f_wrap}}, 64 {"atan2", 'd', 0, -10.0, 10.0, {.d = atan2_wrap}}, 65 {"powi", 'd', 0, 0.01, 11.1, {.d = powi_wrap}}, 66 67 {"__s_atan2f", 'f', 0, -10.0, 10.0, {.f = __s_atan2f_wrap}}, 68 {"__s_atan2", 'd', 0, -10.0, 10.0, {.d = __s_atan2_wrap}}, 69 {"__v_atan2f", 'f', 'v', -10.0, 10.0, {.vf = __v_atan2f_wrap}}, 70 {"__v_atan2", 'd', 'v', -10.0, 10.0, {.vd = __v_atan2_wrap}}, 71 {"__vn_atan2f", 'f', 'n', -10.0, 10.0, {.vnf = __vn_atan2f_wrap}}, 72 {"_ZGVnN4vv_atan2f", 'f', 'n', -10.0, 10.0, {.vnf = _Z_atan2f_wrap}}, 73 {"__vn_atan2", 'd', 'n', -10.0, 10.0, {.vnd = __vn_atan2_wrap}}, 74 {"_ZGVnN2vv_atan2", 'd', 'n', -10.0, 10.0, {.vnd = _Z_atan2_wrap}}, 75 76 #if WANT_SVE_MATH 77 {"__sv_atan2f_x", 'f', 's', -10.0, 10.0, {.svf = __sv_atan2f_wrap}}, 78 {"_ZGVsMxvv_atan2f", 'f', 's', -10.0, 10.0, {.svf = _Z_sv_atan2f_wrap}}, 79 {"__sv_atan2_x", 'd', 's', -10.0, 10.0, {.svd = __sv_atan2_wrap}}, 80 {"_ZGVsM2vv_atan2", 'd', 's', -10.0, 10.0, {.svd = _Z_sv_atan2_wrap}}, 81 {"__sv_powif_x", 'f', 's', -10.0, 10.0, {.svf = __sv_powif_wrap}}, 82 {"_ZGVsMxvv_powi", 'f', 's', -10.0, 10.0, {.svf = _Z_sv_powi_wrap}}, 83 {"__sv_powi_x", 'd', 's', -10.0, 10.0, {.svd = __sv_powi_wrap}}, 84 {"_ZGVsMxvv_powk", 'd', 's', -10.0, 10.0, {.svd = _Z_sv_powk_wrap}}, 85 #endif 86 // clang-format on 87