Improve SSE2 slli/srli/srai tests

Includes cases where the shift amount is equal to the number of bits
This commit is contained in:
Eduardo Sánchez Muñoz 2023-09-13 19:03:47 +02:00 committed by Amanieu d'Antras
parent bb0d9a41e1
commit 26425131b6

View file

@ -3343,18 +3343,14 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_slli_epi16() {
#[rustfmt::skip]
let a = _mm_setr_epi16(
0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0,
);
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
let r = _mm_slli_epi16::<4>(a);
#[rustfmt::skip]
let e = _mm_setr_epi16(
0xFFF0 as u16 as i16, 0xFFF0 as u16 as i16, 0x0FF0, 0x00F0,
0, 0, 0, 0,
assert_eq_m128i(
r,
_mm_setr_epi16(0xCC0, -0xCC0, 0xDD0, -0xDD0, 0xEE0, -0xEE0, 0xFF0, -0xFF0),
);
assert_eq_m128i(r, e);
let r = _mm_slli_epi16::<16>(a);
assert_eq_m128i(r, _mm_set1_epi16(0));
}
#[simd_test(enable = "sse2")]
@ -3375,8 +3371,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_slli_epi32() {
let r = _mm_slli_epi32::<4>(_mm_set1_epi32(0xFFFF));
assert_eq_m128i(r, _mm_set1_epi32(0xFFFF0));
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
let r = _mm_slli_epi32::<4>(a);
assert_eq_m128i(r, _mm_setr_epi32(0xEEEE0, -0xEEEE0, 0xFFFF0, -0xFFFF0));
let r = _mm_slli_epi32::<32>(a);
assert_eq_m128i(r, _mm_set1_epi32(0));
}
#[simd_test(enable = "sse2")]
@ -3394,8 +3393,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_slli_epi64() {
let r = _mm_slli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF));
assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFFF0));
let a = _mm_set_epi64x(0xFFFFFFFF, -0xFFFFFFFF);
let r = _mm_slli_epi64::<4>(a);
assert_eq_m128i(r, _mm_set_epi64x(0xFFFFFFFF0, -0xFFFFFFFF0));
let r = _mm_slli_epi64::<64>(a);
assert_eq_m128i(r, _mm_set1_epi64x(0));
}
#[simd_test(enable = "sse2")]
@ -3413,8 +3415,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_srai_epi16() {
let r = _mm_srai_epi16::<1>(_mm_set1_epi16(-1));
assert_eq_m128i(r, _mm_set1_epi16(-1));
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
let r = _mm_srai_epi16::<4>(a);
assert_eq_m128i(r, _mm_setr_epi16(0xC, -0xD, 0xD, -0xE, 0xE, -0xF, 0xF, -0x10));
let r = _mm_srai_epi16::<16>(a);
assert_eq_m128i(r, _mm_setr_epi16(0, -1, 0, -1, 0, -1, 0, -1));
}
#[simd_test(enable = "sse2")]
@ -3432,8 +3437,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_srai_epi32() {
let r = _mm_srai_epi32::<1>(_mm_set1_epi32(-1));
assert_eq_m128i(r, _mm_set1_epi32(-1));
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
let r = _mm_srai_epi32::<4>(a);
assert_eq_m128i(r, _mm_setr_epi32(0xEEE, -0xEEF, 0xFFF, -0x1000));
let r = _mm_srai_epi32::<32>(a);
assert_eq_m128i(r, _mm_setr_epi32(0, -1, 0, -1));
}
#[simd_test(enable = "sse2")]
@ -3480,16 +3488,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_srli_epi16() {
#[rustfmt::skip]
let a = _mm_setr_epi16(
0xFFFF as u16 as i16, 0x0FFF, 0x00FF, 0x000F, 0, 0, 0, 0,
);
let a = _mm_setr_epi16(0xCC, -0xCC, 0xDD, -0xDD, 0xEE, -0xEE, 0xFF, -0xFF);
let r = _mm_srli_epi16::<4>(a);
#[rustfmt::skip]
let e = _mm_setr_epi16(
0xFFF as u16 as i16, 0xFF as u16 as i16, 0xF, 0, 0, 0, 0, 0,
);
assert_eq_m128i(r, e);
assert_eq_m128i(r, _mm_setr_epi16(0xC, 0xFF3, 0xD, 0xFF2, 0xE, 0xFF1, 0xF, 0xFF0));
let r = _mm_srli_epi16::<16>(a);
assert_eq_m128i(r, _mm_set1_epi16(0));
}
#[simd_test(enable = "sse2")]
@ -3507,8 +3510,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_srli_epi32() {
let r = _mm_srli_epi32::<4>(_mm_set1_epi32(0xFFFF));
assert_eq_m128i(r, _mm_set1_epi32(0xFFF));
let a = _mm_setr_epi32(0xEEEE, -0xEEEE, 0xFFFF, -0xFFFF);
let r = _mm_srli_epi32::<4>(a);
assert_eq_m128i(r, _mm_setr_epi32(0xEEE, 0xFFFF111, 0xFFF, 0xFFFF000));
let r = _mm_srli_epi32::<32>(a);
assert_eq_m128i(r, _mm_set1_epi32(0));
}
#[simd_test(enable = "sse2")]
@ -3526,8 +3532,11 @@ mod tests {
#[simd_test(enable = "sse2")]
unsafe fn test_mm_srli_epi64() {
let r = _mm_srli_epi64::<4>(_mm_set1_epi64x(0xFFFFFFFF));
assert_eq_m128i(r, _mm_set1_epi64x(0xFFFFFFF));
let a = _mm_set_epi64x(0xFFFFFFFF, -0xFFFFFFFF);
let r = _mm_srli_epi64::<4>(a);
assert_eq_m128i(r, _mm_set_epi64x(0xFFFFFFF, 0xFFFFFFFF0000000));
let r = _mm_srli_epi64::<64>(a);
assert_eq_m128i(r, _mm_set1_epi64x(0));
}
#[simd_test(enable = "sse2")]