Skip to content

Commit ee4927e

Browse files
committed
Fix _mm_movemask_epi8
The order of iteration was wrong
1 parent aae9a8b commit ee4927e

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

example/std_example.rs

+3
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ unsafe fn test_simd() {
6767
test_mm_slli_si128();
6868
test_mm_movemask_epi8();
6969
test_mm256_movemask_epi8();
70+
71+
let mask1 = _mm_movemask_epi8(dbg!(_mm_setr_epi8(255u8 as i8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)));
72+
assert_eq!(mask1, 1);
7073
}
7174

7275
#[target_feature(enable = "sse2")]

src/llvm_intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub fn codegen_llvm_intrinsic_call<'a, 'tcx: 'a>(
4141

4242
let mut res = fx.bcx.ins().iconst(types::I32, 0);
4343

44-
for lane in 0..lane_count {
44+
for lane in (0..lane_count).rev() {
4545
let a_lane = a.value_field(fx, mir::Field::new(lane.try_into().unwrap())).load_scalar(fx);
4646
let a_lane_sign = fx.bcx.ins().ushr_imm(a_lane, 7); // extract sign bit of 8bit int
4747
let a_lane_sign = fx.bcx.ins().uextend(types::I32, a_lane_sign);

0 commit comments

Comments
 (0)