xref: /aosp_15_r20/external/arm-optimized-routines/math/include/mathlib.h (revision 412f47f9e737e10ed5cc46ec6a8d7fa2264f8a14)
1*412f47f9SXin Li /*
2*412f47f9SXin Li  * Public API.
3*412f47f9SXin Li  *
4*412f47f9SXin Li  * Copyright (c) 2015-2023, Arm Limited.
5*412f47f9SXin Li  * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
6*412f47f9SXin Li  */
7*412f47f9SXin Li 
8*412f47f9SXin Li #ifndef _MATHLIB_H
9*412f47f9SXin Li #define _MATHLIB_H
10*412f47f9SXin Li 
11*412f47f9SXin Li float expf (float);
12*412f47f9SXin Li float exp2f (float);
13*412f47f9SXin Li float logf (float);
14*412f47f9SXin Li float log2f (float);
15*412f47f9SXin Li float powf (float, float);
16*412f47f9SXin Li float sinf (float);
17*412f47f9SXin Li float cosf (float);
18*412f47f9SXin Li void sincosf (float, float*, float*);
19*412f47f9SXin Li 
20*412f47f9SXin Li double exp (double);
21*412f47f9SXin Li double exp10 (double);
22*412f47f9SXin Li double exp2 (double);
23*412f47f9SXin Li double log (double);
24*412f47f9SXin Li double log2 (double);
25*412f47f9SXin Li double pow (double, double);
26*412f47f9SXin Li 
27*412f47f9SXin Li #if __aarch64__
28*412f47f9SXin Li # if __GNUC__ >= 5
29*412f47f9SXin Li typedef __Float32x4_t __f32x4_t;
30*412f47f9SXin Li typedef __Float64x2_t __f64x2_t;
31*412f47f9SXin Li # elif __clang_major__*100+__clang_minor__ >= 305
32*412f47f9SXin Li typedef __attribute__((__neon_vector_type__(4))) float __f32x4_t;
33*412f47f9SXin Li typedef __attribute__((__neon_vector_type__(2))) double __f64x2_t;
34*412f47f9SXin Li # else
35*412f47f9SXin Li #  error Unsupported compiler
36*412f47f9SXin Li # endif
37*412f47f9SXin Li 
38*412f47f9SXin Li # if __GNUC__ >= 9 || __clang_major__ >= 8
39*412f47f9SXin Li #  undef __vpcs
40*412f47f9SXin Li #  define __vpcs __attribute__((__aarch64_vector_pcs__))
41*412f47f9SXin Li 
42*412f47f9SXin Li /* Vector functions following the vector PCS using ABI names.  */
43*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);
44*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_cosf (__f32x4_t);
45*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_expf_1u (__f32x4_t);
46*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_expf (__f32x4_t);
47*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_exp2f_1u (__f32x4_t);
48*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_exp2f (__f32x4_t);
49*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);
50*412f47f9SXin Li __vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);
51*412f47f9SXin Li __vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);
52*412f47f9SXin Li __vpcs __f64x2_t _ZGVnN2v_cos (__f64x2_t);
53*412f47f9SXin Li __vpcs __f64x2_t _ZGVnN2v_exp (__f64x2_t);
54*412f47f9SXin Li __vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);
55*412f47f9SXin Li __vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);
56*412f47f9SXin Li # endif
57*412f47f9SXin Li #endif
58*412f47f9SXin Li 
59*412f47f9SXin Li #endif
60