aboutsummaryrefslogtreecommitdiff
path: root/pl/math/include/mathlib.h
blob: dc2cef875001b5040f85d613aa90ea35dcd64233 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
// clang-format off
/*
 * Public API.
 *
 * Copyright (c) 2015-2022, Arm Limited.
 * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception
 */

#ifndef _MATHLIB_H
#define _MATHLIB_H

float acoshf (float);
float asinhf (float);
float atan2f (float, float);
float atanf (float);
float atanhf (float);
float cbrtf (float);
float coshf (float);
float erfcf (float);
float erff (float);
float expm1f (float);
float log10f (float);
float log1pf (float);
float sinhf (float);
float tanf (float);
float tanhf (float);

double acosh (double);
double asinh (double);
double atan (double);
double atan2 (double, double);
double atanh (double);
double cbrt (double);
double cosh (double);
double erfc (double);
double expm1 (double);
double log10 (double);
double log1p (double);
double sinh (double);
double tanh (double);

float __s_acoshf (float);
float __s_asinhf (float);
float __s_atanf (float);
float __s_atan2f (float, float);
float __s_atanhf (float);
float __s_cbrtf (float);
float __s_coshf (float);
float __s_erfcf (float);
float __s_erff (float);
float __s_expm1f (float);
float __s_log10f (float);
float __s_log1pf (float);
float __s_log2f (float);
float __s_sinhf (float);
float __s_tanf (float);
float __s_tanhf (float);

double __s_asinh (double);
double __s_atan (double);
double __s_atan2 (double, double);
double __s_atanh (double);
double __s_cbrt (double);
double __s_cosh (double);
double __s_erf (double);
double __s_erfc (double);
double __s_expm1 (double);
double __s_log10 (double);
double __s_log1p (double);
double __s_log2 (double);
double __s_sinh (double);
double __s_tanh (double);

#if __aarch64__
#if __GNUC__ >= 5
typedef __Float32x4_t __f32x4_t;
typedef __Float64x2_t __f64x2_t;
#elif __clang_major__*100+__clang_minor__ >= 305
typedef __attribute__((__neon_vector_type__(4))) float __f32x4_t;
typedef __attribute__((__neon_vector_type__(2))) double __f64x2_t;
#else
#error Unsupported compiler
#endif

/* Vector functions following the base PCS.  */
__f32x4_t __v_acoshf (__f32x4_t);
__f32x4_t __v_asinhf (__f32x4_t);
__f64x2_t __v_asinh (__f64x2_t);
__f32x4_t __v_atanf (__f32x4_t);
__f64x2_t __v_atan (__f64x2_t);
__f32x4_t __v_atan2f (__f32x4_t, __f32x4_t);
__f64x2_t __v_atan2 (__f64x2_t, __f64x2_t);
__f32x4_t __v_atanhf (__f32x4_t);
__f64x2_t __v_atanh (__f64x2_t);
__f32x4_t __v_cbrtf (__f32x4_t);
__f64x2_t __v_cbrt (__f64x2_t);
__f32x4_t __v_coshf (__f32x4_t);
__f64x2_t __v_cosh (__f64x2_t);
__f32x4_t __v_erff (__f32x4_t);
__f64x2_t __v_erf (__f64x2_t);
__f32x4_t __v_erfcf (__f32x4_t);
__f64x2_t __v_erfc (__f64x2_t);
__f32x4_t __v_expm1f (__f32x4_t);
__f64x2_t __v_expm1 (__f64x2_t);
__f32x4_t __v_log10f (__f32x4_t);
__f64x2_t __v_log10 (__f64x2_t);
__f32x4_t __v_log1pf (__f32x4_t);
__f64x2_t __v_log1p (__f64x2_t);
__f32x4_t __v_log2f (__f32x4_t);
__f64x2_t __v_log2 (__f64x2_t);
__f32x4_t __v_sinhf (__f32x4_t);
__f64x2_t __v_sinh (__f64x2_t);
__f32x4_t __v_tanf (__f32x4_t);
__f32x4_t __v_tanhf (__f32x4_t);
__f64x2_t __v_tanh (__f64x2_t);

#if __GNUC__ >= 9 || __clang_major__ >= 8
#define __vpcs __attribute__((__aarch64_vector_pcs__))

/* Vector functions following the vector PCS.  */
__vpcs __f32x4_t __vn_acoshf (__f32x4_t);
__vpcs __f32x4_t __vn_asinhf (__f32x4_t);
__vpcs __f64x2_t __vn_asinh (__f64x2_t);
__vpcs __f32x4_t __vn_atanf (__f32x4_t);
__vpcs __f64x2_t __vn_atan (__f64x2_t);
__vpcs __f32x4_t __vn_atan2f (__f32x4_t, __f32x4_t);
__vpcs __f64x2_t __vn_atan2 (__f64x2_t, __f64x2_t);
__vpcs __f32x4_t __vn_atanhf (__f32x4_t);
__vpcs __f64x2_t __vn_atanh (__f64x2_t);
__vpcs __f32x4_t __vn_cbrtf (__f32x4_t);
__vpcs __f64x2_t __vn_cbrt (__f64x2_t);
__vpcs __f32x4_t __vn_coshf (__f32x4_t);
__vpcs __f64x2_t __vn_cosh (__f64x2_t);
__vpcs __f32x4_t __vn_erff (__f32x4_t);
__vpcs __f64x2_t __vn_erf (__f64x2_t);
__vpcs __f32x4_t __vn_erfcf (__f32x4_t);
__vpcs __f64x2_t __vn_erfc (__f64x2_t);
__vpcs __f32x4_t __vn_expm1f (__f32x4_t);
__vpcs __f64x2_t __vn_expm1 (__f64x2_t);
__vpcs __f32x4_t __vn_log10f (__f32x4_t);
__vpcs __f64x2_t __vn_log10 (__f64x2_t);
__vpcs __f32x4_t __vn_log1pf (__f32x4_t);
__vpcs __f64x2_t __vn_log1p (__f64x2_t);
__vpcs __f32x4_t __vn_log2f (__f32x4_t);
__vpcs __f64x2_t __vn_log2 (__f64x2_t);
__vpcs __f32x4_t __vn_sinhf (__f32x4_t);
__vpcs __f64x2_t __vn_sinh (__f64x2_t);
__vpcs __f32x4_t __vn_tanf (__f32x4_t);
__vpcs __f32x4_t __vn_tanhf (__f32x4_t);
__vpcs __f64x2_t __vn_tanh (__f64x2_t);

/* Vector functions following the vector PCS using ABI names.  */
__vpcs __f32x4_t _ZGVnN4v_acoshf (__f32x4_t);
__vpcs __f32x4_t _ZGVnN4v_asinhf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_asinh (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_atanf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_atan (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4vv_atan2f (__f32x4_t, __f32x4_t);
__vpcs __f64x2_t _ZGVnN2vv_atan2 (__f64x2_t, __f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_atanhf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_atanh (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_cbrtf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_cbrt (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_coshf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_cosh (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_erff (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_erf (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_erfcf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_erfc (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_expm1f (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_expm1 (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_log10f (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_log10 (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_log1pf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_log1p (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_log2f (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_log2 (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_sinhf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_sinh (__f64x2_t);
__vpcs __f32x4_t _ZGVnN4v_tanf (__f32x4_t);
__vpcs __f32x4_t _ZGVnN4v_tanhf (__f32x4_t);
__vpcs __f64x2_t _ZGVnN2v_tanh (__f64x2_t);

#endif

#if WANT_SVE_MATH
#include <arm_sve.h>
svfloat32_t __sv_atan2f_x (svfloat32_t, svfloat32_t, svbool_t);
svfloat32_t __sv_atanf_x (svfloat32_t, svbool_t);
svfloat64_t __sv_atan_x (svfloat64_t, svbool_t);
svfloat64_t __sv_atan2_x (svfloat64_t, svfloat64_t, svbool_t);
svfloat32_t __sv_cosf_x (svfloat32_t, svbool_t);
svfloat64_t __sv_cos_x (svfloat64_t, svbool_t);
svfloat32_t __sv_erff_x (svfloat32_t, svbool_t);
svfloat64_t __sv_erf_x (svfloat64_t, svbool_t);
svfloat64_t __sv_erfc_x (svfloat64_t, svbool_t);
svfloat32_t __sv_expf_x (svfloat32_t, svbool_t);
svfloat32_t __sv_logf_x (svfloat32_t, svbool_t);
svfloat64_t __sv_log_x (svfloat64_t, svbool_t);
svfloat32_t __sv_log10f_x (svfloat32_t, svbool_t);
svfloat64_t __sv_log10_x (svfloat64_t, svbool_t);
svfloat32_t __sv_log2f_x (svfloat32_t, svbool_t);
svfloat64_t __sv_log2_x (svfloat64_t, svbool_t);
svfloat32_t __sv_powif_x (svfloat32_t, svint32_t, svbool_t);
svfloat64_t __sv_powi_x (svfloat64_t, svint64_t, svbool_t);
svfloat32_t __sv_sinf_x (svfloat32_t, svbool_t);
svfloat64_t __sv_sin_x (svfloat64_t, svbool_t);
svfloat32_t __sv_tanf_x (svfloat32_t, svbool_t);
/* SVE ABI names.  */
svfloat32_t _ZGVsMxvv_atan2f (svfloat32_t, svfloat32_t, svbool_t);
svfloat32_t _ZGVsMxv_atanf (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_atan (svfloat64_t, svbool_t);
svfloat64_t _ZGVsMxvv_atan2 (svfloat64_t, svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_cosf (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_cos (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_erff (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_erf (svfloat64_t, svbool_t);
svfloat64_t _ZGVsMxv_erfc (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_expf (svfloat32_t, svbool_t);
svfloat32_t _ZGVsMxv_logf (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_log (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_log10f (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_log10 (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_log2f (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_log2 (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxvv_powi(svfloat32_t, svint32_t, svbool_t);
svfloat64_t _ZGVsMxvv_powk(svfloat64_t, svint64_t, svbool_t);
svfloat32_t _ZGVsMxv_sinf (svfloat32_t, svbool_t);
svfloat64_t _ZGVsMxv_sin (svfloat64_t, svbool_t);
svfloat32_t _ZGVsMxv_tanf (svfloat32_t, svbool_t);
#endif

#endif

#endif
// clang-format on