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