-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of #122470 - tgross35:f16-f128-step4-libs-min, r=Amanieu
`f16` and `f128` step 4: basic library support This is the next step after #121926, another portion of #114607 Tracking issue: #116909 This PR adds the most basic operations to `f16` and `f128` that get lowered as LLVM intrinsics. This is a very small step but it seemed reasonable enough to add unopinionated basic operations before the larger modules that are built on top of them. r? ```@Amanieu``` since you were pretty involved in the RFC cc ```@compiler-errors``` ```@rustbot``` label +T-libs-api +S-blocked +F-f16_and_f128
- Loading branch information
Showing
20 changed files
with
482 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,5 +11,7 @@ macro_rules! floating { | |
}; | ||
} | ||
|
||
floating! { f16 } | ||
floating! { f32 } | ||
floating! { f64 } | ||
floating! { f128 } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//! Constants for the `f128` quadruple-precision floating point type. | ||
//! | ||
//! *[See also the `f128` primitive type][f128].* | ||
//! | ||
//! Mathematically significant numbers are provided in the `consts` sub-module. | ||
//! | ||
//! For the constants defined directly in this module | ||
//! (as distinct from those defined in the `consts` sub-module), | ||
//! new code should instead use the associated constants | ||
//! defined directly on the `f128` type. | ||
#![unstable(feature = "f128", issue = "116909")] | ||
|
||
/// Basic mathematical constants. | ||
#[unstable(feature = "f128", issue = "116909")] | ||
pub mod consts {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//! Constants for the `f16` half-precision floating point type. | ||
//! | ||
//! *[See also the `f16` primitive type][f16].* | ||
//! | ||
//! Mathematically significant numbers are provided in the `consts` sub-module. | ||
//! | ||
//! For the constants defined directly in this module | ||
//! (as distinct from those defined in the `consts` sub-module), | ||
//! new code should instead use the associated constants | ||
//! defined directly on the `f16` type. | ||
#![unstable(feature = "f16", issue = "116909")] | ||
|
||
/// Basic mathematical constants. | ||
#[unstable(feature = "f16", issue = "116909")] | ||
pub mod consts {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
//! Constants for the `f128` double-precision floating point type. | ||
//! | ||
//! *[See also the `f128` primitive type](primitive@f128).* | ||
//! | ||
//! Mathematically significant numbers are provided in the `consts` sub-module. | ||
#[cfg(test)] | ||
mod tests; | ||
|
||
#[unstable(feature = "f128", issue = "116909")] | ||
pub use core::f128::consts; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#![allow(dead_code)] // FIXME(f16_f128): remove once constants are used | ||
|
||
/// Smallest number | ||
const TINY_BITS: u128 = 0x1; | ||
/// Next smallest number | ||
const TINY_UP_BITS: u128 = 0x2; | ||
/// Exponent = 0b11...10, Sifnificand 0b1111..10. Min val > 0 | ||
const MAX_DOWN_BITS: u128 = 0x7ffeffffffffffffffffffffffffffff; | ||
/// Zeroed exponent, full significant | ||
const LARGEST_SUBNORMAL_BITS: u128 = 0x0000ffffffffffffffffffffffffffff; | ||
/// Exponent = 0b1, zeroed significand | ||
const SMALLEST_NORMAL_BITS: u128 = 0x00010000000000000000000000000000; | ||
/// First pattern over the mantissa | ||
const NAN_MASK1: u128 = 0x0000aaaaaaaaaaaaaaaaaaaaaaaaaaaa; | ||
/// Second pattern over the mantissa | ||
const NAN_MASK2: u128 = 0x00005555555555555555555555555555; | ||
|
||
/// Compare by value | ||
#[allow(unused_macros)] | ||
macro_rules! assert_f128_eq { | ||
($a:expr, $b:expr) => { | ||
let (l, r): (&f128, &f128) = (&$a, &$b); | ||
assert_eq!(*l, *r, "\na: {:#0130x}\nb: {:#0130x}", l.to_bits(), r.to_bits()) | ||
}; | ||
} | ||
|
||
/// Compare by representation | ||
#[allow(unused_macros)] | ||
macro_rules! assert_f128_biteq { | ||
($a:expr, $b:expr) => { | ||
let (l, r): (&f128, &f128) = (&$a, &$b); | ||
let lb = l.to_bits(); | ||
let rb = r.to_bits(); | ||
assert_eq!( | ||
lb, rb, | ||
"float {:?} is not bitequal to {:?}.\na: {:#0130x}\nb: {:#0130x}", | ||
*l, *r, lb, rb | ||
); | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
//! Constants for the `f16` double-precision floating point type. | ||
//! | ||
//! *[See also the `f16` primitive type](primitive@f16).* | ||
//! | ||
//! Mathematically significant numbers are provided in the `consts` sub-module. | ||
#[cfg(test)] | ||
mod tests; | ||
|
||
#[unstable(feature = "f16", issue = "116909")] | ||
pub use core::f16::consts; |
Oops, something went wrong.