]>
Commit | Line | Data |
---|---|---|
abe05a73 XL |
1 | #![cfg(not(test))] |
2 | ||
add651ee | 3 | use libc::{c_double, c_float, c_int}; |
abe05a73 | 4 | |
60c5eb7d | 5 | extern "C" { |
abe05a73 XL |
6 | pub fn acos(n: c_double) -> c_double; |
7 | pub fn asin(n: c_double) -> c_double; | |
8 | pub fn atan(n: c_double) -> c_double; | |
9 | pub fn atan2(a: c_double, b: c_double) -> c_double; | |
10 | pub fn cbrt(n: c_double) -> c_double; | |
11 | pub fn cbrtf(n: c_float) -> c_float; | |
12 | pub fn cosh(n: c_double) -> c_double; | |
13 | pub fn expm1(n: c_double) -> c_double; | |
14 | pub fn expm1f(n: c_float) -> c_float; | |
15 | pub fn fdim(a: c_double, b: c_double) -> c_double; | |
16 | pub fn fdimf(a: c_float, b: c_float) -> c_float; | |
17 | #[cfg_attr(target_env = "msvc", link_name = "_hypot")] | |
18 | pub fn hypot(x: c_double, y: c_double) -> c_double; | |
19 | #[cfg_attr(target_env = "msvc", link_name = "_hypotf")] | |
20 | pub fn hypotf(x: c_float, y: c_float) -> c_float; | |
21 | pub fn log1p(n: c_double) -> c_double; | |
22 | pub fn log1pf(n: c_float) -> c_float; | |
23 | pub fn sinh(n: c_double) -> c_double; | |
24 | pub fn tan(n: c_double) -> c_double; | |
25 | pub fn tanh(n: c_double) -> c_double; | |
add651ee FG |
26 | pub fn tgamma(n: c_double) -> c_double; |
27 | pub fn tgammaf(n: c_float) -> c_float; | |
28 | pub fn lgamma_r(n: c_double, s: &mut c_int) -> c_double; | |
29 | pub fn lgammaf_r(n: c_float, s: &mut c_int) -> c_float; | |
abe05a73 XL |
30 | } |
31 | ||
32 | pub use self::shims::*; | |
33 | ||
dfeec247 | 34 | #[cfg(not(all(target_env = "msvc", target_arch = "x86")))] |
abe05a73 XL |
35 | mod shims { |
36 | use libc::c_float; | |
37 | ||
60c5eb7d | 38 | extern "C" { |
abe05a73 XL |
39 | pub fn acosf(n: c_float) -> c_float; |
40 | pub fn asinf(n: c_float) -> c_float; | |
41 | pub fn atan2f(a: c_float, b: c_float) -> c_float; | |
42 | pub fn atanf(n: c_float) -> c_float; | |
43 | pub fn coshf(n: c_float) -> c_float; | |
44 | pub fn sinhf(n: c_float) -> c_float; | |
45 | pub fn tanf(n: c_float) -> c_float; | |
46 | pub fn tanhf(n: c_float) -> c_float; | |
47 | } | |
48 | } | |
49 | ||
dfeec247 | 50 | // On 32-bit x86 MSVC these functions aren't defined, so we just define shims |
f2b60f7d | 51 | // which promote everything to f64, perform the calculation, and then demote |
dfeec247 XL |
52 | // back to f32. While not precisely correct should be "correct enough" for now. |
53 | #[cfg(all(target_env = "msvc", target_arch = "x86"))] | |
abe05a73 XL |
54 | mod shims { |
55 | use libc::c_float; | |
56 | ||
57 | #[inline] | |
58 | pub unsafe fn acosf(n: c_float) -> c_float { | |
59 | f64::acos(n as f64) as c_float | |
60 | } | |
61 | ||
62 | #[inline] | |
63 | pub unsafe fn asinf(n: c_float) -> c_float { | |
64 | f64::asin(n as f64) as c_float | |
65 | } | |
66 | ||
67 | #[inline] | |
68 | pub unsafe fn atan2f(n: c_float, b: c_float) -> c_float { | |
69 | f64::atan2(n as f64, b as f64) as c_float | |
70 | } | |
71 | ||
72 | #[inline] | |
73 | pub unsafe fn atanf(n: c_float) -> c_float { | |
74 | f64::atan(n as f64) as c_float | |
75 | } | |
76 | ||
77 | #[inline] | |
78 | pub unsafe fn coshf(n: c_float) -> c_float { | |
79 | f64::cosh(n as f64) as c_float | |
80 | } | |
81 | ||
82 | #[inline] | |
83 | pub unsafe fn sinhf(n: c_float) -> c_float { | |
84 | f64::sinh(n as f64) as c_float | |
85 | } | |
86 | ||
87 | #[inline] | |
88 | pub unsafe fn tanf(n: c_float) -> c_float { | |
89 | f64::tan(n as f64) as c_float | |
90 | } | |
91 | ||
92 | #[inline] | |
93 | pub unsafe fn tanhf(n: c_float) -> c_float { | |
94 | f64::tanh(n as f64) as c_float | |
95 | } | |
96 | } |