1*072a4ba8SAndrew Turner /* 2*072a4ba8SAndrew Turner * Function wrappers for mathbench. 3*072a4ba8SAndrew Turner * 4*072a4ba8SAndrew Turner * Copyright (c) 2022, Arm Limited. 5*072a4ba8SAndrew Turner * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 6*072a4ba8SAndrew Turner */ 7*072a4ba8SAndrew Turner #if WANT_VMATH 8*072a4ba8SAndrew Turner #if __aarch64__ 9*072a4ba8SAndrew Turner 10*072a4ba8SAndrew Turner #ifdef __vpcs 11*072a4ba8SAndrew Turner __vpcs static v_float 12*072a4ba8SAndrew Turner xy__vn_powf (v_float x) 13*072a4ba8SAndrew Turner { 14*072a4ba8SAndrew Turner return __vn_powf (x, x); 15*072a4ba8SAndrew Turner } 16*072a4ba8SAndrew Turner 17*072a4ba8SAndrew Turner __vpcs static v_float 18*072a4ba8SAndrew Turner xy_Z_powf (v_float x) 19*072a4ba8SAndrew Turner { 20*072a4ba8SAndrew Turner return _ZGVnN4vv_powf (x, x); 21*072a4ba8SAndrew Turner } 22*072a4ba8SAndrew Turner 23*072a4ba8SAndrew Turner __vpcs static v_double 24*072a4ba8SAndrew Turner xy__vn_pow (v_double x) 25*072a4ba8SAndrew Turner { 26*072a4ba8SAndrew Turner return __vn_pow (x, x); 27*072a4ba8SAndrew Turner } 28*072a4ba8SAndrew Turner 29*072a4ba8SAndrew Turner __vpcs static v_double 30*072a4ba8SAndrew Turner xy_Z_pow (v_double x) 31*072a4ba8SAndrew Turner { 32*072a4ba8SAndrew Turner return _ZGVnN2vv_pow (x, x); 33*072a4ba8SAndrew Turner } 34*072a4ba8SAndrew Turner #endif // __vpcs 35*072a4ba8SAndrew Turner 36*072a4ba8SAndrew Turner static v_float 37*072a4ba8SAndrew Turner xy__v_powf (v_float x) 38*072a4ba8SAndrew Turner { 39*072a4ba8SAndrew Turner return __v_powf (x, x); 40*072a4ba8SAndrew Turner } 41*072a4ba8SAndrew Turner 42*072a4ba8SAndrew Turner static v_double 43*072a4ba8SAndrew Turner xy__v_pow (v_double x) 44*072a4ba8SAndrew Turner { 45*072a4ba8SAndrew Turner return __v_pow (x, x); 46*072a4ba8SAndrew Turner } 47*072a4ba8SAndrew Turner #endif // __aarch64__ 48*072a4ba8SAndrew Turner 49*072a4ba8SAndrew Turner static float 50*072a4ba8SAndrew Turner xy__s_powf (float x) 51*072a4ba8SAndrew Turner { 52*072a4ba8SAndrew Turner return __s_powf (x, x); 53*072a4ba8SAndrew Turner } 54*072a4ba8SAndrew Turner 55*072a4ba8SAndrew Turner static double 56*072a4ba8SAndrew Turner xy__s_pow (double x) 57*072a4ba8SAndrew Turner { 58*072a4ba8SAndrew Turner return __s_pow (x, x); 59*072a4ba8SAndrew Turner } 60*072a4ba8SAndrew Turner #endif // WANT_VMATH 61*072a4ba8SAndrew Turner 62*072a4ba8SAndrew Turner static double 63*072a4ba8SAndrew Turner xypow (double x) 64*072a4ba8SAndrew Turner { 65*072a4ba8SAndrew Turner return pow (x, x); 66*072a4ba8SAndrew Turner } 67*072a4ba8SAndrew Turner 68*072a4ba8SAndrew Turner static float 69*072a4ba8SAndrew Turner xypowf (float x) 70*072a4ba8SAndrew Turner { 71*072a4ba8SAndrew Turner return powf (x, x); 72*072a4ba8SAndrew Turner } 73*072a4ba8SAndrew Turner 74*072a4ba8SAndrew Turner static double 75*072a4ba8SAndrew Turner xpow (double x) 76*072a4ba8SAndrew Turner { 77*072a4ba8SAndrew Turner return pow (x, 23.4); 78*072a4ba8SAndrew Turner } 79*072a4ba8SAndrew Turner 80*072a4ba8SAndrew Turner static float 81*072a4ba8SAndrew Turner xpowf (float x) 82*072a4ba8SAndrew Turner { 83*072a4ba8SAndrew Turner return powf (x, 23.4f); 84*072a4ba8SAndrew Turner } 85*072a4ba8SAndrew Turner 86*072a4ba8SAndrew Turner static double 87*072a4ba8SAndrew Turner ypow (double x) 88*072a4ba8SAndrew Turner { 89*072a4ba8SAndrew Turner return pow (2.34, x); 90*072a4ba8SAndrew Turner } 91*072a4ba8SAndrew Turner 92*072a4ba8SAndrew Turner static float 93*072a4ba8SAndrew Turner ypowf (float x) 94*072a4ba8SAndrew Turner { 95*072a4ba8SAndrew Turner return powf (2.34f, x); 96*072a4ba8SAndrew Turner } 97*072a4ba8SAndrew Turner 98*072a4ba8SAndrew Turner static float 99*072a4ba8SAndrew Turner sincosf_wrap (float x) 100*072a4ba8SAndrew Turner { 101*072a4ba8SAndrew Turner float s, c; 102*072a4ba8SAndrew Turner sincosf (x, &s, &c); 103*072a4ba8SAndrew Turner return s + c; 104*072a4ba8SAndrew Turner } 105