Avx512 (#887)
This commit is contained in:
parent
da3ba684ce
commit
3bbfade4c9
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
|
|
@ -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.));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue