@@ -74,12 +74,20 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
7474 ret.write_cvalue(fx, val);
7575 }
7676
77- "llvm.x86.avx2.gather.d.ps"
77+ "llvm.x86.avx2.gather.d.d"
78+ | "llvm.x86.avx2.gather.d.q"
79+ | "llvm.x86.avx2.gather.d.ps"
7880 | "llvm.x86.avx2.gather.d.pd"
81+ | "llvm.x86.avx2.gather.d.d.256"
82+ | "llvm.x86.avx2.gather.d.q.256"
7983 | "llvm.x86.avx2.gather.d.ps.256"
8084 | "llvm.x86.avx2.gather.d.pd.256"
85+ | "llvm.x86.avx2.gather.q.d"
86+ | "llvm.x86.avx2.gather.q.q"
8187 | "llvm.x86.avx2.gather.q.ps"
8288 | "llvm.x86.avx2.gather.q.pd"
89+ | "llvm.x86.avx2.gather.q.d.256"
90+ | "llvm.x86.avx2.gather.q.q.256"
8391 | "llvm.x86.avx2.gather.q.ps.256"
8492 | "llvm.x86.avx2.gather.q.pd.256" => {
8593 // https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_i64gather_pd&ig_expand=3818
@@ -94,10 +102,8 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
94102 let (index_lane_count, index_lane_ty) = index.layout().ty.simd_size_and_type(fx.tcx);
95103 let (mask_lane_count, mask_lane_ty) = mask.layout().ty.simd_size_and_type(fx.tcx);
96104 let (ret_lane_count, ret_lane_ty) = ret.layout().ty.simd_size_and_type(fx.tcx);
97- assert !(src_lane_ty.is_floating_point() );
105+ assert_eq !(src_lane_ty, ret_lane_ty );
98106 assert!(index_lane_ty.is_integral());
99- assert!(mask_lane_ty.is_floating_point());
100- assert!(ret_lane_ty.is_floating_point());
101107 assert_eq!(src_lane_count, mask_lane_count);
102108 assert_eq!(src_lane_count, ret_lane_count);
103109
@@ -122,8 +128,12 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
122128 let res_lane = fx.bcx.append_block_param(next, lane_clif_ty);
123129
124130 let mask_lane = match mask_lane_clif_ty {
125- types::F32 => fx.bcx.ins().band_imm(mask_lane, 0x8000_0000u64 as i64),
126- types::F64 => fx.bcx.ins().band_imm(mask_lane, 0x8000_0000_0000_0000u64 as i64),
131+ types::I32 | types::F32 => {
132+ fx.bcx.ins().band_imm(mask_lane, 0x8000_0000u64 as i64)
133+ }
134+ types::I64 | types::F64 => {
135+ fx.bcx.ins().band_imm(mask_lane, 0x8000_0000_0000_0000u64 as i64)
136+ }
127137 _ => unreachable!(),
128138 };
129139 fx.bcx.ins().brif(mask_lane, if_enabled, &[], if_disabled, &[]);
0 commit comments