about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-11-21 17:00:43 +0100
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2023-11-21 17:00:43 +0100
commita5fcfad890b8b35aa5c4efeff0e5eae5ebc504c1 (patch)
tree8af833a6f06480ce814a34ff9e03ee870d1b26f5
parentcd7218aa9f4cdbfec0bc90ca86a9caa9cd271938 (diff)
downloadrust-a5fcfad890b8b35aa5c4efeff0e5eae5ebc504c1.tar.gz
rust-a5fcfad890b8b35aa5c4efeff0e5eae5ebc504c1.zip
Fix _mm_sad_epu8 implementation
Fixes rust-lang/rustc_codegen_cranelift#1426
-rw-r--r--src/intrinsics/llvm_x86.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/intrinsics/llvm_x86.rs b/src/intrinsics/llvm_x86.rs
index 8dd2b6ed014..78a0a347cfc 100644
--- a/src/intrinsics/llvm_x86.rs
+++ b/src/intrinsics/llvm_x86.rs
@@ -364,9 +364,11 @@ pub(crate) fn codegen_x86_llvm_intrinsic_call<'tcx>(
             for out_lane_idx in 0..lane_count / 8 {
                 let mut lane_diff_acc = fx.bcx.ins().iconst(types::I64, 0);
 
-                for lane_idx in out_lane_idx * 8..out_lane_idx * 8 + 1 {
+                for lane_idx in out_lane_idx * 8..out_lane_idx * 8 + 8 {
                     let a_lane = a.value_lane(fx, lane_idx).load_scalar(fx);
+                    let a_lane = fx.bcx.ins().uextend(types::I16, a_lane);
                     let b_lane = b.value_lane(fx, lane_idx).load_scalar(fx);
+                    let b_lane = fx.bcx.ins().uextend(types::I16, b_lane);
 
                     let lane_diff = fx.bcx.ins().isub(a_lane, b_lane);
                     let abs_lane_diff = fx.bcx.ins().iabs(lane_diff);