]> git.proxmox.com Git - rustc.git/blame - library/std/src/sys/windows/cmath.rs
New upstream version 1.73.0+dfsg1
[rustc.git] / library / std / src / sys / windows / cmath.rs
CommitLineData
abe05a73
XL
1#![cfg(not(test))]
2
add651ee 3use libc::{c_double, c_float, c_int};
abe05a73 4
60c5eb7d 5extern "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
32pub use self::shims::*;
33
dfeec247 34#[cfg(not(all(target_env = "msvc", target_arch = "x86")))]
abe05a73
XL
35mod 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
54mod 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}