aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpravic <[email protected]>2016-06-06 23:06:58 +0300
committerpravic <[email protected]>2016-06-06 23:06:58 +0300
commit1c889bacaf6b132e605638c5a8f9a78bdf8c7e67 (patch)
tree2b00929b29754929bfd86c868cd6cd6f1052c2bb
parentupdate to 2016-06-06 (diff)
parentapply libcore_nofp patch (diff)
downloadkmd-env-rs-1c889bacaf6b132e605638c5a8f9a78bdf8c7e67.tar.xz
kmd-env-rs-1c889bacaf6b132e605638c5a8f9a78bdf8c7e67.zip
Merge branch 'nofp_patch' into libcore_nofp
-rw-r--r--libcore/clone.rs2
-rw-r--r--libcore/default.rs2
-rw-r--r--libcore/fmt/mod.rs7
-rw-r--r--libcore/intrinsics.rs6
-rw-r--r--libcore/lib.rs2
-rw-r--r--libcore/num/flt2dec/decoder.rs3
-rw-r--r--libcore/num/mod.rs9
-rw-r--r--libcore/ops.rs38
8 files changed, 59 insertions, 10 deletions
diff --git a/libcore/clone.rs b/libcore/clone.rs
index e8cd36f..c7a8fa8 100644
--- a/libcore/clone.rs
+++ b/libcore/clone.rs
@@ -149,7 +149,9 @@ clone_impl! { u16 }
clone_impl! { u32 }
clone_impl! { u64 }
+#[cfg(not(disable_float))]
clone_impl! { f32 }
+#[cfg(not(disable_float))]
clone_impl! { f64 }
clone_impl! { () }
diff --git a/libcore/default.rs b/libcore/default.rs
index 485ddae..028e820 100644
--- a/libcore/default.rs
+++ b/libcore/default.rs
@@ -154,5 +154,7 @@ default_impl! { i16, 0 }
default_impl! { i32, 0 }
default_impl! { i64, 0 }
+#[cfg(not(disable_float))]
default_impl! { f32, 0.0f32 }
+#[cfg(not(disable_float))]
default_impl! { f64, 0.0f64 }
diff --git a/libcore/fmt/mod.rs b/libcore/fmt/mod.rs
index 6579e5d..bf5a26b 100644
--- a/libcore/fmt/mod.rs
+++ b/libcore/fmt/mod.rs
@@ -17,6 +17,7 @@ use prelude::v1::*;
use cell::{UnsafeCell, Cell, RefCell, Ref, RefMut, BorrowState};
use marker::PhantomData;
use mem;
+#[cfg(not(disable_float))]
use num::flt2dec;
use ops::Deref;
use result;
@@ -1053,6 +1054,7 @@ impl<'a> Formatter<'a> {
/// Takes the formatted parts and applies the padding.
/// Assumes that the caller already has rendered the parts with required precision,
/// so that `self.precision` can be ignored.
+ #[cfg(not(disable_float))]
fn pad_formatted_parts(&mut self, formatted: &flt2dec::Formatted) -> Result {
if let Some(mut width) = self.width {
// for the sign-aware zero padding, we render the sign first and
@@ -1089,6 +1091,7 @@ impl<'a> Formatter<'a> {
}
}
+ #[cfg(not(disable_float))]
fn write_formatted_parts(&mut self, formatted: &flt2dec::Formatted) -> Result {
fn write_bytes(buf: &mut Write, s: &[u8]) -> Result {
buf.write_str(unsafe { str::from_utf8_unchecked(s) })
@@ -1477,6 +1480,7 @@ impl<'a, T: ?Sized> Pointer for &'a mut T {
}
}
+#[cfg(not(disable_float))]
// Common code of floating point Debug and Display.
fn float_to_decimal_common<T>(fmt: &mut Formatter, num: &T, negative_zero: bool) -> Result
where T: flt2dec::DecodableFloat
@@ -1501,6 +1505,7 @@ fn float_to_decimal_common<T>(fmt: &mut Formatter, num: &T, negative_zero: bool)
fmt.pad_formatted_parts(&formatted)
}
+#[cfg(not(disable_float))]
// Common code of floating point LowerExp and UpperExp.
fn float_to_exponential_common<T>(fmt: &mut Formatter, num: &T, upper: bool) -> Result
where T: flt2dec::DecodableFloat
@@ -1554,7 +1559,9 @@ macro_rules! floating { ($ty:ident) => {
}
}
} }
+#[cfg(not(disable_float))]
floating! { f32 }
+#[cfg(not(disable_float))]
floating! { f64 }
// Implementation of Display/Debug for various core types
diff --git a/libcore/intrinsics.rs b/libcore/intrinsics.rs
index 94baf18..baf0838 100644
--- a/libcore/intrinsics.rs
+++ b/libcore/intrinsics.rs
@@ -435,7 +435,10 @@ extern "rust-intrinsic" {
pub fn volatile_load<T>(src: *const T) -> T;
/// Perform a volatile store to the `dst` pointer.
pub fn volatile_store<T>(dst: *mut T, val: T);
+}
+#[cfg(not(disable_float))]
+extern "rust-intrinsic" {
/// Returns the square root of an `f32`
pub fn sqrtf32(x: f32) -> f32;
/// Returns the square root of an `f64`
@@ -552,8 +555,9 @@ extern "rust-intrinsic" {
/// Float remainder that allows optimizations based on algebraic rules.
/// May assume inputs are finite.
pub fn frem_fast<T>(a: T, b: T) -> T;
+}
-
+extern "rust-intrinsic" {
/// Returns the number of bits set in an integer type `T`
pub fn ctpop<T>(x: T) -> T;
diff --git a/libcore/lib.rs b/libcore/lib.rs
index f2a297b..7ae6b30 100644
--- a/libcore/lib.rs
+++ b/libcore/lib.rs
@@ -110,7 +110,9 @@ mod uint_macros;
#[path = "num/u32.rs"] pub mod u32;
#[path = "num/u64.rs"] pub mod u64;
+#[cfg(not(disable_float))]
#[path = "num/f32.rs"] pub mod f32;
+#[cfg(not(disable_float))]
#[path = "num/f64.rs"] pub mod f64;
#[macro_use]
diff --git a/libcore/num/flt2dec/decoder.rs b/libcore/num/flt2dec/decoder.rs
index 6265691..0a28a14 100644
--- a/libcore/num/flt2dec/decoder.rs
+++ b/libcore/num/flt2dec/decoder.rs
@@ -12,6 +12,7 @@
use prelude::v1::*;
+#[cfg(not(disable_float))]
use {f32, f64};
use num::{Float, FpCategory};
@@ -57,10 +58,12 @@ pub trait DecodableFloat: Float + Copy {
fn min_pos_norm_value() -> Self;
}
+#[cfg(not(disable_float))]
impl DecodableFloat for f32 {
fn min_pos_norm_value() -> Self { f32::MIN_POSITIVE }
}
+#[cfg(not(disable_float))]
impl DecodableFloat for f64 {
fn min_pos_norm_value() -> Self { f64::MIN_POSITIVE }
}
diff --git a/libcore/num/mod.rs b/libcore/num/mod.rs
index 883e920..445e346 100644
--- a/libcore/num/mod.rs
+++ b/libcore/num/mod.rs
@@ -69,7 +69,9 @@ impl<T: fmt::Display> fmt::Display for Wrapping<T> {
mod wrapping;
// All these modules are technically private and only exposed for libcoretest:
+#[cfg(not(disable_float))]
pub mod flt2dec;
+#[cfg(not(disable_float))]
pub mod dec2flt;
pub mod bignum;
pub mod diy_float;
@@ -136,6 +138,7 @@ macro_rules! zero_one_impl_float {
}
)*)
}
+#[cfg(not(disable_float))]
zero_one_impl_float! { f32 f64 }
macro_rules! checked_op {
@@ -2271,6 +2274,7 @@ pub enum FpCategory {
#[unstable(feature = "core_float",
reason = "stable interface is via `impl f{32,64}` in later crates",
issue = "32110")]
+#[cfg(not(disable_float))]
pub trait Float: Sized {
/// Returns the NaN value.
#[unstable(feature = "float_extras", reason = "needs removal",
@@ -2602,6 +2606,7 @@ impl fmt::Display for ParseIntError {
}
#[stable(feature = "rust1", since = "1.0.0")]
+#[cfg(not(disable_float))]
pub use num::dec2flt::ParseFloatError;
// Conversion traits for primitive integer and float types
@@ -2649,6 +2654,9 @@ impl_from! { u32, i64 }
// they fit in the significand, which is 24 bits in f32 and 53 bits in f64.
// Lossy float conversions are not implemented at this time.
+#[cfg(not(disable_float))]
+mod _int_flot_conv {
+use convert::From;
// Signed -> Float
impl_from! { i8, f32 }
impl_from! { i8, f64 }
@@ -2665,3 +2673,4 @@ impl_from! { u32, f64 }
// Float -> Float
impl_from! { f32, f64 }
+}
diff --git a/libcore/ops.rs b/libcore/ops.rs
index 50c4dc6..3f9d3ac 100644
--- a/libcore/ops.rs
+++ b/libcore/ops.rs
@@ -216,7 +216,9 @@ macro_rules! add_impl {
)*)
}
-add_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+add_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+add_impl! { f32 f64 }
/// The `Sub` trait is used to specify the functionality of `-`.
///
@@ -270,7 +272,9 @@ macro_rules! sub_impl {
)*)
}
-sub_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+sub_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+sub_impl! { f32 f64 }
/// The `Mul` trait is used to specify the functionality of `*`.
///
@@ -324,7 +328,9 @@ macro_rules! mul_impl {
)*)
}
-mul_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+mul_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+mul_impl! { f32 f64 }
/// The `Div` trait is used to specify the functionality of `/`.
///
@@ -395,6 +401,7 @@ macro_rules! div_impl_float {
)*)
}
+#[cfg(not(disable_float))]
div_impl_float! { f32 f64 }
/// The `Rem` trait is used to specify the functionality of `%`.
@@ -466,6 +473,7 @@ macro_rules! rem_impl_float {
)*)
}
+#[cfg(not(disable_float))]
rem_impl_float! { f32 f64 }
/// The `Neg` trait is used to specify the functionality of unary `-`.
@@ -534,7 +542,9 @@ macro_rules! neg_impl_unsigned {
}
// neg_impl_unsigned! { usize u8 u16 u32 u64 }
-neg_impl_numeric! { isize i8 i16 i32 i64 f32 f64 }
+neg_impl_numeric! { isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+neg_impl_numeric! { f32 f64 }
/// The `Not` trait is used to specify the functionality of unary `!`.
///
@@ -935,7 +945,9 @@ macro_rules! add_assign_impl {
)+)
}
-add_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+add_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+add_assign_impl! { f32 f64 }
/// The `SubAssign` trait is used to specify the functionality of `-=`.
///
@@ -980,7 +992,9 @@ macro_rules! sub_assign_impl {
)+)
}
-sub_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+sub_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+sub_assign_impl! { f32 f64 }
/// The `MulAssign` trait is used to specify the functionality of `*=`.
///
@@ -1025,7 +1039,9 @@ macro_rules! mul_assign_impl {
)+)
}
-mul_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+mul_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+mul_assign_impl! { f32 f64 }
/// The `DivAssign` trait is used to specify the functionality of `/=`.
///
@@ -1069,7 +1085,9 @@ macro_rules! div_assign_impl {
)+)
}
-div_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+div_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+div_assign_impl! { f32 f64 }
/// The `RemAssign` trait is used to specify the functionality of `%=`.
///
@@ -1113,7 +1131,9 @@ macro_rules! rem_assign_impl {
)+)
}
-rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 f32 f64 }
+rem_assign_impl! { usize u8 u16 u32 u64 isize i8 i16 i32 i64 }
+#[cfg(not(disable_float))]
+rem_assign_impl! { f32 f64 }
/// The `BitAndAssign` trait is used to specify the functionality of `&=`.
///