some avx512 to const generics (#1039)

This commit is contained in:
minybot 2021-03-02 19:14:09 -05:00 committed by GitHub
parent 4edfa34423
commit 2d48c702be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 922 additions and 1422 deletions

File diff suppressed because it is too large Load diff

View file

@ -16,6 +16,22 @@ macro_rules! static_assert_rounding {
};
}
// Helper struct used to trigger const eval errors when the const generic immediate value `imm` is
// not a sae number.
pub(crate) struct ValidateConstSae<const IMM: i32>;
impl<const IMM: i32> ValidateConstSae<IMM> {
pub(crate) const VALID: () = {
let _ = 1 / ((IMM == 4 || IMM == 8) as usize);
};
}
#[allow(unused)]
macro_rules! static_assert_sae {
($imm:ident) => {
let _ = $crate::core_arch::x86::macros::ValidateConstSae::<$imm>::VALID;
};
}
macro_rules! constify_imm6 {
($imm8:expr, $expand:ident) => {
#[allow(overflowing_literals)]

View file

@ -5348,10 +5348,10 @@ mod tests {
unsafe fn test_mm512_sub_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.000000000000000007);
let b = _mm512_set1_pd(1.);
let r = _mm512_sub_round_pd(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_sub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_setr_pd(7., 8.5, 9., 10.5, 11., 12.5, 13., -1.0);
assert_eq_m512d(r, e);
let r = _mm512_sub_round_pd(a, b, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_sub_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_setr_pd(7., 8.5, 9., 10.5, 11., 12.5, 13., -0.9999999999999999);
assert_eq_m512d(r, e);
}
@ -5360,14 +5360,12 @@ mod tests {
unsafe fn test_mm512_mask_sub_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.000000000000000007);
let b = _mm512_set1_pd(1.);
let r = _mm512_mask_sub_round_pd(a, 0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_sub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, a, b,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_sub_round_pd(
a,
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_sub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b11110000, a, b,
);
let e = _mm512_setr_pd(8., 9.5, 10., 11.5, 11., 12.5, 13., -1.0);
assert_eq_m512d(r, e);
@ -5377,13 +5375,11 @@ mod tests {
unsafe fn test_mm512_maskz_sub_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.000000000000000007);
let b = _mm512_set1_pd(1.);
let r = _mm512_maskz_sub_round_pd(0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_maskz_sub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_sub_round_pd(
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_sub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b11110000, a, b,
);
let e = _mm512_setr_pd(0., 0., 0., 0., 11., 12.5, 13., -1.0);
assert_eq_m512d(r, e);
@ -5393,7 +5389,7 @@ mod tests {
unsafe fn test_mm512_mul_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.);
let b = _mm512_set1_pd(0.1);
let r = _mm512_mul_round_pd(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mul_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_setr_pd(
0.8,
0.9500000000000001,
@ -5405,7 +5401,7 @@ mod tests {
0.,
);
assert_eq_m512d(r, e);
let r = _mm512_mul_round_pd(a, b, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_mul_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_setr_pd(0.8, 0.95, 1.0, 1.15, 1.2, 1.3499999999999999, 1.4, 0.0);
assert_eq_m512d(r, e);
}
@ -5414,14 +5410,12 @@ mod tests {
unsafe fn test_mm512_mask_mul_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.);
let b = _mm512_set1_pd(0.1);
let r = _mm512_mask_mul_round_pd(a, 0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_mul_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, a, b,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_mul_round_pd(
a,
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_mul_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b11110000, a, b,
);
let e = _mm512_setr_pd(
8.,
@ -5440,13 +5434,11 @@ mod tests {
unsafe fn test_mm512_maskz_mul_round_pd() {
let a = _mm512_setr_pd(8., 9.5, 10., 11.5, 12., 13.5, 14., 0.);
let b = _mm512_set1_pd(0.1);
let r = _mm512_maskz_mul_round_pd(0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_maskz_mul_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_mul_round_pd(
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_mul_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b11110000, a, b,
);
let e = _mm512_setr_pd(
0.,
@ -5465,10 +5457,10 @@ mod tests {
unsafe fn test_mm512_div_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r = _mm512_div_round_pd(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_div_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_set1_pd(0.3333333333333333);
assert_eq_m512d(r, e);
let r = _mm512_div_round_pd(a, b, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_div_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_set1_pd(0.3333333333333333);
assert_eq_m512d(r, e);
}
@ -5477,14 +5469,12 @@ mod tests {
unsafe fn test_mm512_mask_div_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r = _mm512_mask_div_round_pd(a, 0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_div_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, a, b,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_div_round_pd(
a,
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_div_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b11110000, a, b,
);
let e = _mm512_setr_pd(
1.,
@ -5503,13 +5493,11 @@ mod tests {
unsafe fn test_mm512_maskz_div_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r = _mm512_maskz_div_round_pd(0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_maskz_div_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_div_round_pd(
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_div_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b11110000, a, b,
);
let e = _mm512_setr_pd(
0.,
@ -5527,10 +5515,10 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_sqrt_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_sqrt_round_pd(a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_sqrt_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a);
let e = _mm512_set1_pd(1.7320508075688772);
assert_eq_m512d(r, e);
let r = _mm512_sqrt_round_pd(a, _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC);
let r = _mm512_sqrt_round_pd::<{ _MM_FROUND_TO_POS_INF | _MM_FROUND_NO_EXC }>(a);
let e = _mm512_set1_pd(1.7320508075688774);
assert_eq_m512d(r, e);
}
@ -5538,13 +5526,11 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_sqrt_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_mask_sqrt_round_pd(a, 0, a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_mask_sqrt_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, 0, a);
assert_eq_m512d(r, a);
let r = _mm512_mask_sqrt_round_pd(
a,
0b11110000,
a,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_sqrt_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b11110000, a,
);
let e = _mm512_setr_pd(
3.,
@ -5562,12 +5548,11 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_sqrt_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_maskz_sqrt_round_pd(0, a, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_maskz_sqrt_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(0, a);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_sqrt_round_pd(
0b11110000,
a,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_sqrt_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b11110000, a,
);
let e = _mm512_setr_pd(
0.,
@ -5587,10 +5572,10 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_fmadd_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(-1.);
assert_eq_m512d(r, e);
let r = _mm512_fmadd_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fmadd_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(-0.9999999999999999);
assert_eq_m512d(r, e);
}
@ -5600,15 +5585,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_mask_fmadd_round_pd(a, 0, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fmadd_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
-1.,
@ -5628,15 +5610,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_maskz_fmadd_round_pd(0, a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_maskz_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fmadd_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(-1., -1., -1., -1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -5647,15 +5626,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_mask3_fmadd_round_pd(a, b, c, 0, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask3_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fmadd_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(-1., -1., -1., -1., -1., -1., -1., -1.);
assert_eq_m512d(r, e);
@ -5666,10 +5642,10 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r = _mm512_fmsub_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(-1.);
assert_eq_m512d(r, e);
let r = _mm512_fmsub_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fmsub_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(-0.9999999999999999);
assert_eq_m512d(r, e);
}
@ -5679,15 +5655,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_mask_fmsub_round_pd(a, 0, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fmsub_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
-1.,
@ -5707,15 +5680,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_maskz_fmsub_round_pd(0, a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_maskz_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fmsub_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(-1., -1., -1., -1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -5726,15 +5696,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_mask3_fmsub_round_pd(a, b, c, 0, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask3_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fmsub_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(-1., -1., -1., -1., 1., 1., 1., 1.);
assert_eq_m512d(r, e);
@ -5745,10 +5712,11 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_fmaddsub_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_setr_pd(1., -1., 1., -1., 1., -1., 1., -1.);
assert_eq_m512d(r, e);
let r = _mm512_fmaddsub_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fmaddsub_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_setr_pd(
1.,
-0.9999999999999999,
@ -5767,20 +5735,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_mask_fmaddsub_round_pd(
a,
0,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fmaddsub_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
1.,
@ -5800,20 +5760,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_maskz_fmaddsub_round_pd(
0,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fmaddsub_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(1., -1., 1., -1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -5824,20 +5776,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_mask3_fmaddsub_round_pd(
a,
b,
c,
0,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fmaddsub_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmaddsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(1., -1., 1., -1., -1., -1., -1., -1.);
assert_eq_m512d(r, e);
@ -5848,10 +5792,11 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_fmsubadd_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_setr_pd(-1., 1., -1., 1., -1., 1., -1., 1.);
assert_eq_m512d(r, e);
let r = _mm512_fmsubadd_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fmsubadd_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_setr_pd(
-0.9999999999999999,
1.,
@ -5870,20 +5815,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_mask_fmsubadd_round_pd(
a,
0,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fmsubadd_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
-1.,
@ -5903,20 +5840,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_maskz_fmsubadd_round_pd(
0,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fmsubadd_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(-1., 1., -1., 1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -5927,20 +5856,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_mask3_fmsubadd_round_pd(
a,
b,
c,
0,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fmsubadd_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fmsubadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(-1., 1., -1., 1., -1., -1., -1., -1.);
assert_eq_m512d(r, e);
@ -5951,10 +5872,11 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r = _mm512_fnmadd_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(1.);
assert_eq_m512d(r, e);
let r = _mm512_fnmadd_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fnmadd_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(0.9999999999999999);
assert_eq_m512d(r, e);
}
@ -5964,15 +5886,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_mask_fnmadd_round_pd(a, 0, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fnmadd_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
1.,
@ -5992,15 +5911,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_maskz_fnmadd_round_pd(0, a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_maskz_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fnmadd_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(1., 1., 1., 1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -6011,15 +5927,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(1.);
let r =
_mm512_mask3_fnmadd_round_pd(a, b, c, 0, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask3_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fnmadd_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fnmadd_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(1., 1., 1., 1., 1., 1., 1., 1.);
assert_eq_m512d(r, e);
@ -6030,10 +5943,11 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r = _mm512_fnmsub_round_pd(a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r =
_mm512_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(1.);
assert_eq_m512d(r, e);
let r = _mm512_fnmsub_round_pd(a, b, c, _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC);
let r = _mm512_fnmsub_round_pd::<{ _MM_FROUND_TO_ZERO | _MM_FROUND_NO_EXC }>(a, b, c);
let e = _mm512_set1_pd(0.9999999999999999);
assert_eq_m512d(r, e);
}
@ -6043,15 +5957,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_mask_fnmsub_round_pd(a, 0, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, b, c,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_fnmsub_round_pd(
a,
0b00001111,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b00001111, b, c,
);
let e = _mm512_setr_pd(
1.,
@ -6071,15 +5982,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_maskz_fnmsub_round_pd(0, a, b, c, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_maskz_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b, c,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_fnmsub_round_pd(
0b00001111,
a,
b,
c,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b00001111, a, b, c,
);
let e = _mm512_setr_pd(1., 1., 1., 1., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
@ -6090,15 +5998,12 @@ mod tests {
let a = _mm512_set1_pd(0.000000000000000007);
let b = _mm512_set1_pd(1.);
let c = _mm512_set1_pd(-1.);
let r =
_mm512_mask3_fnmsub_round_pd(a, b, c, 0, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask3_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0,
);
assert_eq_m512d(r, c);
let r = _mm512_mask3_fnmsub_round_pd(
a,
b,
c,
0b00001111,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask3_fnmsub_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, b, c, 0b00001111,
);
let e = _mm512_setr_pd(1., 1., 1., 1., -1., -1., -1., -1.);
assert_eq_m512d(r, e);
@ -6108,7 +6013,7 @@ mod tests {
unsafe fn test_mm512_max_round_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_round_pd(a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_max_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
@ -6117,9 +6022,9 @@ mod tests {
unsafe fn test_mm512_mask_max_round_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_round_pd(a, 0, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_max_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_max_round_pd(a, 0b00001111, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_max_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0b00001111, a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
@ -6128,9 +6033,9 @@ mod tests {
unsafe fn test_mm512_maskz_max_round_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_round_pd(0, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_max_round_pd::<_MM_FROUND_CUR_DIRECTION>(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_max_round_pd(0b00001111, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_max_round_pd::<_MM_FROUND_CUR_DIRECTION>(0b00001111, a, b);
let e = _mm512_setr_pd(7., 6., 5., 4., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
@ -6139,7 +6044,7 @@ mod tests {
unsafe fn test_mm512_min_round_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_round_pd(a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_min_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 3., 2., 1., 0.);
assert_eq_m512d(r, e);
}
@ -6148,9 +6053,9 @@ mod tests {
unsafe fn test_mm512_mask_min_round_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_round_pd(a, 0, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_min_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0, a, b);
assert_eq_m512d(r, a);
let r = _mm512_mask_min_round_pd(a, 0b00001111, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_min_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0b00001111, a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 4., 5., 6., 7.);
assert_eq_m512d(r, e);
}
@ -6159,9 +6064,9 @@ mod tests {
unsafe fn test_mm512_maskz_min_round_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_round_pd(0, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_min_round_pd::<_MM_FROUND_CUR_DIRECTION>(0, a, b);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_min_round_pd(0b00001111, a, b, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_min_round_pd::<_MM_FROUND_CUR_DIRECTION>(0b00001111, a, b);
let e = _mm512_setr_pd(0., 1., 2., 3., 0., 0., 0., 0.);
assert_eq_m512d(r, e);
}
@ -6169,7 +6074,7 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_getexp_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_getexp_round_pd(a, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_getexp_round_pd::<_MM_FROUND_CUR_DIRECTION>(a);
let e = _mm512_set1_pd(1.);
assert_eq_m512d(r, e);
}
@ -6177,9 +6082,9 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_mask_getexp_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_mask_getexp_round_pd(a, 0, a, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_getexp_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0, a);
assert_eq_m512d(r, a);
let r = _mm512_mask_getexp_round_pd(a, 0b11110000, a, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_mask_getexp_round_pd::<_MM_FROUND_CUR_DIRECTION>(a, 0b11110000, a);
let e = _mm512_setr_pd(3., 3., 3., 3., 1., 1., 1., 1.);
assert_eq_m512d(r, e);
}
@ -6187,9 +6092,9 @@ mod tests {
#[simd_test(enable = "avx512f")]
unsafe fn test_mm512_maskz_getexp_round_pd() {
let a = _mm512_set1_pd(3.);
let r = _mm512_maskz_getexp_round_pd(0, a, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_getexp_round_pd::<_MM_FROUND_CUR_DIRECTION>(0, a);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_getexp_round_pd(0b11110000, a, _MM_FROUND_CUR_DIRECTION);
let r = _mm512_maskz_getexp_round_pd::<_MM_FROUND_CUR_DIRECTION>(0b11110000, a);
let e = _mm512_setr_pd(0., 0., 0., 0., 1., 1., 1., 1.);
assert_eq_m512d(r, e);
}
@ -6227,7 +6132,7 @@ mod tests {
unsafe fn test_mm512_scalef_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r = _mm512_scalef_round_pd(a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_scalef_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(a, b);
let e = _mm512_set1_pd(8.);
assert_eq_m512d(r, e);
}
@ -6236,15 +6141,12 @@ mod tests {
unsafe fn test_mm512_mask_scalef_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r =
_mm512_mask_scalef_round_pd(a, 0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_mask_scalef_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0, a, b,
);
assert_eq_m512d(r, a);
let r = _mm512_mask_scalef_round_pd(
a,
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_mask_scalef_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
a, 0b11110000, a, b,
);
let e = _mm512_set_pd(8., 8., 8., 8., 1., 1., 1., 1.);
assert_eq_m512d(r, e);
@ -6254,14 +6156,12 @@ mod tests {
unsafe fn test_mm512_maskz_scalef_round_pd() {
let a = _mm512_set1_pd(1.);
let b = _mm512_set1_pd(3.);
let r =
_mm512_maskz_scalef_round_pd(0, a, b, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC);
let r = _mm512_maskz_scalef_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0, a, b,
);
assert_eq_m512d(r, _mm512_setzero_pd());
let r = _mm512_maskz_scalef_round_pd(
0b11110000,
a,
b,
_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC,
let r = _mm512_maskz_scalef_round_pd::<{ _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC }>(
0b11110000, a, b,
);
let e = _mm512_set_pd(8., 8., 8., 8., 0., 0., 0., 0.);
assert_eq_m512d(r, e);