diff options
Diffstat (limited to 'math/test/mathbench_wrappers.h')
-rw-r--r-- | math/test/mathbench_wrappers.h | 302 |
1 files changed, 296 insertions, 6 deletions
diff --git a/math/test/mathbench_wrappers.h b/math/test/mathbench_wrappers.h index 062b9db56de5..32dcee36530a 100644 --- a/math/test/mathbench_wrappers.h +++ b/math/test/mathbench_wrappers.h @@ -1,24 +1,314 @@ /* * Function wrappers for mathbench. * - * Copyright (c) 2022-2023, Arm Limited. + * Copyright (c) 2022-2024, Arm Limited. * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ -#ifdef __vpcs +#if WANT_EXPERIMENTAL_MATH +static double +atan2_wrap (double x) +{ + return atan2 (5.0, x); +} + +static float +atan2f_wrap (float x) +{ + return atan2f (5.0f, x); +} + +static double +powi_wrap (double x) +{ + return __builtin_powi (x, (int) round (x)); +} +#endif /* WANT_EXPERIMENTAL_MATH. */ + +#if __aarch64__ && __linux__ + +__vpcs static float32x4_t +_Z_sincospif_wrap (float32x4_t x) +{ + float s[4], c[4]; + _ZGVnN4vl4l4_sincospif (x, s, c); + return vld1q_f32 (s) + vld1q_f32 (c); +} + +__vpcs static float64x2_t +_Z_sincospi_wrap (float64x2_t x) +{ + double s[2], c[2]; + _ZGVnN2vl8l8_sincospi (x, s, c); + return vld1q_f64 (s) + vld1q_f64 (c); +} -__vpcs static v_float -xy_Z_powf (v_float x) +__vpcs static float64x2_t +_Z_atan2_wrap (float64x2_t x) +{ + return _ZGVnN2vv_atan2 (vdupq_n_f64 (5.0), x); +} + +__vpcs static float32x4_t +_Z_atan2f_wrap (float32x4_t x) +{ + return _ZGVnN4vv_atan2f (vdupq_n_f32 (5.0f), x); +} + +__vpcs static float32x4_t +_Z_hypotf_wrap (float32x4_t x) +{ + return _ZGVnN4vv_hypotf (vdupq_n_f32 (5.0f), x); +} + +__vpcs static float64x2_t +_Z_hypot_wrap (float64x2_t x) +{ + return _ZGVnN2vv_hypot (vdupq_n_f64 (5.0), x); +} + +__vpcs static float32x4_t +xy_Z_powf (float32x4_t x) { return _ZGVnN4vv_powf (x, x); } -__vpcs static v_double -xy_Z_pow (v_double x) +__vpcs static float32x4_t +x_Z_powf (float32x4_t x) +{ + return _ZGVnN4vv_powf (x, vdupq_n_f32 (23.4)); +} + +__vpcs static float32x4_t +y_Z_powf (float32x4_t x) +{ + return _ZGVnN4vv_powf (vdupq_n_f32 (2.34), x); +} + +__vpcs static float64x2_t +xy_Z_pow (float64x2_t x) { return _ZGVnN2vv_pow (x, x); } +__vpcs static float64x2_t +x_Z_pow (float64x2_t x) +{ + return _ZGVnN2vv_pow (x, vdupq_n_f64 (23.4)); +} + +__vpcs static float64x2_t +y_Z_pow (float64x2_t x) +{ + return _ZGVnN2vv_pow (vdupq_n_f64 (2.34), x); +} + +__vpcs static float32x4_t +_Z_modff_wrap (float32x4_t x) +{ + float y[4]; + float32x4_t ret = _ZGVnN4vl4_modff (x, y); + return ret + vld1q_f32 (y); +} + +__vpcs static float64x2_t +_Z_modf_wrap (float64x2_t x) +{ + double y[2]; + float64x2_t ret = _ZGVnN2vl8_modf (x, y); + return ret + vld1q_f64 (y); +} + +__vpcs static float32x4_t +_Z_sincosf_wrap (float32x4_t x) +{ + float s[4], c[4]; + _ZGVnN4vl4l4_sincosf (x, s, c); + return vld1q_f32 (s) + vld1q_f32 (c); +} + +__vpcs static float32x4_t +_Z_cexpif_wrap (float32x4_t x) +{ + float32x4x2_t sc = _ZGVnN4v_cexpif (x); + return sc.val[0] + sc.val[1]; +} + +__vpcs static float64x2_t +_Z_sincos_wrap (float64x2_t x) +{ + double s[2], c[2]; + _ZGVnN2vl8l8_sincos (x, s, c); + return vld1q_f64 (s) + vld1q_f64 (c); +} + +__vpcs static float64x2_t +_Z_cexpi_wrap (float64x2_t x) +{ + float64x2x2_t sc = _ZGVnN2v_cexpi (x); + return sc.val[0] + sc.val[1]; +} + +#endif + +#if WANT_SVE_TESTS + +static svfloat32_t +_Z_sv_atan2f_wrap (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_atan2f (x, svdup_f32 (5.0f), pg); +} + +static svfloat64_t +_Z_sv_atan2_wrap (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_atan2 (x, svdup_f64 (5.0), pg); +} + +static svfloat32_t +_Z_sv_hypotf_wrap (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_hypotf (x, svdup_f32 (5.0), pg); +} + +static svfloat64_t +_Z_sv_hypot_wrap (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_hypot (x, svdup_f64 (5.0), pg); +} + +static svfloat32_t +xy_Z_sv_powf (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_powf (x, x, pg); +} + +static svfloat32_t +x_Z_sv_powf (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_powf (x, svdup_f32 (23.4f), pg); +} + +static svfloat32_t +y_Z_sv_powf (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_powf (svdup_f32 (2.34f), x, pg); +} + +static svfloat64_t +xy_Z_sv_pow (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_pow (x, x, pg); +} + +static svfloat64_t +x_Z_sv_pow (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_pow (x, svdup_f64 (23.4), pg); +} + +static svfloat64_t +y_Z_sv_pow (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_pow (svdup_f64 (2.34), x, pg); +} + +static svfloat32_t +_Z_sv_sincospif_wrap (svfloat32_t x, svbool_t pg) +{ + float s[svcntw ()], c[svcntw ()]; + _ZGVsMxvl4l4_sincospif (x, s, c, pg); + return svadd_x (pg, svld1 (pg, s), svld1 (pg, c)); +} + +static svfloat64_t +_Z_sv_sincospi_wrap (svfloat64_t x, svbool_t pg) +{ + double s[svcntd ()], c[svcntd ()]; + _ZGVsMxvl8l8_sincospi (x, s, c, pg); + return svadd_x (pg, svld1 (pg, s), svld1 (pg, c)); +} + +static svfloat32_t +_Z_sv_modff_wrap (svfloat32_t x, svbool_t pg) +{ + float i[svcntw ()]; + svfloat32_t r = _ZGVsMxvl4_modff (x, i, pg); + return svadd_x (pg, r, svld1 (pg, i)); +} + +static svfloat64_t +_Z_sv_modf_wrap (svfloat64_t x, svbool_t pg) +{ + double i[svcntd ()]; + svfloat64_t r = _ZGVsMxvl8_modf (x, i, pg); + return svadd_x (pg, r, svld1 (pg, i)); +} + +static svfloat32_t +_Z_sv_sincosf_wrap (svfloat32_t x, svbool_t pg) +{ + float s[svcntw ()], c[svcntw ()]; + _ZGVsMxvl4l4_sincosf (x, s, c, pg); + return svadd_x (pg, svld1 (pg, s), svld1 (pg, s)); +} + +static svfloat32_t +_Z_sv_cexpif_wrap (svfloat32_t x, svbool_t pg) +{ + svfloat32x2_t sc = _ZGVsMxv_cexpif (x, pg); + return svadd_x (pg, svget2 (sc, 0), svget2 (sc, 1)); +} + +static svfloat64_t +_Z_sv_sincos_wrap (svfloat64_t x, svbool_t pg) +{ + double s[svcntd ()], c[svcntd ()]; + _ZGVsMxvl8l8_sincos (x, s, c, pg); + return svadd_x (pg, svld1 (pg, s), svld1 (pg, s)); +} + +static svfloat64_t +_Z_sv_cexpi_wrap (svfloat64_t x, svbool_t pg) +{ + svfloat64x2_t sc = _ZGVsMxv_cexpi (x, pg); + return svadd_x (pg, svget2 (sc, 0), svget2 (sc, 1)); +} + +# if WANT_EXPERIMENTAL_MATH + +static svfloat32_t +_Z_sv_powi_wrap (svfloat32_t x, svbool_t pg) +{ + return _ZGVsMxvv_powi (x, svcvt_s32_f32_x (pg, x), pg); +} + +static svfloat64_t +_Z_sv_powk_wrap (svfloat64_t x, svbool_t pg) +{ + return _ZGVsMxvv_powk (x, svcvt_s64_f64_x (pg, x), pg); +} + +# endif + +#endif + +#if __aarch64__ +static float +sincospif_wrap (float x) +{ + float s, c; + arm_math_sincospif (x, &s, &c); + return s + c; +} + +static double +sincospi_wrap (double x) +{ + double s, c; + arm_math_sincospi (x, &s, &c); + return s + c; +} #endif static double |