This commit is contained in:
minybot 2020-08-28 20:55:49 -04:00 committed by GitHub
parent da3ba684ce
commit 3bbfade4c9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 4118 additions and 15 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -59,32 +59,583 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_abs_epi64() {
#[rustfmt::skip]
let a = _mm512_setr_epi64(
0, 1, -1, i64::MAX,
i64::MIN, 100, -100, -32
);
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let r = _mm512_mask_abs_epi64(a, 0, a);
assert_eq_m512i(r, a);
let r = _mm512_mask_abs_epi64(a, 0b11111111, a);
let e = _mm512_setr_epi64(0, 1, 1, i64::MAX, i64::MAX.wrapping_add(1), 100, 100, 32);
let r = _mm512_mask_abs_epi64(a, 0b00001111, a);
let e = _mm512_setr_epi64(0, 1, 1, i64::MAX, i64::MIN, 100, -100, -32);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_abs_epi64() {
#[rustfmt::skip]
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let r = _mm512_maskz_abs_epi64(0, a);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_abs_epi64(0b00001111, a);
let e = _mm512_setr_epi64(0, 1, 1, i64::MAX, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_abs_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let r = _mm512_abs_pd(a);
let e = _mm512_setr_pd(0., 1., 1., f64::MAX, f64::MAX, 100., 100., 32.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_abs_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let r = _mm512_mask_abs_pd(a, 0, a);
assert_eq_m512d(r, a);
let r = _mm512_mask_abs_pd(a, 0b00001111, a);
let e = _mm512_setr_pd(0., 1., 1., f64::MAX, f64::MIN, 100., -100., -32.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_add_epi64() {
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let b = _mm512_set1_epi64(1);
let r = _mm512_add_epi64(a, b);
let e = _mm512_setr_epi64(1, 2, 0, i64::MIN, i64::MIN + 1, 101, -99, -31);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_add_epi64() {
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let b = _mm512_set1_epi64(1);
let r = _mm512_mask_add_epi64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_add_epi64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(1, 2, 0, i64::MIN, i64::MIN, 100, -100, -32);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_add_epi64() {
#[rustfmt::skip]
let a = _mm512_setr_epi64(
0, 1, -1, i64::MAX,
i64::MIN, 100, -100, -32
);
let r = _mm512_maskz_abs_epi64(0, a);
let b = _mm512_set1_epi64(1);
let r = _mm512_maskz_add_epi64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_abs_epi64(0b01111111, a);
let e = _mm512_setr_epi64(0, 1, 1, i64::MAX, i64::MAX.wrapping_add(1), 100, 100, 0);
let r = _mm512_maskz_add_epi64(0b00001111, a, b);
let e = _mm512_setr_epi64(1, 2, 0, i64::MIN, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_add_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_add_pd(a, b);
let e = _mm512_setr_pd(1., 2., 0., f64::MAX, f64::MIN + 1., 101., -99., -31.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_add_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_mask_add_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_add_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(1., 2., 0., f64::MAX, f64::MIN, 100., -100., -32.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_add_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_maskz_add_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_add_pd(0b00001111, a, b);
let e = _mm512_setr_pd(1., 2., 0., f64::MAX, 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_sub_epi64() {
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let b = _mm512_set1_epi64(1);
let r = _mm512_sub_epi64(a, b);
let e = _mm512_setr_epi64(-1, 0, -2, i64::MAX - 1, i64::MAX, 99, -101, -33);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_sub_epi64() {
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let b = _mm512_set1_epi64(1);
let r = _mm512_mask_sub_epi64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_sub_epi64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(-1, 0, -2, i64::MAX - 1, i64::MIN, 100, -100, -32);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_sub_epi64() {
let a = _mm512_setr_epi64(0, 1, -1, i64::MAX, i64::MIN, 100, -100, -32);
let b = _mm512_set1_epi64(1);
let r = _mm512_maskz_sub_epi64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_sub_epi64(0b00001111, a, b);
let e = _mm512_setr_epi64(-1, 0, -2, i64::MAX - 1, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_sub_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_sub_pd(a, b);
let e = _mm512_setr_pd(-1., 0., -2., f64::MAX - 1., f64::MIN, 99., -101., -33.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_sub_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_mask_sub_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_sub_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(-1., 0., -2., f64::MAX - 1., f64::MIN, 100., -100., -32.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_sub_pd() {
let a = _mm512_setr_pd(0., 1., -1., f64::MAX, f64::MIN, 100., -100., -32.);
let b = _mm512_set1_pd(1.);
let r = _mm512_maskz_sub_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_sub_pd(0b00001111, a, b);
let e = _mm512_setr_pd(-1., 0., -2., f64::MAX - 1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mul_epi32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_mul_epi32(a, b);
let e = _mm512_set_epi64(15, 13, 11, 9, 7, 5, 3, 1);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_mul_epi32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_mask_mul_epi32(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_mul_epi32(a, 0b00001111, a, b);
let e = _mm512_set_epi64(
1 | 1 << 32,
1 | 1 << 32,
1 | 1 << 32,
1 | 1 << 32,
7,
5,
3,
1,
);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_mul_epi32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_maskz_mul_epi32(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_mul_epi32(0b00001111, a, b);
let e = _mm512_set_epi64(0, 0, 0, 0, 7, 5, 3, 1);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mul_epu32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_mul_epu32(a, b);
let e = _mm512_set_epi64(15, 13, 11, 9, 7, 5, 3, 1);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_mul_epu32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_mask_mul_epu32(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_mul_epu32(a, 0b00001111, a, b);
let e = _mm512_set_epi64(
1 | 1 << 32,
1 | 1 << 32,
1 | 1 << 32,
1 | 1 << 32,
7,
5,
3,
1,
);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_mul_epu32() {
let a = _mm512_setr_epi32(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
let b = _mm512_setr_epi32(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
let r = _mm512_maskz_mul_epu32(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_mul_epu32(0b00001111, a, b);
let e = _mm512_set_epi64(0, 0, 0, 0, 7, 5, 3, 1);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mullox_epi64() {
let a = _mm512_setr_epi64(0, 1, i64::MAX, i64::MIN, i64::MAX, 100, -100, -32);
let b = _mm512_set1_epi64(2);
let r = _mm512_mullox_epi64(a, b);
let e = _mm512_setr_epi64(0, 2, -2, 0, -2, 200, -200, -64);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_mullox_epi64() {
let a = _mm512_setr_epi64(0, 1, i64::MAX, i64::MIN, i64::MAX, 100, -100, -32);
let b = _mm512_set1_epi64(2);
let r = _mm512_mask_mullox_epi64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_mullox_epi64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(0, 2, -2, 0, i64::MAX, 100, -100, -32);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mul_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_set1_pd(2.);
let r = _mm512_mul_pd(a, b);
let e = _mm512_setr_pd(
0.,
2.,
f64::INFINITY,
f64::NEG_INFINITY,
f64::INFINITY,
f64::NEG_INFINITY,
-200.,
-64.,
);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_mul_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_set1_pd(2.);
let r = _mm512_mask_mul_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_mul_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(
0.,
2.,
f64::INFINITY,
f64::NEG_INFINITY,
f64::MAX,
f64::MIN,
-100.,
-32.,
);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_mul_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_set1_pd(2.);
let r = _mm512_maskz_mul_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_mul_pd(0b00001111, a, b);
let e = _mm512_setr_pd(0., 2., f64::INFINITY, f64::NEG_INFINITY, 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_div_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_setr_pd(2., 2., 0., 0., 0., 0., 2., 2.);
let r = _mm512_div_pd(a, b);
let e = _mm512_setr_pd(
0.,
0.5,
f64::INFINITY,
f64::NEG_INFINITY,
f64::INFINITY,
f64::NEG_INFINITY,
-50.,
-16.,
);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_div_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_setr_pd(2., 2., 0., 0., 0., 0., 2., 2.);
let r = _mm512_mask_div_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_div_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(
0.,
0.5,
f64::INFINITY,
f64::NEG_INFINITY,
f64::MAX,
f64::MIN,
-100.,
-32.,
);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_div_pd() {
let a = _mm512_setr_pd(0., 1., f64::MAX, f64::MIN, f64::MAX, f64::MIN, -100., -32.);
let b = _mm512_setr_pd(2., 2., 0., 0., 0., 0., 2., 2.);
let r = _mm512_maskz_div_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_div_pd(0b00001111, a, b);
let e = _mm512_setr_pd(0., 0.5, f64::INFINITY, f64::NEG_INFINITY, 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_max_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_max_epi64(a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_max_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_mask_max_epi64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_max_epi64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_max_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_maskz_max_epi64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_max_epi64(0b00001111, a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_max_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_max_pd(a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_max_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_mask_max_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_max_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_max_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_maskz_max_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_max_pd(0b00001111, a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_max_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_max_epu64(a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_max_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_mask_max_epu64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_max_epu64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_max_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_maskz_max_epu64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_max_epu64(0b00001111, a, b);
let e = _mm512_setr_epi64(7, 6, 5, 4, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_min_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_min_epi64(a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 3, 2, 1, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_min_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_mask_min_epi64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_min_epi64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_min_epi64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_maskz_min_epi64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_min_epi64(0b00001111, a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_min_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_min_pd(a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 3., 2., 1., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_min_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_mask_min_pd(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_min_pd(a, 0b00001111, a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_min_pd() {
let a = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
let b = _mm512_setr_pd(7., 6., 5., 4., 3., 2., 1., 0.);
let r = _mm512_maskz_min_pd(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_min_pd(0b00001111, a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_min_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_min_epu64(a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 3, 2, 1, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_min_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_mask_min_epu64(a, 0, a, b);
assert_eq_m512i(r, a);
let r = _mm512_mask_min_epu64(a, 0b00001111, a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_min_epu64() {
let a = _mm512_setr_epi64(0, 1, 2, 3, 4, 5, 6, 7);
let b = _mm512_setr_epi64(7, 6, 5, 4, 3, 2, 1, 0);
let r = _mm512_maskz_min_epu64(0, a, b);
assert_eq_m512i(r, _mm512_setzero_si512());
let r = _mm512_maskz_min_epu64(0b00001111, a, b);
let e = _mm512_setr_epi64(0, 1, 2, 3, 0, 0, 0, 0);
assert_eq_m512i(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_sqrt_pd() {
let a = _mm512_setr_pd(0., 1., 4., 9., 16., 25., 36., 49.);
let r = _mm512_sqrt_pd(a);
let e = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_sqrt_pd() {
let a = _mm512_setr_pd(0., 1., 4., 9., 16., 25., 36., 49.);
let r = _mm512_mask_sqrt_pd(a, 0, a);
assert_eq_m512d(r, a);
let r = _mm512_mask_sqrt_pd(a, 0b00001111, a);
let e = _mm512_setr_pd(0., 1., 2., 3., 16., 25., 36., 49.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_sqrt_pd() {
let a = _mm512_setr_pd(0., 1., 4., 9., 16., 25., 36., 49.);
let r = _mm512_maskz_sqrt_pd(0, a);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_sqrt_pd(0b00001111, a);
let e = _mm512_setr_pd(0., 1., 2., 3., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_setzero_pd() {
assert_eq_m512d(_mm512_setzero_pd(), _mm512_set1_pd(0.));