@@ -272,8 +272,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
272272 let a = this. read_scalar ( a) ?. to_f32 ( ) ?;
273273 let b = this. read_scalar ( b) ?. to_f32 ( ) ?;
274274 let c = this. read_scalar ( c) ?. to_f32 ( ) ?;
275- // FIXME: Using host floats, to work around https://github.com/rust-lang/rustc_apfloat/issues/11
276- let res = a. to_host ( ) . mul_add ( b. to_host ( ) , c. to_host ( ) ) . to_soft ( ) ;
275+ let res = a. mul_add ( b, c) . value ;
277276 let res = this. adjust_nan ( res, & [ a, b, c] ) ;
278277 this. write_scalar ( res, dest) ?;
279278 }
@@ -282,8 +281,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
282281 let a = this. read_scalar ( a) ?. to_f64 ( ) ?;
283282 let b = this. read_scalar ( b) ?. to_f64 ( ) ?;
284283 let c = this. read_scalar ( c) ?. to_f64 ( ) ?;
285- // FIXME: Using host floats, to work around https://github.com/rust-lang/rustc_apfloat/issues/11
286- let res = a. to_host ( ) . mul_add ( b. to_host ( ) , c. to_host ( ) ) . to_soft ( ) ;
284+ let res = a. mul_add ( b, c) . value ;
287285 let res = this. adjust_nan ( res, & [ a, b, c] ) ;
288286 this. write_scalar ( res, dest) ?;
289287 }
@@ -293,13 +291,8 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
293291 let a = this. read_scalar ( a) ?. to_f32 ( ) ?;
294292 let b = this. read_scalar ( b) ?. to_f32 ( ) ?;
295293 let c = this. read_scalar ( c) ?. to_f32 ( ) ?;
296- let fuse: bool = this. machine . rng . get_mut ( ) . random ( ) ;
297- let res = if fuse {
298- // FIXME: Using host floats, to work around https://github.com/rust-lang/rustc_apfloat/issues/11
299- a. to_host ( ) . mul_add ( b. to_host ( ) , c. to_host ( ) ) . to_soft ( )
300- } else {
301- ( ( a * b) . value + c) . value
302- } ;
294+ let fuse: bool = this. machine . float_nondet && this. machine . rng . get_mut ( ) . random ( ) ;
295+ let res = if fuse { a. mul_add ( b, c) . value } else { ( ( a * b) . value + c) . value } ;
303296 let res = this. adjust_nan ( res, & [ a, b, c] ) ;
304297 this. write_scalar ( res, dest) ?;
305298 }
@@ -308,13 +301,8 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
308301 let a = this. read_scalar ( a) ?. to_f64 ( ) ?;
309302 let b = this. read_scalar ( b) ?. to_f64 ( ) ?;
310303 let c = this. read_scalar ( c) ?. to_f64 ( ) ?;
311- let fuse: bool = this. machine . rng . get_mut ( ) . random ( ) ;
312- let res = if fuse {
313- // FIXME: Using host floats, to work around https://github.com/rust-lang/rustc_apfloat/issues/11
314- a. to_host ( ) . mul_add ( b. to_host ( ) , c. to_host ( ) ) . to_soft ( )
315- } else {
316- ( ( a * b) . value + c) . value
317- } ;
304+ let fuse: bool = this. machine . float_nondet && this. machine . rng . get_mut ( ) . random ( ) ;
305+ let res = if fuse { a. mul_add ( b, c) . value } else { ( ( a * b) . value + c) . value } ;
318306 let res = this. adjust_nan ( res, & [ a, b, c] ) ;
319307 this. write_scalar ( res, dest) ?;
320308 }
0 commit comments