diff options
author | Joe Ramsay <Joe.Ramsay@arm.com> | 2022-11-09 14:52:49 +0000 |
---|---|---|
committer | Joe Ramsay <joe.ramsay@arm.com> | 2022-11-09 14:52:49 +0000 |
commit | cf69308ea773524eec9365108d608e4c9e4036af (patch) | |
tree | 382ba2d86e42d0c898b812410011a7e8fddc8e0b /pl/math/test | |
parent | 1721f53563004249849968a4f78a3ed162b5e8e1 (diff) | |
download | arm-optimized-routines-cf69308ea773524eec9365108d608e4c9e4036af.tar.gz |
pl/math/test: Simplify ulp and bench macros
Reduces the amount of boilerplate developers need to write for new
routines.
Diffstat (limited to 'pl/math/test')
-rw-r--r-- | pl/math/test/mathbench_funcs.h | 190 | ||||
-rw-r--r-- | pl/math/test/ulp_funcs.h | 164 | ||||
-rw-r--r-- | pl/math/test/ulp_wrappers.h | 50 |
3 files changed, 144 insertions, 260 deletions
diff --git a/pl/math/test/mathbench_funcs.h b/pl/math/test/mathbench_funcs.h index e73206e..d09cdb0 100644 --- a/pl/math/test/mathbench_funcs.h +++ b/pl/math/test/mathbench_funcs.h @@ -5,6 +5,27 @@ * Copyright (c) 2022, Arm Limited. * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ + +#ifdef __vpcs + +#define ZVNF(f, a, b) F(__s_##f, a, b) VF(__v_##f, a, b) VNF(__vn_##f, a, b) VNF(_ZGVnN4v_##f, a, b) +#define ZVND(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) VND(__vn_##f, a, b) VND(_ZGVnN2v_##f, a, b) + +#elif __aarch64__ + +#define ZVNF(f, a, b) F(__s_##f, a, b) VF(__v_##f, a, b) +#define ZVND(f, a, b) D(__s_##f, a, b) VD(__v_##f, a, b) + +#else + +#define ZVNF(f, a, b) F(__s_##f, a, b) +#define ZVND(f, a, b) D(__s_##f, a, b) + +#endif + +#define VZSVF(f, a, b) SVF(__sv_##f##_x, a, b) SVF(_ZGVsMsv_##f, a, b) +#define VZSVD(f, a, b) SVD(__sv_##f##_x, a, b) SVD(_ZGVsMsv_##f, a, b) + F (acoshf, 1.0, 10.0) F (asinhf, -10.0, 10.0) F (atanf, -10.0, 10.0) @@ -36,154 +57,53 @@ D (log2, 0.01, 11.1) D (sin, -3.1, 3.1) #if WANT_VMATH -F (__s_asinhf, -10.0, 10.0) -F (__s_atanf, -10.0, 10.0) -D (__s_atan, -10.0, 10.0) +ZVNF (asinhf, -10.0, 10.0) +ZVNF (atanf, -10.0, 10.0) +ZVND (atan, -10.0, 10.0) +ZVNF (coshf, -10.0, 10.0) +ZVNF (erff, -4.0, 4.0) +ZVND (erf, -6.0, 6.0) +ZVNF (erfcf, -6.0, 28.0) +ZVND (erfc, -6.0, 28.0) +ZVNF (expm1f, -9.9, 9.9) +ZVND (expm1, -9.9, 9.9) +ZVNF (log10f, 0.01, 11.1) +ZVND (log10, 0.01, 11.1) +ZVNF (log1pf, -0.9, 10.0) +ZVND (log1p, -0.9, 10.0) +ZVNF (log2f, 0.01, 11.1) +ZVND (log2, 0.01, 11.1) +ZVNF (sinhf, -10.0, 10.0) +ZVNF (tanf, -3.1, 3.1) {"__s_atan2f", 'f', 0, -10.0, 10.0, {.f = __s_atan2f_wrap}}, {"__s_atan2", 'd', 0, -10.0, 10.0, {.d = __s_atan2_wrap}}, -F (__s_coshf, -10.0, 10.0) -F (__s_erff, -4.0, 4.0) -D (__s_erf, -6.0, 6.0) -F (__s_erfcf, -6.0, 28.0) -D (__s_erfc, -6.0, 28.0) -F (__s_expm1f, -9.9, 9.9) -D (__s_expm1, -9.9, 9.9) -F (__s_log10f, 0.01, 11.1) -D (__s_log10, 0.01, 11.1) -F (__s_log1pf, -0.9, 10.0) -D (__s_log1p, -0.9, 10.0) -F (__s_log2f, 0.01, 11.1) -D (__s_log2, 0.01, 11.1) -F (__s_sinhf, -10.0, 10.0) -F (__s_tanf, -3.1, 3.1) -#if __aarch64__ -VF (__v_asinhf, -10.0, 10.0) -VF (__v_atanf, -10.0, 10.0) -VD (__v_atan, -10.0, 10.0) {"__v_atan2f", 'f', 'v', -10.0, 10.0, {.vf = __v_atan2f_wrap}}, {"__v_atan2", 'd', 'v', -10.0, 10.0, {.vd = __v_atan2_wrap}}, -VF (__v_coshf, -10.0, 10.0) -VF (__v_erff, -4.0, 4.0) -VD (__v_erf, -6.0, 6.0) -VF (__v_erfcf, -6.0, 28.0) -VD (__v_erfc, -6.0, 28.0) -VF (__v_expm1f, -9.9, 9.9) -VD (__v_expm1, -9.9, 9.9) -VD (__v_log10, 0.01, 11.1) -VF (__v_log10f, 0.01, 11.1) -VF (__v_log1pf, -0.9, 10.0) -VD (__v_log1p, -0.9, 10.0) -VF (__v_log2f, 0.01, 11.1) -VD (__v_log2, 0.01, 11.1) -VF (__v_sinhf, -10.0, 10.0) -VF (__v_tanf, -3.1, 3.1) -#ifdef __vpcs -VNF (__vn_asinhf, -10.0, 10.0) -VNF (_ZGVnN4v_asinhf, -10.0, 10.0) - -VNF (__vn_atanf, -10.0, 10.0) -VNF (_ZGVnN4v_atanf, -10.0, 10.0) - -VND (__vn_atan, -10.0, 10.0) -VND (_ZGVnN2v_atan, -10.0, 10.0) - {"__vn_atan2f", 'f', 'n', -10.0, 10.0, {.vnf = __vn_atan2f_wrap}}, {"_ZGVnN4vv_atan2f", 'f', 'n', -10.0, 10.0, {.vnf = _Z_atan2f_wrap}}, - {"__vn_atan2", 'd', 'n', -10.0, 10.0, {.vnd = __vn_atan2_wrap}}, {"_ZGVnN2vv_atan2", 'd', 'n', -10.0, 10.0, {.vnd = _Z_atan2_wrap}}, -VNF (__vn_coshf, -10.0, 10.0) -VNF (_ZGVnN4v_coshf, -10.0, 10.0) - -VNF (__vn_erff, -4.0, 4.0) -VNF (_ZGVnN4v_erff, -4.0, 4.0) - -VND (__vn_erf, -6.0, 6.0) -VND (_ZGVnN2v_erf, -6.0, 6.0) - -VNF (__vn_erfcf, -6.0, 28.0) -VNF (_ZGVnN4v_erfcf, -6.0, 28.0) - -VND (__vn_erfc, -6.0, 28.0) -VND (_ZGVnN2v_erfc, -6.0, 28.0) - -VNF (__vn_expm1f, -9.9, 9.9) -VNF (_ZGVnN4v_expm1f, -9.9, 9.9) - -VND (__vn_expm1, -9.9, 9.9) -VND (_ZGVnN2v_expm1, -9.9, 9.9) - -VNF (__vn_log10f, 0.01, 11.1) -VNF (_ZGVnN4v_log10f, 0.01, 11.1) - -VND (__vn_log10, 0.01, 11.1) -VND (_ZGVnN2v_log10, 0.01, 11.1) - -VNF (__vn_log1pf, -0.9, 10.0) -VNF (_ZGVnN4v_log1pf, -0.9, 10.0) - -VND (__vn_log1p, -0.9, 10.0) -VND (_ZGVnN2v_log1p, -0.9, 10.0) - -VNF (__vn_log2f, 0.01, 11.1) -VNF (_ZGVnN4v_log2f, 0.01, 11.1) - -VND (__vn_log2, 0.01, 11.1) -VND (_ZGVnN2v_log2, 0.01, 11.1) - -VNF (__vn_sinhf, -10.0, 10.0) -VNF (_ZGVnN4v_sinhf, -10.0, 10.0) - -VNF (__vn_tanf, -3.1, 3.1) -VNF (_ZGVnN4v_tanf, -3.1, 3.1) -#endif -#endif #if WANT_SVE_MATH -SVF (__sv_atanf_x, -3.1, 3.1) -SVF (_ZGVsMxv_atanf, -3.1, 3.1) -SVD (__sv_atan_x, -3.1, 3.1) -SVD (_ZGVsMxv_atan, -3.1, 3.1) - +ZSVF (atanf, -3.1, 3.1) +ZSVD (atan, -3.1, 3.1) {"__sv_atan2f_x", 'f', 'n', -10.0, 10.0, {.svf = __sv_atan2f_wrap}}, {"_ZGVsMxvv_atan2f", 'f', 'n', -10.0, 10.0, {.svf = _Z_sv_atan2f_wrap}}, -{"__sv_atan2", 'd', 'n', -10.0, 10.0, {.svd = __sv_atan2_wrap}}, +{"__sv_atan2_x", 'd', 'n', -10.0, 10.0, {.svd = __sv_atan2_wrap}}, {"_ZGVsM2vv_atan2", 'd', 'n', -10.0, 10.0, {.svd = _Z_sv_atan2_wrap}}, - -SVF (__sv_erff_x, -4.0, 4.0) -SVF (_ZGVsMxv_erff, -4.0, 4.0) -SVD (__sv_erf_x, -4.0, 4.0) -SVD (_ZGVsMxv_erf, -4.0, 4.0) - -SVD (__sv_erfc_x, -4, 10) -SVD (_ZGVsMxv_erfc, -4, 10) - -SVF (__sv_expf_x, -9.9, 9.9) -SVF (_ZGVsMxv_expf, -9.9, 9.9) - -SVF (__sv_cosf_x, -3.1, 3.1) -SVF (_ZGVsMxv_cosf, -3.1, 3.1) -SVF (__sv_sinf_x, -3.1, 3.1) -SVF (_ZGVsMxv_sinf, -3.1, 3.1) - -SVF (__sv_logf_x, 0.01, 11.1) -SVF (_ZGVsMxv_logf, 0.01, 11.1) -SVD (__sv_log_x, 0.01, 11.1) -SVD (_ZGVsMxv_log, 0.01, 11.1) - -SVF (__sv_log10f_x, 0.01, 11.1) -SVF (_ZGVsMxv_log10f, 0.01, 11.1) -SVD (__sv_log10_x, 0.01, 11.1) -SVD (_ZGVsMxv_log10, 0.01, 11.1) - -SVD (__sv_cos_x, -3.1, 3.1) -SVD (_ZGVsMxv_cos, -3.1, 3.1) -SVD (__sv_sin_x, -3.1, 3.1) -SVD (_ZGVsMxv_sin, -3.1, 3.1) - -SVF (__sv_tanf_x, -3.1, 3.1) -SVF (_ZGVsMxv_tanf, -3.1, 3.1) - +ZSVF (erff, -4.0, 4.0) +ZSVD (erf, -4.0, 4.0) +ZSVD (erfc, -4, 10) +ZSVF (expf, -9.9, 9.9) +ZSVF (cosf, -3.1, 3.1) +ZSVD (cos, -3.1, 3.1) +ZSVF (sinf, -3.1, 3.1) +ZSVD (sin, -3.1, 3.1) +ZSVF (logf, 0.01, 11.1) +ZSVD (log, 0.01, 11.1) +ZSVF (log10f, 0.01, 11.1) +ZSVD (log10, 0.01, 11.1) +ZSVF (tanf, -3.1, 3.1) {"__sv_powif_x", 'f', 'n', -10.0, 10.0, {.svf = __sv_powif_wrap}}, {"_ZGVsMxvv_powi", 'f', 'n', -10.0, 10.0, {.svf = _Z_sv_powi_wrap}}, {"__sv_powi_x", 'd', 'n', -10.0, 10.0, {.svd = __sv_powi_wrap}}, diff --git a/pl/math/test/ulp_funcs.h b/pl/math/test/ulp_funcs.h index 98b63c8..a6c3866 100644 --- a/pl/math/test/ulp_funcs.h +++ b/pl/math/test/ulp_funcs.h @@ -4,6 +4,35 @@ * Copyright (c) 2022, Arm Limited. * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ + +#ifdef __vpcs + +#define _ZVNF1(f) SF1 (f) VF1 (f) ZVNF1 (f) +#define _ZVND1(f) SD1 (f) VD1 (f) ZVND1 (f) +#define _ZVNF2(f) SF2 (f) VF2 (f) ZVNF2 (f) +#define _ZVND2(f) SD2 (f) VD2 (f) ZVND2 (f) + +#elif __aarch64 + +#define _ZVNF1(f) SF1 (f) VF1 (f) +#define _ZVND1(f) SD1 (f) VD1 (f) +#define _ZVNF2(f) SF2 (f) VF2 (f) +#define _ZVND2(f) SD2 (f) VD2 (f) + +#else + +#define _ZVNF1(f) SF1 (f) +#define _ZVND1(f) SD1 (f) +#define _ZVNF2(f) SF2 (f) +#define _ZVND2(f) SD2 (f) + +#endif + +#define _ZSVF1(f) SVF1 (f) ZSVF1 (f) +#define _ZSVF2(f) SVF2 (f) ZSVF2 (f) +#define _ZSVD1(f) SVD1 (f) ZSVD1 (f) +#define _ZSVD2(f) SVD2 (f) ZSVD2 (f) + F1 (acosh) F1 (asinh) F2 (atan2) @@ -23,108 +52,47 @@ D1 (expm1) D1 (log10) D1 (log1p) #if WANT_VMATH -SF1 (asinh) -SF1 (atan) -SD1 (atan) -SF2 (atan2) -SD2 (atan2) -SF1 (cosh) -SF1 (erf) -SD1 (erf) -SF1 (erfc) -SD1 (erfc) -SF1 (expm1) -SD1 (expm1) -SF1 (log10) -SD1 (log10) -SF1 (log1p) -SD1 (log1p) -SF1 (log2) -SD1 (log2) -SF1 (sinh) -SF1 (tan) -#if __aarch64__ -VF1 (asinh) -VF1 (atan) -VD1 (atan) -VF2 (atan2) -VD2 (atan2) -VF1 (cosh) -VF1 (erf) -VD1 (erf) -VF1 (erfc) -VD1 (erfc) -VF1 (expm1) -VD1 (expm1) -VF1 (log10) -VD1 (log10) -VF1 (log1p) -VD1 (log1p) -VF1 (log2) -VD1 (log2) -VF1 (sinh) -VF1 (tan) -#ifdef __vpcs -ZVNF1 (asinh) -ZVNF1 (atan) -ZVND1 (atan) -ZVNF2 (atan2) -ZVND2 (atan2) -ZVNF1 (cosh) -ZVNF1 (erf) -ZVND1 (erf) -ZVNF1 (erfc) -ZVND1 (erfc) -ZVNF1 (expm1) -ZVND1 (expm1) -ZVNF1 (log10) -ZVND1 (log10) -ZVNF1 (log1p) -ZVND1 (log1p) -ZVNF1 (log2) -ZVND1 (log2) -ZVNF1 (sinh) -ZVNF1 (tan) -#endif -#endif +_ZVNF1 (asinh) +_ZVNF1 (atan) +_ZVND1 (atan) +_ZVNF2 (atan2) +_ZVND2 (atan2) +_ZVNF1 (cosh) +_ZVNF1 (erf) +_ZVND1 (erf) +_ZVNF1 (erfc) +_ZVND1 (erfc) +_ZVNF1 (expm1) +_ZVND1 (expm1) +_ZVNF1 (log10) +_ZVND1 (log10) +_ZVNF1 (log1p) +_ZVND1 (log1p) +_ZVNF1 (log2) +_ZVND1 (log2) +_ZVNF1 (sinh) +_ZVNF1 (tan) #if WANT_SVE_MATH -SVF2 (atan2) -ZSVF2 (atan2) -SVD2 (atan2) -ZSVD2 (atan2) -SVF1 (atan) -ZSVF1 (atan) -SVD1 (atan) -ZSVD1 (atan) -SVF1 (cos) -ZSVF1 (cos) -SVD1 (cos) -ZSVD1 (cos) -SVF1 (erf) -ZSVF1 (erf) -SVD1 (erf) -ZSVD1 (erf) -SVD1 (erfc) -ZSVD1 (erfc) -SVF1 (exp) -ZSVF1 (exp) -SVF1 (log) -ZSVF1 (log) -SVD1 (log) -ZSVD1 (log) -SVF1 (log10) -ZSVF1 (log10) -SVD1 (log10) -ZSVD1 (log10) +_ZSVF2 (atan2) +_ZSVD2 (atan2) +_ZSVF1 (atan) +_ZSVD1 (atan) +_ZSVF1 (cos) +_ZSVD1 (cos) +_ZSVF1 (erf) +_ZSVD1 (erf) +_ZSVD1 (erfc) +_ZSVF1 (exp) +_ZSVF1 (log) +_ZSVD1 (log) +_ZSVF1 (log10) +_ZSVD1 (log10) F (__sv_powi, sv_powi, ref_powi, mpfr_powi, 2, 0, d2, 0) F (_ZGVsMxvv_powk, Z_sv_powk, ref_powi, mpfr_powi, 2, 0, d2, 0) F (__sv_powif, sv_powif, ref_powif, mpfr_powi, 2, 1, f2, 0) F (_ZGVsMxvv_powi, Z_sv_powi, ref_powif, mpfr_powi, 2, 1, f2, 0) -SVF1 (sin) -ZSVF1 (sin) -SVD1 (sin) -ZSVD1 (sin) -SVF1 (tan) -ZSVF1 (tan) +_ZSVF1 (sin) +_ZSVD1 (sin) +_ZSVF1 (tan) #endif #endif diff --git a/pl/math/test/ulp_wrappers.h b/pl/math/test/ulp_wrappers.h index 9c639c1..18dfe13 100644 --- a/pl/math/test/ulp_wrappers.h +++ b/pl/math/test/ulp_wrappers.h @@ -75,10 +75,28 @@ DECL_POW_INT_REF(ref_powi, long double, double, int) #define ZVD1_WRAP(func) static double Z_##func(double x) { return _ZGVnN2v_##func(argd(x))[0]; } #define ZVD2_WRAP(func) static double Z_##func(double x, double y) { return _ZGVnN2vv_##func(argd(x), argd(y))[0]; } -#define ZVNF1_WRAP(func) VNF1_WRAP(func) ZVF1_WRAP(func) -#define ZVNF2_WRAP(func) VNF2_WRAP(func) ZVF2_WRAP(func) -#define ZVND1_WRAP(func) VND1_WRAP(func) ZVD1_WRAP(func) -#define ZVND2_WRAP(func) VND2_WRAP(func) ZVD2_WRAP(func) +#ifdef __vpcs + +#define ZVNF1_WRAP(func) VF1_WRAP(func) VNF1_WRAP(func) ZVF1_WRAP(func) +#define ZVNF2_WRAP(func) VF2_WRAP(func) VNF2_WRAP(func) ZVF2_WRAP(func) +#define ZVND1_WRAP(func) VD1_WRAP(func) VND1_WRAP(func) ZVD1_WRAP(func) +#define ZVND2_WRAP(func) VD2_WRAP(func) VND2_WRAP(func) ZVD2_WRAP(func) + +#elif __aarch64__ + +#define ZVNF1_WRAP(func) VF1_WRAP(func) VNF1_WRAP(func) +#define ZVNF2_WRAP(func) VF2_WRAP(func) VNF2_WRAP(func) +#define ZVND1_WRAP(func) VD1_WRAP(func) VND1_WRAP(func) +#define ZVND2_WRAP(func) VD2_WRAP(func) VND2_WRAP(func) + +#else + +#define ZVNF1_WRAP(func) VF1_WRAP(func) +#define ZVNF2_WRAP(func) VF2_WRAP(func) +#define ZVND1_WRAP(func) VD1_WRAP(func) +#define ZVND2_WRAP(func) VD2_WRAP(func) + +#endif #define SVF1_WRAP(func) static float sv_##func##f(float x) { return svretf(__sv_##func##f_x(svargf(x), svptrue_b32())); } #define SVF2_WRAP(func) static float sv_##func##f(float x, float y) { return svretf(__sv_##func##f_x(svargf(x), svargf(y), svptrue_b32())); } @@ -96,28 +114,7 @@ DECL_POW_INT_REF(ref_powi, long double, double, int) #define ZSVND2_WRAP(func) SVD2_WRAP(func) ZSVD2_WRAP(func) /* Wrappers for vector functions. */ -#if __aarch64__ && WANT_VMATH -VF1_WRAP(asinh) -VF1_WRAP(atan) -VF2_WRAP(atan2) -VF1_WRAP(cosh) -VF1_WRAP(erf) -VF1_WRAP(erfc) -VF1_WRAP(expm1) -VF1_WRAP(log10) -VF1_WRAP(log1p) -VF1_WRAP(log2) -VF1_WRAP(sinh) -VF1_WRAP(tan) -VD1_WRAP(atan) -VD2_WRAP(atan2) -VD1_WRAP(erf) -VD1_WRAP(erfc) -VD1_WRAP(expm1) -VD1_WRAP(log10) -VD1_WRAP(log1p) -VD1_WRAP(log2) -#ifdef __vpcs +#if WANT_VMATH ZVNF1_WRAP(asinh) ZVNF1_WRAP(atan) ZVNF2_WRAP(atan2) @@ -138,7 +135,6 @@ ZVND1_WRAP(expm1) ZVND1_WRAP(log10) ZVND1_WRAP(log1p) ZVND1_WRAP(log2) -#endif #if WANT_SVE_MATH ZSVNF2_WRAP(atan2) ZSVNF1_WRAP(atan) |