1package runtime
2
3// This file redirects math stubs to their fallback implementation.
4// TODO: use optimized versions if possible.
5
6import (
7	_ "unsafe"
8)
9
10//go:linkname math_Asin math.Asin
11func math_Asin(x float64) float64 { return math_asin(x) }
12
13//go:linkname math_asin math.asin
14func math_asin(x float64) float64
15
16//go:linkname math_Asinh math.Asinh
17func math_Asinh(x float64) float64 { return math_asinh(x) }
18
19//go:linkname math_asinh math.asinh
20func math_asinh(x float64) float64
21
22//go:linkname math_Acos math.Acos
23func math_Acos(x float64) float64 { return math_acos(x) }
24
25//go:linkname math_acos math.acos
26func math_acos(x float64) float64
27
28//go:linkname math_Acosh math.Acosh
29func math_Acosh(x float64) float64 { return math_acosh(x) }
30
31//go:linkname math_acosh math.acosh
32func math_acosh(x float64) float64
33
34//go:linkname math_Atan math.Atan
35func math_Atan(x float64) float64 { return math_atan(x) }
36
37//go:linkname math_atan math.atan
38func math_atan(x float64) float64
39
40//go:linkname math_Atanh math.Atanh
41func math_Atanh(x float64) float64 { return math_atanh(x) }
42
43//go:linkname math_atanh math.atanh
44func math_atanh(x float64) float64
45
46//go:linkname math_Atan2 math.Atan2
47func math_Atan2(y, x float64) float64 { return math_atan2(y, x) }
48
49//go:linkname math_atan2 math.atan2
50func math_atan2(y, x float64) float64
51
52//go:linkname math_Cbrt math.Cbrt
53func math_Cbrt(x float64) float64 { return math_cbrt(x) }
54
55//go:linkname math_cbrt math.cbrt
56func math_cbrt(x float64) float64
57
58//go:linkname math_Ceil math.Ceil
59func math_Ceil(x float64) float64 {
60	if GOARCH == "arm64" || GOARCH == "wasm" {
61		return llvm_ceil(x)
62	}
63	return math_ceil(x)
64}
65
66//export llvm.ceil.f64
67func llvm_ceil(x float64) float64
68
69//go:linkname math_ceil math.ceil
70func math_ceil(x float64) float64
71
72//go:linkname math_Cos math.Cos
73func math_Cos(x float64) float64 { return math_cos(x) }
74
75//go:linkname math_cos math.cos
76func math_cos(x float64) float64
77
78//go:linkname math_Cosh math.Cosh
79func math_Cosh(x float64) float64 { return math_cosh(x) }
80
81//go:linkname math_cosh math.cosh
82func math_cosh(x float64) float64
83
84//go:linkname math_Erf math.Erf
85func math_Erf(x float64) float64 { return math_erf(x) }
86
87//go:linkname math_erf math.erf
88func math_erf(x float64) float64
89
90//go:linkname math_Erfc math.Erfc
91func math_Erfc(x float64) float64 { return math_erfc(x) }
92
93//go:linkname math_erfc math.erfc
94func math_erfc(x float64) float64
95
96//go:linkname math_Exp math.Exp
97func math_Exp(x float64) float64 { return math_exp(x) }
98
99//go:linkname math_exp math.exp
100func math_exp(x float64) float64
101
102//go:linkname math_Expm1 math.Expm1
103func math_Expm1(x float64) float64 { return math_expm1(x) }
104
105//go:linkname math_expm1 math.expm1
106func math_expm1(x float64) float64
107
108//go:linkname math_Exp2 math.Exp2
109func math_Exp2(x float64) float64 { return math_exp2(x) }
110
111//go:linkname math_exp2 math.exp2
112func math_exp2(x float64) float64
113
114//go:linkname math_Floor math.Floor
115func math_Floor(x float64) float64 {
116	if GOARCH == "arm64" || GOARCH == "wasm" {
117		return llvm_floor(x)
118	}
119	return math_floor(x)
120}
121
122//export llvm.floor.f64
123func llvm_floor(x float64) float64
124
125//go:linkname math_floor math.floor
126func math_floor(x float64) float64
127
128//go:linkname math_Frexp math.Frexp
129func math_Frexp(x float64) (float64, int) { return math_frexp(x) }
130
131//go:linkname math_frexp math.frexp
132func math_frexp(x float64) (float64, int)
133
134//go:linkname math_Hypot math.Hypot
135func math_Hypot(p, q float64) float64 { return math_hypot(p, q) }
136
137//go:linkname math_hypot math.hypot
138func math_hypot(p, q float64) float64
139
140//go:linkname math_Ldexp math.Ldexp
141func math_Ldexp(frac float64, exp int) float64 { return math_ldexp(frac, exp) }
142
143//go:linkname math_ldexp math.ldexp
144func math_ldexp(frac float64, exp int) float64
145
146//go:linkname math_Log math.Log
147func math_Log(x float64) float64 { return math_log(x) }
148
149//go:linkname math_log math.log
150func math_log(x float64) float64
151
152//go:linkname math_Log1p math.Log1p
153func math_Log1p(x float64) float64 { return math_log1p(x) }
154
155//go:linkname math_log1p math.log1p
156func math_log1p(x float64) float64
157
158//go:linkname math_Log10 math.Log10
159func math_Log10(x float64) float64 { return math_log10(x) }
160
161//go:linkname math_log10 math.log10
162func math_log10(x float64) float64
163
164//go:linkname math_Log2 math.Log2
165func math_Log2(x float64) float64 { return math_log2(x) }
166
167//go:linkname math_log2 math.log2
168func math_log2(x float64) float64
169
170//go:linkname math_Max math.Max
171func math_Max(x, y float64) float64 {
172	if GOARCH == "arm64" || GOARCH == "wasm" {
173		return llvm_maximum(x, y)
174	}
175	return math_max(x, y)
176}
177
178//export llvm.maximum.f64
179func llvm_maximum(x, y float64) float64
180
181//go:linkname math_max math.max
182func math_max(x, y float64) float64
183
184//go:linkname math_Min math.Min
185func math_Min(x, y float64) float64 {
186	if GOARCH == "arm64" || GOARCH == "wasm" {
187		return llvm_minimum(x, y)
188	}
189	return math_min(x, y)
190}
191
192//export llvm.minimum.f64
193func llvm_minimum(x, y float64) float64
194
195//go:linkname math_min math.min
196func math_min(x, y float64) float64
197
198//go:linkname math_Mod math.Mod
199func math_Mod(x, y float64) float64 { return math_mod(x, y) }
200
201//go:linkname math_mod math.mod
202func math_mod(x, y float64) float64
203
204//go:linkname math_Modf math.Modf
205func math_Modf(x float64) (float64, float64) { return math_modf(x) }
206
207//go:linkname math_modf math.modf
208func math_modf(x float64) (float64, float64)
209
210//go:linkname math_Pow math.Pow
211func math_Pow(x, y float64) float64 { return math_pow(x, y) }
212
213//go:linkname math_pow math.pow
214func math_pow(x, y float64) float64
215
216//go:linkname math_Remainder math.Remainder
217func math_Remainder(x, y float64) float64 { return math_remainder(x, y) }
218
219//go:linkname math_remainder math.remainder
220func math_remainder(x, y float64) float64
221
222//go:linkname math_Sin math.Sin
223func math_Sin(x float64) float64 { return math_sin(x) }
224
225//go:linkname math_sin math.sin
226func math_sin(x float64) float64
227
228//go:linkname math_Sinh math.Sinh
229func math_Sinh(x float64) float64 { return math_sinh(x) }
230
231//go:linkname math_sinh math.sinh
232func math_sinh(x float64) float64
233
234//go:linkname math_Sqrt math.Sqrt
235func math_Sqrt(x float64) float64 {
236	if GOARCH == "x86" || GOARCH == "amd64" || GOARCH == "wasm" {
237		return llvm_sqrt(x)
238	}
239	return math_sqrt(x)
240}
241
242//export llvm.sqrt.f64
243func llvm_sqrt(x float64) float64
244
245//go:linkname math_sqrt math.sqrt
246func math_sqrt(x float64) float64
247
248//go:linkname math_Tan math.Tan
249func math_Tan(x float64) float64 { return math_tan(x) }
250
251//go:linkname math_tan math.tan
252func math_tan(x float64) float64
253
254//go:linkname math_Tanh math.Tanh
255func math_Tanh(x float64) float64 { return math_tanh(x) }
256
257//go:linkname math_tanh math.tanh
258func math_tanh(x float64) float64
259
260//go:linkname math_Trunc math.Trunc
261func math_Trunc(x float64) float64 {
262	if GOARCH == "arm64" || GOARCH == "wasm" {
263		return llvm_trunc(x)
264	}
265	return math_trunc(x)
266}
267
268//export llvm.trunc.f64
269func llvm_trunc(x float64) float64
270
271//go:linkname math_trunc math.trunc
272func math_trunc(x float64) float64
273