1/* 2 * Public API. 3 * 4 * Copyright (c) 2015-2023, Arm Limited. 5 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception 6 */ 7 8#ifndef _MATHLIB_H 9#define _MATHLIB_H 10 11float acosf (float); 12float acoshf (float); 13float asinf (float); 14float asinhf (float); 15float atan2f (float, float); 16float atanf (float); 17float atanhf (float); 18float cbrtf (float); 19float coshf (float); 20float cospif (float); 21float erfcf (float); 22float erff (float); 23float erfinvf (float); 24float exp10f (float); 25float expm1f (float); 26float log10f (float); 27float log1pf (float); 28float sinhf (float); 29float sinpif (float); 30float tanf (float); 31float tanhf (float); 32 33double acos (double); 34double acosh (double); 35double asin (double); 36double asinh (double); 37double atan (double); 38double atan2 (double, double); 39double atanh (double); 40double cbrt (double); 41double cosh (double); 42double cospi (double); 43double erfc (double); 44double erfinv (double); 45double exp10 (double); 46double expm1 (double); 47double log10 (double); 48double log1p (double); 49double sinh (double); 50double sinpi (double); 51double tanh (double); 52 53long double cospil (long double); 54long double erfinvl (long double); 55long double exp10l (long double); 56long double sinpil (long double); 57 58#if __aarch64__ 59# if __GNUC__ >= 5 60typedef __Float32x4_t __f32x4_t; 61typedef __Float64x2_t __f64x2_t; 62# elif __clang_major__ * 100 + __clang_minor__ >= 305 63typedef __attribute__ ((__neon_vector_type__ (4))) float __f32x4_t; 64typedef __attribute__ ((__neon_vector_type__ (2))) double __f64x2_t; 65# else 66# error Unsupported compiler 67# endif 68 69# if __GNUC__ >= 9 || __clang_major__ >= 8 70# define __vpcs __attribute__ ((__aarch64_vector_pcs__)) 71 72typedef struct __f32x4x2_t 73{ 74 __f32x4_t val[2]; 75} __f32x4x2_t; 76 77typedef struct __f64x2x2_t 78{ 79 __f64x2_t val[2]; 80} __f64x2x2_t; 81 82/* Vector functions following the vector PCS using ABI names. */ 83__vpcs __f32x4_t _ZGVnN4v_acoshf (__f32x4_t); 84__vpcs __f64x2_t _ZGVnN2v_acosh (__f64x2_t); 85__vpcs __f32x4_t _ZGVnN4v_acosf (__f32x4_t); 86__vpcs __f64x2_t _ZGVnN2v_acos (__f64x2_t); 87__vpcs __f32x4_t _ZGVnN4v_asinf (__f32x4_t); 88__vpcs __f64x2_t _ZGVnN2v_asin (__f64x2_t); 89__vpcs __f32x4_t _ZGVnN4v_asinhf (__f32x4_t); 90__vpcs __f64x2_t _ZGVnN2v_asinh (__f64x2_t); 91__vpcs __f32x4_t _ZGVnN4v_atanf (__f32x4_t); 92__vpcs __f64x2_t _ZGVnN2v_atan (__f64x2_t); 93__vpcs __f32x4_t _ZGVnN4vv_atan2f (__f32x4_t, __f32x4_t); 94__vpcs __f64x2_t _ZGVnN2vv_atan2 (__f64x2_t, __f64x2_t); 95__vpcs __f32x4_t _ZGVnN4v_atanhf (__f32x4_t); 96__vpcs __f64x2_t _ZGVnN2v_atanh (__f64x2_t); 97__vpcs __f32x4_t _ZGVnN4v_cbrtf (__f32x4_t); 98__vpcs __f64x2_t _ZGVnN2v_cbrt (__f64x2_t); 99__vpcs __f32x4x2_t _ZGVnN4v_cexpif (__f32x4_t); 100__vpcs __f64x2x2_t _ZGVnN2v_cexpi (__f64x2_t); 101__vpcs __f32x4_t _ZGVnN4v_coshf (__f32x4_t); 102__vpcs __f64x2_t _ZGVnN2v_cosh (__f64x2_t); 103__vpcs __f32x4_t _ZGVnN4v_cospif (__f32x4_t); 104__vpcs __f64x2_t _ZGVnN2v_cospi (__f64x2_t); 105__vpcs __f32x4_t _ZGVnN4v_erff (__f32x4_t); 106__vpcs __f64x2_t _ZGVnN2v_erf (__f64x2_t); 107__vpcs __f32x4_t _ZGVnN4v_erfcf (__f32x4_t); 108__vpcs __f64x2_t _ZGVnN2v_erfc (__f64x2_t); 109__vpcs __f32x4_t _ZGVnN4v_erfinvf (__f32x4_t); 110__vpcs __f64x2_t _ZGVnN2v_erfinv (__f64x2_t); 111__vpcs __f32x4_t _ZGVnN4v_exp10f (__f32x4_t); 112__vpcs __f64x2_t _ZGVnN2v_exp10 (__f64x2_t); 113__vpcs __f64x2_t _ZGVnN2v_exp2 (__f64x2_t); 114__vpcs __f32x4_t _ZGVnN4v_expm1f (__f32x4_t); 115__vpcs __f64x2_t _ZGVnN2v_expm1 (__f64x2_t); 116__vpcs __f32x4_t _ZGVnN4vv_hypotf (__f32x4_t, __f32x4_t); 117__vpcs __f64x2_t _ZGVnN2vv_hypot (__f64x2_t, __f64x2_t); 118__vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t); 119__vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t); 120__vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t); 121__vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t); 122__vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t); 123__vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t); 124__vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t); 125__vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t); 126__vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t); 127__vpcs __f32x4_t _ZGVnN4v_sinpif (__f32x4_t); 128__vpcs __f64x2_t _ZGVnN2v_sinpi (__f64x2_t); 129__vpcs __f32x4_t _ZGVnN4v_tanf (__f32x4_t); 130__vpcs __f64x2_t _ZGVnN2v_tan (__f64x2_t); 131__vpcs __f32x4_t _ZGVnN4v_tanhf (__f32x4_t); 132__vpcs __f64x2_t _ZGVnN2v_tanh (__f64x2_t); 133__vpcs void _ZGVnN4vl4l4_sincosf (__f32x4_t, __f32x4_t *, __f32x4_t *); 134__vpcs void _ZGVnN2vl8l8_sincos (__f64x2_t, __f64x2_t *, __f64x2_t *); 135 136# endif 137 138# if WANT_SVE_MATH 139# include <arm_sve.h> 140svfloat32_t _ZGVsMxv_acoshf (svfloat32_t, svbool_t); 141svfloat64_t _ZGVsMxv_acosh (svfloat64_t, svbool_t); 142svfloat32_t _ZGVsMxv_acosf (svfloat32_t, svbool_t); 143svfloat64_t _ZGVsMxv_acos (svfloat64_t, svbool_t); 144svfloat32_t _ZGVsMxv_asinhf (svfloat32_t, svbool_t); 145svfloat64_t _ZGVsMxv_asinh (svfloat64_t, svbool_t); 146svfloat32_t _ZGVsMxv_asinf (svfloat32_t, svbool_t); 147svfloat64_t _ZGVsMxv_asin (svfloat64_t, svbool_t); 148svfloat32_t _ZGVsMxv_atanhf (svfloat32_t, svbool_t); 149svfloat64_t _ZGVsMxv_atanh (svfloat64_t, svbool_t); 150svfloat32_t _ZGVsMxvv_atan2f (svfloat32_t, svfloat32_t, svbool_t); 151svfloat32_t _ZGVsMxv_atanf (svfloat32_t, svbool_t); 152svfloat64_t _ZGVsMxv_atan (svfloat64_t, svbool_t); 153svfloat64_t _ZGVsMxvv_atan2 (svfloat64_t, svfloat64_t, svbool_t); 154svfloat32_t _ZGVsMxv_cbrtf (svfloat32_t, svbool_t); 155svfloat64_t _ZGVsMxv_cbrt (svfloat64_t, svbool_t); 156svfloat32x2_t _ZGVsMxv_cexpif (svfloat32_t, svbool_t); 157svfloat64x2_t _ZGVsMxv_cexpi (svfloat64_t, svbool_t); 158svfloat32_t _ZGVsMxv_coshf (svfloat32_t, svbool_t); 159svfloat64_t _ZGVsMxv_cosh (svfloat64_t, svbool_t); 160svfloat32_t _ZGVsMxv_cosf (svfloat32_t, svbool_t); 161svfloat32_t _ZGVsMxv_cospif (svfloat32_t, svbool_t); 162svfloat64_t _ZGVsMxv_cos (svfloat64_t, svbool_t); 163svfloat64_t _ZGVsMxv_cospi (svfloat64_t, svbool_t); 164svfloat32_t _ZGVsMxv_erff (svfloat32_t, svbool_t); 165svfloat64_t _ZGVsMxv_erf (svfloat64_t, svbool_t); 166svfloat64_t _ZGVsMxv_erfc (svfloat64_t, svbool_t); 167svfloat32_t _ZGVsMxv_erfcf (svfloat32_t, svbool_t); 168svfloat32_t _ZGVsMxv_expf (svfloat32_t, svbool_t); 169svfloat64_t _ZGVsMxv_exp (svfloat64_t, svbool_t); 170svfloat32_t _ZGVsMxv_exp10f (svfloat32_t, svbool_t); 171svfloat64_t _ZGVsMxv_exp10 (svfloat64_t, svbool_t); 172svfloat32_t _ZGVsMxv_exp2f (svfloat32_t, svbool_t); 173svfloat64_t _ZGVsMxv_exp2 (svfloat64_t, svbool_t); 174svfloat32_t _ZGVsMxv_expm1f (svfloat32_t, svbool_t); 175svfloat64_t _ZGVsMxv_expm1 (svfloat64_t, svbool_t); 176svfloat32_t _ZGVsMxvv_hypotf (svfloat32_t, svfloat32_t, svbool_t); 177svfloat64_t _ZGVsMxvv_hypot (svfloat64_t, svfloat64_t, svbool_t); 178svfloat32_t _ZGVsMxv_logf (svfloat32_t, svbool_t); 179svfloat64_t _ZGVsMxv_log (svfloat64_t, svbool_t); 180svfloat32_t _ZGVsMxv_log10f (svfloat32_t, svbool_t); 181svfloat64_t _ZGVsMxv_log10 (svfloat64_t, svbool_t); 182svfloat32_t _ZGVsMxv_log1pf (svfloat32_t, svbool_t); 183svfloat64_t _ZGVsMxv_log1p (svfloat64_t, svbool_t); 184svfloat32_t _ZGVsMxv_log2f (svfloat32_t, svbool_t); 185svfloat64_t _ZGVsMxv_log2 (svfloat64_t, svbool_t); 186svfloat32_t _ZGVsMxvv_powi (svfloat32_t, svint32_t, svbool_t); 187svfloat64_t _ZGVsMxvv_powk (svfloat64_t, svint64_t, svbool_t); 188svfloat32_t _ZGVsMxvv_powf (svfloat32_t, svfloat32_t, svbool_t); 189svfloat64_t _ZGVsMxvv_pow (svfloat64_t, svfloat64_t, svbool_t); 190svfloat32_t _ZGVsMxv_sinhf (svfloat32_t, svbool_t); 191svfloat64_t _ZGVsMxv_sinh (svfloat64_t, svbool_t); 192svfloat32_t _ZGVsMxv_sinf (svfloat32_t, svbool_t); 193svfloat32_t _ZGVsMxv_sinpif (svfloat32_t, svbool_t); 194svfloat64_t _ZGVsMxv_sin (svfloat64_t, svbool_t); 195svfloat64_t _ZGVsMxv_sinpi (svfloat64_t, svbool_t); 196svfloat32_t _ZGVsMxv_tanhf (svfloat32_t, svbool_t); 197svfloat64_t _ZGVsMxv_tanh (svfloat64_t, svbool_t); 198svfloat32_t _ZGVsMxv_tanf (svfloat32_t, svbool_t); 199svfloat64_t _ZGVsMxv_tan (svfloat64_t, svbool_t); 200void _ZGVsMxvl4l4_sincosf (svfloat32_t, float *, float *, svbool_t); 201void _ZGVsMxvl8l8_sincos (svfloat64_t, double *, double *, svbool_t); 202# endif 203 204#endif 205 206#endif 207