Skip to content

Commit 49d36c7

Browse files
committed
Trying to remove wrappers from float
1 parent c314a9c commit 49d36c7

File tree

7 files changed

+349
-111
lines changed

7 files changed

+349
-111
lines changed

src/libcore/cmath.rs

+96-94
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,119 @@
11
import ctypes::c_int;
2+
import ctypes::c_float;
3+
import ctypes::c_double;
4+
5+
// FIXME scalbn copysign
26

37
#[link_name = "m"]
48
#[abi = "cdecl"]
5-
native mod f64 {
9+
native mod c_double {
610

711
// Alpabetically sorted by link_name
812

9-
pure fn acos(n: f64) -> f64;
10-
pure fn asin(n: f64) -> f64;
11-
pure fn atan(n: f64) -> f64;
12-
pure fn atan2(a: f64, b: f64) -> f64;
13-
pure fn cbrt(n: f64) -> f64;
14-
pure fn ceil(n: f64) -> f64;
15-
pure fn cos(n: f64) -> f64;
16-
pure fn cosh(n: f64) -> f64;
17-
pure fn erf(n: f64) -> f64;
18-
pure fn erfc(n: f64) -> f64;
19-
pure fn exp(n: f64) -> f64;
20-
pure fn expm1(n: f64) -> f64;
21-
pure fn exp2(n: f64) -> f64;
22-
#[link_name="fabs"] pure fn abs(n: f64) -> f64;
23-
#[link_name="fdim"] pure fn sub_pos(a: f64, b: f64) -> f64;
24-
pure fn floor(n: f64) -> f64;
25-
#[link_name="fma"] pure fn mul_add(a: f64, b: f64, c: f64) -> f64;
26-
#[link_name="fmax"] pure fn max(a: f64, b: f64) -> f64;
27-
#[link_name="fmin"] pure fn min(a: f64, b: f64) -> f64;
28-
pure fn nextafter(x: f64, y: f64) -> f64
29-
pure fn fmod(x: f64, y: f64) -> f64;
30-
pure fn frexp(n: f64, &value: c_int) -> f64;
31-
pure fn hypot(x: f64, y: f64) -> f64;
32-
pure fn ldexp(x: f64, n: c_int) -> f64;
33-
#[link_name="lgamma_r"] pure fn lgamma(n: f64, sign: *c_int) -> f64;
34-
#[link_name="log"] pure fn ln(n: f64) -> f64;
35-
pure fn logb(n: f64) -> f64;
36-
#[link_name="log1p"] pure fn ln1p(n: f64) -> f64;
37-
pure fn log10(n: f64) -> f64;
38-
pure fn log2(n: f64) -> f64;
39-
pure fn ilogb(n: f64) -> c_int;
40-
pure fn modf(n: f64, iptr: *f64) -> f64;
41-
pure fn pow(n: f64, e: f64) -> f64;
42-
#[link_name="remainder"] pure fn rem(a: f64, b: f64) -> f64;
43-
pure fn rint(n: f64) -> f64;
44-
pure fn round(n: f64) -> f64;
45-
pure fn sin(n: f64) -> f64;
46-
pure fn sinh(n: f64) -> f64;
47-
pure fn sqrt(n: f64) -> f64;
48-
pure fn tan(n: f64) -> f64;
49-
pure fn tanh(n: f64) -> f64;
50-
pure fn tgamma(n: f64) -> f64;
51-
pure fn trunc(n: f64) -> f64;
13+
pure fn acos(n: c_double) -> c_double;
14+
pure fn asin(n: c_double) -> c_double;
15+
pure fn atan(n: c_double) -> c_double;
16+
pure fn atan2(a: c_double, b: c_double) -> c_double;
17+
pure fn cbrt(n: c_double) -> c_double;
18+
pure fn ceil(n: c_double) -> c_double;
19+
pure fn cos(n: c_double) -> c_double;
20+
pure fn cosh(n: c_double) -> c_double;
21+
pure fn erf(n: c_double) -> c_double;
22+
pure fn erfc(n: c_double) -> c_double;
23+
pure fn exp(n: c_double) -> c_double;
24+
pure fn expm1(n: c_double) -> c_double;
25+
pure fn exp2(n: c_double) -> c_double;
26+
#[link_name="fabs"] pure fn abs(n: c_double) -> c_double;
27+
#[link_name="fdim"] pure fn sub_pos(a: c_double, b: c_double) -> c_double;
28+
pure fn floor(n: c_double) -> c_double;
29+
#[link_name="fma"] pure fn mul_add(a: c_double, b: c_double, c: c_double) -> c_double;
30+
#[link_name="fmax"] pure fn fmax(a: c_double, b: c_double) -> c_double;
31+
#[link_name="fmin"] pure fn fmin(a: c_double, b: c_double) -> c_double;
32+
pure fn nextafter(x: c_double, y: c_double) -> c_double;
33+
#[link_name="fmod"] pure fn rem(x: c_double, y: c_double) -> c_double;
34+
pure fn frexp(n: c_double, &value: c_int) -> c_double;
35+
pure fn hypot(x: c_double, y: c_double) -> c_double;
36+
pure fn ldexp(x: c_double, n: c_int) -> c_double;
37+
#[link_name="lgamma_r"] pure fn lgamma(n: c_double, &sign: c_int) -> c_double;
38+
#[link_name="log"] pure fn ln(n: c_double) -> c_double;
39+
pure fn logb(n: c_double) -> c_double;
40+
#[link_name="log1p"] pure fn ln1p(n: c_double) -> c_double;
41+
pure fn log10(n: c_double) -> c_double;
42+
pure fn log2(n: c_double) -> c_double;
43+
pure fn ilogb(n: c_double) -> c_int;
44+
pure fn modf(n: c_double, &iptr: c_double) -> c_double;
45+
pure fn pow(n: c_double, e: c_double) -> c_double;
46+
pure fn rint(n: c_double) -> c_double;
47+
pure fn round(n: c_double) -> c_double;
48+
pure fn sin(n: c_double) -> c_double;
49+
pure fn sinh(n: c_double) -> c_double;
50+
pure fn sqrt(n: c_double) -> c_double;
51+
pure fn tan(n: c_double) -> c_double;
52+
pure fn tanh(n: c_double) -> c_double;
53+
pure fn tgamma(n: c_double) -> c_double;
54+
pure fn trunc(n: c_double) -> c_double;
5255
}
5356

5457
#[link_name = "m"]
5558
#[abi = "cdecl"]
56-
native mod f32 {
59+
native mod c_float {
5760

5861
// Alpabetically sorted by link_name
5962

60-
#[link_name="acosf"] pure fn acos(n: f32) -> f32;
61-
#[link_name="asinf"] pure fn asin(n: f32) -> f32;
62-
#[link_name="atanf"] pure fn atan(n: f32) -> f32;
63-
#[link_name="atan2f"] pure fn atan2(a: f32, b: f32) -> f32;
64-
#[link_name="cbrtf"] pure fn cbrt(n: f32) -> f32;
65-
#[link_name="ceilf"] pure fn ceil(n: f32) -> f32;
66-
#[link_name="cosf"] pure fn cos(n: f32) -> f32;
67-
#[link_name="coshf"] pure fn cosh(n: f32) -> f32;
68-
#[link_name="erff"] pure fn erf(n: f32) -> f32;
69-
#[link_name="erfcf"] pure fn erfc(n: f32) -> f32;
70-
#[link_name="expf"] pure fn exp(n: f32) -> f32;
71-
#[link_name="expm1f"]pure fn expm1(n: f32) -> f32;
72-
#[link_name="exp2f"] pure fn exp2(n: f32) -> f32;
73-
#[link_name="fabsf"] pure fn abs(n: f32) -> f32;
74-
#[link_name="fdimf"] pure fn sub_pos(a: f32, b: f32) -> f32;
75-
#[link_name="floorf"] pure fn floor(n: f32) -> f32;
76-
#[link_name="frexpf"] pure fn frexp(n: f64, &value: c_int) -> f32;
77-
#[link_name="fmaf"] pure fn mul_add(a: f32, b: f32, c: f32) -> f32;
78-
#[link_name="fmaxf"] pure fn max(a: f32, b: f32) -> f32;
79-
#[link_name="fminf"] pure fn min(a: f32, b: f32) -> f32;
80-
#[link_name="nextafterf"] pure fn nextafter(x: f32, y: f32) -> f32
81-
#[link_name="fmodf"] pure fn fmod(x: f32, y: f32) -> f32;
82-
#[link_name="hypotf"] pure fn hypot(x: f32, y: f32) -> f32;
83-
#[link_name="ldexpf"] pure fn ldexp(x: f32, n: c_int) -> f32;
84-
#[link_name="lgammaf_r"] pure fn lgamma(n: f32, sign: *c_int) -> f32;
85-
#[link_name="logf"] pure fn ln(n: f32) -> f32;
86-
#[link_name="logbf"] pure fn logb(n: f32) -> f32;
87-
#[link_name="log1p"] pure fn ln1p(n: f64) -> f64;
88-
#[link_name="log2f"] pure fn log2(n: f32) -> f32;
89-
#[link_name="log10f"] pure fn log10(n: f32) -> f32;
90-
#[link_name="ilogbf"] pure fn ilogb(n: f32) -> c_int;
91-
#[link_name="modff"] pure fn modf(n: f32, iptr: *f32) -> f32;
92-
#[link_name="powf"] pure fn pow(n: f32, e: f32) -> f32;
93-
#[link_name="remainderf"] pure fn rem(a: f32, b: f32) -> f32;
94-
#[link_name="rintf"] pure fn rint(n: f32) -> f32;
95-
#[link_name="roundf"] pure fn round(n: f32) -> f32;
96-
#[link_name="sinf"] pure fn sin(n: f32) -> f32;
97-
#[link_name="sinhf"] pure fn sinh(n: f32) -> f32;
98-
#[link_name="sqrtf"] pure fn sqrt(n: f32) -> f32;
99-
#[link_name="tanf"] pure fn tan(n: f32) -> f32;
100-
#[link_name="tanhf"] pure fn tanh(n: f32) -> f32;
101-
#[link_name="tgammaf"] pure fn tgamma(n: f32) -> f32;
102-
#[link_name="truncf"] pure fn trunc(n: f32) -> f32;
63+
#[link_name="acosf"] pure fn acos(n: c_float) -> c_float;
64+
#[link_name="asinf"] pure fn asin(n: c_float) -> c_float;
65+
#[link_name="atanf"] pure fn atan(n: c_float) -> c_float;
66+
#[link_name="atan2f"] pure fn atan2(a: c_float, b: c_float) -> c_float;
67+
#[link_name="cbrtf"] pure fn cbrt(n: c_float) -> c_float;
68+
#[link_name="ceilf"] pure fn ceil(n: c_float) -> c_float;
69+
#[link_name="cosf"] pure fn cos(n: c_float) -> c_float;
70+
#[link_name="coshf"] pure fn cosh(n: c_float) -> c_float;
71+
#[link_name="erff"] pure fn erf(n: c_float) -> c_float;
72+
#[link_name="erfcf"] pure fn erfc(n: c_float) -> c_float;
73+
#[link_name="expf"] pure fn exp(n: c_float) -> c_float;
74+
#[link_name="expm1f"]pure fn expm1(n: c_float) -> c_float;
75+
#[link_name="exp2f"] pure fn exp2(n: c_float) -> c_float;
76+
#[link_name="fabsf"] pure fn abs(n: c_float) -> c_float;
77+
#[link_name="fdimf"] pure fn sub_pos(a: c_float, b: c_float) -> c_float;
78+
#[link_name="floorf"] pure fn floor(n: c_float) -> c_float;
79+
#[link_name="frexpf"] pure fn frexp(n: c_double, &value: c_int) -> c_float;
80+
#[link_name="fmaf"] pure fn mul_add(a: c_float, b: c_float, c: c_float) -> c_float;
81+
#[link_name="fmaxf"] pure fn fmax(a: c_float, b: c_float) -> c_float;
82+
#[link_name="fminf"] pure fn fmin(a: c_float, b: c_float) -> c_float;
83+
#[link_name="nextafterf"] pure fn nextafter(x: c_float, y: c_float) -> c_float;
84+
#[link_name="fmodf"] pure fn rem(x: c_float, y: c_float) -> c_float;
85+
#[link_name="hypotf"] pure fn hypot(x: c_float, y: c_float) -> c_float;
86+
#[link_name="ldexpf"] pure fn ldexp(x: c_float, n: c_int) -> c_float;
87+
#[link_name="lgammaf_r"] pure fn lgamma(n: c_float, &sign: c_int) -> c_float;
88+
#[link_name="logf"] pure fn ln(n: c_float) -> c_float;
89+
#[link_name="logbf"] pure fn logb(n: c_float) -> c_float;
90+
#[link_name="log1p"] pure fn ln1p(n: c_double) -> c_double;
91+
#[link_name="log2f"] pure fn log2(n: c_float) -> c_float;
92+
#[link_name="log10f"] pure fn log10(n: c_float) -> c_float;
93+
#[link_name="ilogbf"] pure fn ilogb(n: c_float) -> c_int;
94+
#[link_name="modff"] pure fn modf(n: c_float, &iptr: c_float) -> c_float;
95+
#[link_name="powf"] pure fn pow(n: c_float, e: c_float) -> c_float;
96+
#[link_name="rintf"] pure fn rint(n: c_float) -> c_float;
97+
#[link_name="roundf"] pure fn round(n: c_float) -> c_float;
98+
#[link_name="sinf"] pure fn sin(n: c_float) -> c_float;
99+
#[link_name="sinhf"] pure fn sinh(n: c_float) -> c_float;
100+
#[link_name="sqrtf"] pure fn sqrt(n: c_float) -> c_float;
101+
#[link_name="tanf"] pure fn tan(n: c_float) -> c_float;
102+
#[link_name="tanhf"] pure fn tanh(n: c_float) -> c_float;
103+
#[link_name="tgammaf"] pure fn tgamma(n: c_float) -> c_float;
104+
#[link_name="truncf"] pure fn trunc(n: c_float) -> c_float;
103105
}
104106

105107
#[link_name = "m"]
106108
#[abi = "cdecl"]
107109
native mod bessel {
108-
pure fn j0(n: m_float) -> m_float;
109-
pure fn j1(n: m_float) -> m_float;
110-
pure fn jn(i: c_int, n: m_float) -> m_float;
110+
pure fn j0(n: c_double) -> c_double;
111+
pure fn j1(n: c_double) -> c_double;
112+
pure fn jn(i: c_int, n: c_double) -> c_double;
111113

112-
pure fn y0(n: m_float) -> m_float;
113-
pure fn y1(n: m_float) -> m_float;
114-
pure fn yn(i: c_int, n: m_float) -> m_float;
114+
pure fn y0(n: c_double) -> c_double;
115+
pure fn y1(n: c_double) -> c_double;
116+
pure fn yn(i: c_int, n: c_double) -> c_double;
115117
}
116118

117119
//

src/libcore/ctypes.rs

+16-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ FIXME: Add a test that uses some native code to verify these sizes,
99
which are not obviously correct for all potential platforms.
1010
*/
1111

12+
// PORT adapt to architecture
13+
1214
/*
1315
Type: c_int
1416

@@ -72,6 +74,20 @@ when interoperating with C void pointers can help in documentation.
7274
*/
7375
type void = int;
7476

77+
/*
78+
Type: c_float
79+
80+
A float value with the same size as a C `float`
81+
*/
82+
type c_float = f32;
83+
84+
/*
85+
Type: c_float
86+
87+
A float value with the same size as a C `double`
88+
*/
89+
type c_double = f64;
90+
7591
/*
7692
Type: size_t
7793

@@ -115,4 +131,3 @@ An unsigned integer with the same size as a C enum
115131
*/
116132
type enum = u32;
117133

118-

src/libcore/f32.rs

+96-5
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,108 @@ This exposes the same operations as `math`, just for `f32` even though
88
they do not show up in the docs right now!
99
*/
1010

11-
import cmath::f32::*;
11+
export t;
1212

1313
export
14-
acos, asin, atan, atan2, ceil, cos, cosh, exp, abs, floor, fmod,
15-
frexp, ldexp, ln, ln1p, log10, log2, modf, rint, round, pow, sin,
16-
sinh, sqrt, tan, tanh, trunc, t;
14+
acos,
15+
asin,
16+
atan,
17+
atan2,
18+
cbrt,
19+
ceil,
20+
cos,
21+
cosh,
22+
erf,
23+
erfc,
24+
exp,
25+
expm1,
26+
exp2,
27+
abs,
28+
sub_pos,
29+
floor,
30+
mul_add,
31+
fmax,
32+
fmin,
33+
nextafter,
34+
frexp,
35+
hypot,
36+
ldexp,
37+
lgamma,
38+
ln,
39+
logb,
40+
ln1p,
41+
log10,
42+
log2,
43+
ilogb,
44+
modf,
45+
pow,
46+
rem,
47+
rint,
48+
round,
49+
sin,
50+
sinh,
51+
sqrt,
52+
tan,
53+
tanh,
54+
tgamma,
55+
trunc;
56+
57+
export consts;
1758

1859
export radix, mantissa_digits, digits, epsilon, min_value, max_value,
1960
min_exp, max_exp, min_10_exp, max_10_exp;
2061

21-
export consts;
62+
// PORT
63+
64+
import cops = cmath::c_float;
65+
66+
type t = f64;
67+
68+
import
69+
cops::acos,
70+
cops::asin,
71+
cops::atan,
72+
cops::atan2,
73+
cops::cbrt,
74+
cops::ceil,
75+
cops::cos,
76+
cops::cosh,
77+
cops::erf,
78+
cops::erfc,
79+
cops::exp,
80+
cops::expm1,
81+
cops::exp2,
82+
cops::abs,
83+
cops::sub_pos,
84+
cops::floor,
85+
cops::mul_add,
86+
cops::max,
87+
cops::min,
88+
cops::nextafter,
89+
cops::fmod,
90+
cops::frexp,
91+
cops::hypot,
92+
cops::ldexp,
93+
cops::lgamma,
94+
cops::ln,
95+
cops::logb,
96+
cops::ln1p,
97+
cops::log10,
98+
cops::log2,
99+
cops::ilogb,
100+
cops::modf,
101+
cops::pow,
102+
cops::rem,
103+
cops::rint,
104+
cops::round,
105+
cops::sin,
106+
cops::sinh,
107+
cops::sqrt,
108+
cops::tan,
109+
cops::tanh,
110+
cops::tgamma,
111+
cops::trunc;
112+
22113

23114
type t = f32;
24115

0 commit comments

Comments
 (0)