@@ -556,12 +556,12 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
556
556
let ret_lane_layout = fx. layout_of ( fx. tcx . types . i32 ) ;
557
557
for out_lane_idx in 0 ..lane_count / 2 {
558
558
let a_lane0 = a. value_lane ( fx, out_lane_idx * 2 ) . load_scalar ( fx) ;
559
- let a_lane0 = fx. bcx . ins ( ) . uextend ( types:: I32 , a_lane0) ;
559
+ let a_lane0 = fx. bcx . ins ( ) . sextend ( types:: I32 , a_lane0) ;
560
560
let b_lane0 = b. value_lane ( fx, out_lane_idx * 2 ) . load_scalar ( fx) ;
561
561
let b_lane0 = fx. bcx . ins ( ) . sextend ( types:: I32 , b_lane0) ;
562
562
563
563
let a_lane1 = a. value_lane ( fx, out_lane_idx * 2 + 1 ) . load_scalar ( fx) ;
564
- let a_lane1 = fx. bcx . ins ( ) . uextend ( types:: I32 , a_lane1) ;
564
+ let a_lane1 = fx. bcx . ins ( ) . sextend ( types:: I32 , a_lane1) ;
565
565
let b_lane1 = b. value_lane ( fx, out_lane_idx * 2 + 1 ) . load_scalar ( fx) ;
566
566
let b_lane1 = fx. bcx . ins ( ) . sextend ( types:: I32 , b_lane1) ;
567
567
@@ -716,14 +716,14 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
716
716
assert_eq ! ( ret_lane_ty, fx. tcx. types. i16 ) ;
717
717
assert_eq ! ( lane_count * 2 , ret_lane_count) ;
718
718
719
- let min_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i64 :: from ( i16:: MIN as u16 ) ) ;
720
- let max_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i64 :: from ( i16:: MAX as u16 ) ) ;
719
+ let min_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i32 :: from ( i16:: MIN ) as u32 as i64 ) ;
720
+ let max_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i32 :: from ( i16:: MAX ) as u32 as i64 ) ;
721
721
let ret_lane_layout = fx. layout_of ( fx. tcx . types . i16 ) ;
722
722
723
723
for idx in 0 ..lane_count {
724
724
let lane = a. value_lane ( fx, idx) . load_scalar ( fx) ;
725
725
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
726
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
726
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
727
727
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
728
728
729
729
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -733,7 +733,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
733
733
for idx in 0 ..lane_count {
734
734
let lane = b. value_lane ( fx, idx) . load_scalar ( fx) ;
735
735
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
736
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
736
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
737
737
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
738
738
739
739
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -760,8 +760,8 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
760
760
761
761
for idx in 0 ..lane_count {
762
762
let lane = a. value_lane ( fx, idx) . load_scalar ( fx) ;
763
- let sat = fx. bcx . ins ( ) . umax ( lane, min_u16) ;
764
- let sat = fx. bcx . ins ( ) . umin ( sat, max_u16) ;
763
+ let sat = fx. bcx . ins ( ) . smax ( lane, min_u16) ;
764
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_u16) ;
765
765
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
766
766
767
767
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -770,8 +770,8 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
770
770
771
771
for idx in 0 ..lane_count {
772
772
let lane = b. value_lane ( fx, idx) . load_scalar ( fx) ;
773
- let sat = fx. bcx . ins ( ) . umax ( lane, min_u16) ;
774
- let sat = fx. bcx . ins ( ) . umin ( sat, max_u16) ;
773
+ let sat = fx. bcx . ins ( ) . smax ( lane, min_u16) ;
774
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_u16) ;
775
775
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
776
776
777
777
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -792,14 +792,14 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
792
792
assert_eq ! ( ret_lane_ty, fx. tcx. types. i16 ) ;
793
793
assert_eq ! ( lane_count * 2 , ret_lane_count) ;
794
794
795
- let min_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i64 :: from ( i16:: MIN as u16 ) ) ;
796
- let max_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i64 :: from ( i16:: MAX as u16 ) ) ;
795
+ let min_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i32 :: from ( i16:: MIN ) as u32 as i64 ) ;
796
+ let max_i16 = fx. bcx . ins ( ) . iconst ( types:: I32 , i32 :: from ( i16:: MAX ) as u32 as i64 ) ;
797
797
let ret_lane_layout = fx. layout_of ( fx. tcx . types . i16 ) ;
798
798
799
799
for idx in 0 ..lane_count / 2 {
800
800
let lane = a. value_lane ( fx, idx) . load_scalar ( fx) ;
801
801
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
802
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
802
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
803
803
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
804
804
805
805
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -809,7 +809,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
809
809
for idx in 0 ..lane_count / 2 {
810
810
let lane = b. value_lane ( fx, idx) . load_scalar ( fx) ;
811
811
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
812
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
812
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
813
813
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
814
814
815
815
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -819,7 +819,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
819
819
for idx in 0 ..lane_count / 2 {
820
820
let lane = a. value_lane ( fx, idx) . load_scalar ( fx) ;
821
821
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
822
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
822
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
823
823
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
824
824
825
825
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
@@ -829,7 +829,7 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
829
829
for idx in 0 ..lane_count / 2 {
830
830
let lane = b. value_lane ( fx, idx) . load_scalar ( fx) ;
831
831
let sat = fx. bcx . ins ( ) . smax ( lane, min_i16) ;
832
- let sat = fx. bcx . ins ( ) . umin ( sat, max_i16) ;
832
+ let sat = fx. bcx . ins ( ) . smin ( sat, max_i16) ;
833
833
let res = fx. bcx . ins ( ) . ireduce ( types:: I16 , sat) ;
834
834
835
835
let res_lane = CValue :: by_val ( res, ret_lane_layout) ;
0 commit comments