/* { dg-do run } */
/* { dg-require-effective-target avx512er } */
/* { dg-options "-O2 -mavx512er" } */

#include "avx512er-check.h"
#include "avx512f-mask-type.h"
#include "avx512f-helper.h"
#include <math.h>

#define IMM 0x23

void static
avx512er_test (void)
{
  union128d src1, src2, res, res1, res2, res3, res4;
  double res_ref[2];
  MASK_TYPE mask = MASK_VALUE;
  int i;
  
  for (i = 0; i < 2; i++)
    {
      src1.a[i] = 179.345 - 6.5645 * i;
      src2.a[i] = 45 - 6.5645 * i;
      res_ref[i] = src1.a[i];
    }

  res_ref[0] = 1.0 / sqrt (src2.a[0]);

  res.x = _mm_rsqrt28_round_sd (src1.x, src2.x, _MM_FROUND_NO_EXC);
  res1.x = _mm_mask_rsqrt28_sd (src1.x, IMM, src1.x, src2.x);
  res2.x = _mm_mask_rsqrt28_round_sd (src1.x, IMM, src1.x, src2.x,
				      _MM_FROUND_TO_NEAREST_INT
				      | _MM_FROUND_NO_EXC);
  res3.x = _mm_maskz_rsqrt28_sd (IMM, src1.x, src2.x);
  res4.x = _mm_maskz_rsqrt28_round_sd (IMM, src1.x, src2.x,
				       _MM_FROUND_TO_NEAREST_INT
				       | _MM_FROUND_NO_EXC);

  if (checkVd (res.a, res_ref, 2))
    abort ();

  MASK_MERGE (d) (res_ref, mask, 1);

  if (checkVd (res1.a, res_ref, 2))
    abort ();

  if (checkVd (res2.a, res_ref, 2))
    abort ();

  MASK_ZERO (d) (res_ref, mask, 1);

  if (checkVd (res3.a, res_ref, 2))
    abort ();

  if (checkVd (res4.a, res_ref, 2))
    abort ();
}
