Skip to content

Commit 1e79f68

Browse files
fix: update the mask preprocessing step in _mm_mask_cvtepi16_epi8
1 parent 8b51bf5 commit 1e79f68

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

crates/core_arch/src/x86/avx512bw.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10681,7 +10681,7 @@ pub fn _mm_cvtepi16_epi8(a: __m128i) -> __m128i {
1068110681
pub fn _mm_mask_cvtepi16_epi8(src: __m128i, k: __mmask8, a: __m128i) -> __m128i {
1068210682
unsafe {
1068310683
let convert = _mm_cvtepi16_epi8(a).as_i8x16();
10684-
let k: __mmask16 = 0b11111111_11111111 & k as __mmask16;
10684+
let k: __mmask16 = 0b11111111_00000000 | k as __mmask16;
1068510685
transmute(simd_select_bitmask(k, convert, src.as_i8x16()))
1068610686
}
1068710687
}
@@ -20559,6 +20559,12 @@ mod tests {
2055920559
let r = _mm_mask_cvtepi16_epi8(src, 0b11111111, a);
2056020560
let e = _mm_set_epi8(0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2);
2056120561
assert_eq_m128i(r, e);
20562+
20563+
let src = _mm_set_epi8(1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1);
20564+
let a = _mm_set1_epi16(3);
20565+
let r = _mm_mask_cvtepi16_epi8(src, 0b11011110, a);
20566+
let e = _mm_set_epi8(0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 1, 3, 3, 3, 3, 1);
20567+
assert_eq_m128i(r, e);
2056220568
}
2056320569

2056420570
#[simd_test(enable = "avx512bw,avx512vl")]

0 commit comments

Comments
 (0)