/* APPLE LOCAL file 5612787 mainline sse4 */
/* { dg-do run { target i?86-*-* x86_64-*-* } } */
/* { dg-require-effective-target sse4 } */
/* { dg-options "-O2 -msse4.1" } */

#include "sse4_1-check.h"

#include <smmintrin.h>
#include <string.h>

#define lmskN  0x00
#define lmsk0  0x01
#define lmsk1  0x02
#define lmsk01 0x03

#define hmskA  0x30
#define hmsk0  0x10
#define hmsk1  0x20
#define hmsk01 0x30
#define hmskN  0x00

#ifndef HIMASK
#define HIMASK hmskA
#endif

#ifndef LOMASK
#define LOMASK lmsk01
#endif

static void
sse4_1_test (void)
{
  union
    {
      __m128d x;
      double d[2];
    } val1[4], val2[4], res[4], chk[4];
  int i, j;
  double tmp;

  for (i = 0; i < 4; i++)
    {
      val1[i].d [0] = 2.;
      val1[i].d [1] = 3.;

      val2[i].d [0] = 10.;
      val2[i].d [1] = 100.;

      tmp = 0.;
      for (j = 0; j < 2; j++)
	if ((HIMASK & (0x10 << j)))
	  tmp += val1[i].d [j] * val2[i].d [j];

      for (j = 0; j < 2; j++)
        if ((LOMASK & (1 << j)))
	  chk[i].d[j] = tmp;
    }

  for (i = 0; i < 4; i++)
    {
      res[i].x = _mm_dp_pd (val1[i].x, val2[i].x, HIMASK | LOMASK); 
      if (memcmp (&res[i], &chk[i], sizeof (chk[i])))
	abort ();
    }
}
