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 expf (float);
12float exp2f (float);
13float logf (float);
14float log2f (float);
15float powf (float, float);
16float sinf (float);
17float cosf (float);
18void sincosf (float, float*, float*);
19
20double exp (double);
21double exp10 (double);
22double exp2 (double);
23double log (double);
24double log2 (double);
25double pow (double, double);
26
27#if __aarch64__
28# if __GNUC__ >= 5
29typedef __Float32x4_t __f32x4_t;
30typedef __Float64x2_t __f64x2_t;
31# elif __clang_major__*100+__clang_minor__ >= 305
32typedef __attribute__((__neon_vector_type__(4))) float __f32x4_t;
33typedef __attribute__((__neon_vector_type__(2))) double __f64x2_t;
34# else
35#  error Unsupported compiler
36# endif
37
38# if __GNUC__ >= 9 || __clang_major__ >= 8
39#  undef __vpcs
40#  define __vpcs __attribute__((__aarch64_vector_pcs__))
41
42/* Vector functions following the vector PCS using ABI names.  */
43__vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);
44__vpcs __f32x4_t _ZGVnN4v_cosf (__f32x4_t);
45__vpcs __f32x4_t _ZGVnN4v_expf_1u (__f32x4_t);
46__vpcs __f32x4_t _ZGVnN4v_expf (__f32x4_t);
47__vpcs __f32x4_t _ZGVnN4v_exp2f_1u (__f32x4_t);
48__vpcs __f32x4_t _ZGVnN4v_exp2f (__f32x4_t);
49__vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);
50__vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);
51__vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);
52__vpcs __f64x2_t _ZGVnN2v_cos (__f64x2_t);
53__vpcs __f64x2_t _ZGVnN2v_exp (__f64x2_t);
54__vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);
55__vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);
56# endif
57#endif
58
59#endif
60