@@ -493,11 +493,21 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
493
493
sym:: minnumf64 => self . float_min_intrinsic :: < Double > ( args, dest) ?,
494
494
sym:: minnumf128 => self . float_min_intrinsic :: < Quad > ( args, dest) ?,
495
495
496
+ sym:: minimumf16 => self . float_minimum_intrinsic :: < Half > ( args, dest) ?,
497
+ sym:: minimumf32 => self . float_minimum_intrinsic :: < Single > ( args, dest) ?,
498
+ sym:: minimumf64 => self . float_minimum_intrinsic :: < Double > ( args, dest) ?,
499
+ sym:: minimumf128 => self . float_minimum_intrinsic :: < Quad > ( args, dest) ?,
500
+
496
501
sym:: maxnumf16 => self . float_max_intrinsic :: < Half > ( args, dest) ?,
497
502
sym:: maxnumf32 => self . float_max_intrinsic :: < Single > ( args, dest) ?,
498
503
sym:: maxnumf64 => self . float_max_intrinsic :: < Double > ( args, dest) ?,
499
504
sym:: maxnumf128 => self . float_max_intrinsic :: < Quad > ( args, dest) ?,
500
505
506
+ sym:: maximumf16 => self . float_maximum_intrinsic :: < Half > ( args, dest) ?,
507
+ sym:: maximumf32 => self . float_maximum_intrinsic :: < Single > ( args, dest) ?,
508
+ sym:: maximumf64 => self . float_maximum_intrinsic :: < Double > ( args, dest) ?,
509
+ sym:: maximumf128 => self . float_maximum_intrinsic :: < Quad > ( args, dest) ?,
510
+
501
511
sym:: copysignf16 => self . float_copysign_intrinsic :: < Half > ( args, dest) ?,
502
512
sym:: copysignf32 => self . float_copysign_intrinsic :: < Single > ( args, dest) ?,
503
513
sym:: copysignf64 => self . float_copysign_intrinsic :: < Double > ( args, dest) ?,
@@ -830,6 +840,38 @@ impl<'tcx, M: Machine<'tcx>> InterpCx<'tcx, M> {
830
840
interp_ok ( ( ) )
831
841
}
832
842
843
+ fn float_minimum_intrinsic < F > (
844
+ & mut self ,
845
+ args : & [ OpTy < ' tcx , M :: Provenance > ] ,
846
+ dest : & MPlaceTy < ' tcx , M :: Provenance > ,
847
+ ) -> InterpResult < ' tcx , ( ) >
848
+ where
849
+ F : rustc_apfloat:: Float + rustc_apfloat:: FloatConvert < F > + Into < Scalar < M :: Provenance > > ,
850
+ {
851
+ let a: F = self . read_scalar ( & args[ 0 ] ) ?. to_float ( ) ?;
852
+ let b: F = self . read_scalar ( & args[ 1 ] ) ?. to_float ( ) ?;
853
+ let res = a. minimum ( b) ;
854
+ let res = self . adjust_nan ( res, & [ a, b] ) ;
855
+ self . write_scalar ( res, dest) ?;
856
+ interp_ok ( ( ) )
857
+ }
858
+
859
+ fn float_maximum_intrinsic < F > (
860
+ & mut self ,
861
+ args : & [ OpTy < ' tcx , M :: Provenance > ] ,
862
+ dest : & MPlaceTy < ' tcx , M :: Provenance > ,
863
+ ) -> InterpResult < ' tcx , ( ) >
864
+ where
865
+ F : rustc_apfloat:: Float + rustc_apfloat:: FloatConvert < F > + Into < Scalar < M :: Provenance > > ,
866
+ {
867
+ let a: F = self . read_scalar ( & args[ 0 ] ) ?. to_float ( ) ?;
868
+ let b: F = self . read_scalar ( & args[ 1 ] ) ?. to_float ( ) ?;
869
+ let res = a. maximum ( b) ;
870
+ let res = self . adjust_nan ( res, & [ a, b] ) ;
871
+ self . write_scalar ( res, dest) ?;
872
+ interp_ok ( ( ) )
873
+ }
874
+
833
875
fn float_copysign_intrinsic < F > (
834
876
& mut self ,
835
877
args : & [ OpTy < ' tcx , M :: Provenance > ] ,
0 commit comments