@@ -2739,110 +2739,112 @@ pub unsafe fn truncf128(_x: f128) -> f128 {
27392739 unreachable ! ( )
27402740}
27412741
2742- /// Returns the nearest integer to an `f16`. Changing the rounding mode is not possible in Rust,
2743- /// so this rounds half-way cases to the number with an even least significant digit.
2744- ///
2745- /// May raise an inexact floating-point exception if the argument is not an integer.
2746- /// However, Rust assumes floating-point exceptions cannot be observed, so these exceptions
2747- /// cannot actually be utilized from Rust code.
2748- /// In other words, this intrinsic is equivalent in behavior to `nearbyintf16` and `roundevenf16`.
2742+ /// Returns an `f16` to the nearest integer. Rounds half-way cases to the number with an even
2743+ /// least significant digit.
27492744///
27502745/// The stabilized version of this intrinsic is
27512746/// [`f16::round_ties_even`](../../std/primitive.f16.html#method.round_ties_even)
27522747#[ rustc_intrinsic]
27532748#[ rustc_intrinsic_must_be_overridden]
27542749#[ rustc_nounwind]
2755- pub unsafe fn rintf16 ( _x : f16 ) -> f16 {
2750+ #[ cfg( not( bootstrap) ) ]
2751+ pub unsafe fn round_ties_even_f16 ( _x : f16 ) -> f16 {
27562752 unreachable ! ( )
27572753}
2758- /// Returns the nearest integer to an `f32`. Changing the rounding mode is not possible in Rust,
2759- /// so this rounds half-way cases to the number with an even least significant digit.
2760- ///
2761- /// May raise an inexact floating-point exception if the argument is not an integer.
2762- /// However, Rust assumes floating-point exceptions cannot be observed, so these exceptions
2763- /// cannot actually be utilized from Rust code.
2764- /// In other words, this intrinsic is equivalent in behavior to `nearbyintf32` and `roundevenf32`.
2754+
2755+ /// To be removed on next bootstrap bump.
2756+ #[ cfg( bootstrap) ]
2757+ pub unsafe fn round_ties_even_f16 ( x : f16 ) -> f16 {
2758+ #[ rustc_intrinsic]
2759+ #[ rustc_intrinsic_must_be_overridden]
2760+ #[ rustc_nounwind]
2761+ unsafe fn rintf16 ( _x : f16 ) -> f16 {
2762+ unreachable ! ( )
2763+ }
2764+
2765+ // SAFETY: this intrinsic isn't actually unsafe
2766+ unsafe { rintf16 ( x) }
2767+ }
2768+
2769+ /// Returns an `f32` to the nearest integer. Rounds half-way cases to the number with an even
2770+ /// least significant digit.
27652771///
27662772/// The stabilized version of this intrinsic is
27672773/// [`f32::round_ties_even`](../../std/primitive.f32.html#method.round_ties_even)
27682774#[ rustc_intrinsic]
27692775#[ rustc_intrinsic_must_be_overridden]
27702776#[ rustc_nounwind]
2771- pub unsafe fn rintf32 ( _x : f32 ) -> f32 {
2777+ #[ cfg( not( bootstrap) ) ]
2778+ pub unsafe fn round_ties_even_f32 ( _x : f32 ) -> f32 {
27722779 unreachable ! ( )
27732780}
2774- /// Returns the nearest integer to an `f64`. Changing the rounding mode is not possible in Rust,
2775- /// so this rounds half-way cases to the number with an even least significant digit.
2776- ///
2777- /// May raise an inexact floating-point exception if the argument is not an integer.
2778- /// However, Rust assumes floating-point exceptions cannot be observed, so these exceptions
2779- /// cannot actually be utilized from Rust code.
2780- /// In other words, this intrinsic is equivalent in behavior to `nearbyintf64` and `roundevenf64`.
2781+
2782+ /// To be removed on next bootstrap bump.
2783+ #[ cfg( bootstrap) ]
2784+ pub unsafe fn round_ties_even_f32 ( x : f32 ) -> f32 {
2785+ #[ rustc_intrinsic]
2786+ #[ rustc_intrinsic_must_be_overridden]
2787+ #[ rustc_nounwind]
2788+ unsafe fn rintf32 ( _x : f32 ) -> f32 {
2789+ unreachable ! ( )
2790+ }
2791+
2792+ // SAFETY: this intrinsic isn't actually unsafe
2793+ unsafe { rintf32 ( x) }
2794+ }
2795+
2796+ /// Returns an `f64` to the nearest integer. Rounds half-way cases to the number with an even
2797+ /// least significant digit.
27812798///
27822799/// The stabilized version of this intrinsic is
27832800/// [`f64::round_ties_even`](../../std/primitive.f64.html#method.round_ties_even)
27842801#[ rustc_intrinsic]
27852802#[ rustc_intrinsic_must_be_overridden]
27862803#[ rustc_nounwind]
2787- pub unsafe fn rintf64 ( _x : f64 ) -> f64 {
2804+ #[ cfg( not( bootstrap) ) ]
2805+ pub unsafe fn round_ties_even_f64 ( _x : f64 ) -> f64 {
27882806 unreachable ! ( )
27892807}
2790- /// Returns the nearest integer to an `f128`. Changing the rounding mode is not possible in Rust,
2791- /// so this rounds half-way cases to the number with an even least significant digit.
2792- ///
2793- /// May raise an inexact floating-point exception if the argument is not an integer.
2794- /// However, Rust assumes floating-point exceptions cannot be observed, so these exceptions
2795- /// cannot actually be utilized from Rust code.
2796- /// In other words, this intrinsic is equivalent in behavior to `nearbyintf128` and `roundevenf128`.
2808+
2809+ /// To be removed on next bootstrap bump.
2810+ #[ cfg( bootstrap) ]
2811+ pub unsafe fn round_ties_even_f64 ( x : f64 ) -> f64 {
2812+ #[ rustc_intrinsic]
2813+ #[ rustc_intrinsic_must_be_overridden]
2814+ #[ rustc_nounwind]
2815+ unsafe fn rintf64 ( _x : f64 ) -> f64 {
2816+ unreachable ! ( )
2817+ }
2818+
2819+ // SAFETY: this intrinsic isn't actually unsafe
2820+ unsafe { rintf64 ( x) }
2821+ }
2822+
2823+ /// Returns an `f128` to the nearest integer. Rounds half-way cases to the number with an even
2824+ /// least significant digit.
27972825///
27982826/// The stabilized version of this intrinsic is
27992827/// [`f128::round_ties_even`](../../std/primitive.f128.html#method.round_ties_even)
28002828#[ rustc_intrinsic]
28012829#[ rustc_intrinsic_must_be_overridden]
28022830#[ rustc_nounwind]
2803- pub unsafe fn rintf128 ( _x : f128 ) -> f128 {
2831+ #[ cfg( not( bootstrap) ) ]
2832+ pub unsafe fn round_ties_even_f128 ( _x : f128 ) -> f128 {
28042833 unreachable ! ( )
28052834}
28062835
2807- /// Returns the nearest integer to an `f16`. Changing the rounding mode is not possible in Rust,
2808- /// so this rounds half-way cases to the number with an even least significant digit.
2809- ///
2810- /// This intrinsic does not have a stable counterpart.
2811- #[ rustc_intrinsic]
2812- #[ rustc_intrinsic_must_be_overridden]
2813- #[ rustc_nounwind]
2814- pub unsafe fn nearbyintf16 ( _x : f16 ) -> f16 {
2815- unreachable ! ( )
2816- }
2817- /// Returns the nearest integer to an `f32`. Changing the rounding mode is not possible in Rust,
2818- /// so this rounds half-way cases to the number with an even least significant digit.
2819- ///
2820- /// This intrinsic does not have a stable counterpart.
2821- #[ rustc_intrinsic]
2822- #[ rustc_intrinsic_must_be_overridden]
2823- #[ rustc_nounwind]
2824- pub unsafe fn nearbyintf32 ( _x : f32 ) -> f32 {
2825- unreachable ! ( )
2826- }
2827- /// Returns the nearest integer to an `f64`. Changing the rounding mode is not possible in Rust,
2828- /// so this rounds half-way cases to the number with an even least significant digit.
2829- ///
2830- /// This intrinsic does not have a stable counterpart.
2831- #[ rustc_intrinsic]
2832- #[ rustc_intrinsic_must_be_overridden]
2833- #[ rustc_nounwind]
2834- pub unsafe fn nearbyintf64 ( _x : f64 ) -> f64 {
2835- unreachable ! ( )
2836- }
2837- /// Returns the nearest integer to an `f128`. Changing the rounding mode is not possible in Rust,
2838- /// so this rounds half-way cases to the number with an even least significant digit.
2839- ///
2840- /// This intrinsic does not have a stable counterpart.
2841- #[ rustc_intrinsic]
2842- #[ rustc_intrinsic_must_be_overridden]
2843- #[ rustc_nounwind]
2844- pub unsafe fn nearbyintf128 ( _x : f128 ) -> f128 {
2845- unreachable ! ( )
2836+ /// To be removed on next bootstrap bump.
2837+ #[ cfg( bootstrap) ]
2838+ pub unsafe fn round_ties_even_f128 ( x : f128 ) -> f128 {
2839+ #[ rustc_intrinsic]
2840+ #[ rustc_intrinsic_must_be_overridden]
2841+ #[ rustc_nounwind]
2842+ unsafe fn rintf128 ( _x : f128 ) -> f128 {
2843+ unreachable ! ( )
2844+ }
2845+
2846+ // SAFETY: this intrinsic isn't actually unsafe
2847+ unsafe { rintf128 ( x) }
28462848}
28472849
28482850/// Returns the nearest integer to an `f16`. Rounds half-way cases away from zero.
@@ -2886,47 +2888,6 @@ pub unsafe fn roundf128(_x: f128) -> f128 {
28862888 unreachable ! ( )
28872889}
28882890
2889- /// Returns the nearest integer to an `f16`. Rounds half-way cases to the number
2890- /// with an even least significant digit.
2891- ///
2892- /// This intrinsic does not have a stable counterpart.
2893- #[ rustc_intrinsic]
2894- #[ rustc_intrinsic_must_be_overridden]
2895- #[ rustc_nounwind]
2896- pub unsafe fn roundevenf16 ( _x : f16 ) -> f16 {
2897- unreachable ! ( )
2898- }
2899- /// Returns the nearest integer to an `f32`. Rounds half-way cases to the number
2900- /// with an even least significant digit.
2901- ///
2902- /// This intrinsic does not have a stable counterpart.
2903- #[ rustc_intrinsic]
2904- #[ rustc_intrinsic_must_be_overridden]
2905- #[ rustc_nounwind]
2906- pub unsafe fn roundevenf32 ( _x : f32 ) -> f32 {
2907- unreachable ! ( )
2908- }
2909- /// Returns the nearest integer to an `f64`. Rounds half-way cases to the number
2910- /// with an even least significant digit.
2911- ///
2912- /// This intrinsic does not have a stable counterpart.
2913- #[ rustc_intrinsic]
2914- #[ rustc_intrinsic_must_be_overridden]
2915- #[ rustc_nounwind]
2916- pub unsafe fn roundevenf64 ( _x : f64 ) -> f64 {
2917- unreachable ! ( )
2918- }
2919- /// Returns the nearest integer to an `f128`. Rounds half-way cases to the number
2920- /// with an even least significant digit.
2921- ///
2922- /// This intrinsic does not have a stable counterpart.
2923- #[ rustc_intrinsic]
2924- #[ rustc_intrinsic_must_be_overridden]
2925- #[ rustc_nounwind]
2926- pub unsafe fn roundevenf128 ( _x : f128 ) -> f128 {
2927- unreachable ! ( )
2928- }
2929-
29302891/// Float addition that allows optimizations based on algebraic rules.
29312892/// May assume inputs are finite.
29322893///
0 commit comments