/* { dg-do run } */
/* { dg-options "-O3 -mpower8-vector" } */
/* { dg-require-effective-target p8vector_hw } */

#define NO_WARN_X86_INTRINSICS 1
#include <mmintrin.h>
#include "mmx-check.h"

#ifndef TEST
#define TEST mmx_test
#endif

static void
__attribute__ ((noinline))
check_packs_pu16 (unsigned long long int src1, unsigned long long int src2,
                  unsigned long long int res_ref)
{
  unsigned long long int res;

  res = (unsigned long long int) _mm_packs_pu16 ((__m64 ) src1, (__m64 ) src2);

  if (res != res_ref)
    abort ();
}

static void
__attribute__ ((noinline))
check_packs_pi16 (unsigned long long int src1, unsigned long long int src2,
                  unsigned long long int res_ref)
{
  unsigned long long int res;

  res = (unsigned long long int) _mm_packs_pi16 ((__m64 ) src1, (__m64 ) src2);


  if (res != res_ref)
    abort ();
}

static void
__attribute__ ((noinline))
check_packs_pi32 (unsigned long long int src1, unsigned long long int src2,
		  unsigned long long int res_ref)
{
  unsigned long long int res;

  res = (unsigned long long int) _mm_packs_pi32 ((__m64 ) src1, (__m64 ) src2);

  if (res != res_ref)
    abort ();
}

static unsigned long long int src1[] =
  { 0xffff0000fffe0000UL, 0x0001000000020000UL, 0xfffffffffffffffeUL,
      0x0000000100000002UL, 0x0001000200030004UL, 0xfffffffefffdfffcUL,
      0x0100020003000400UL, 0xff00fe01fe02fe03UL };

static unsigned long long int src2[] =
  { 0xfffffffdfffffffcUL, 0x0000000200000003UL, 0xfffffffdfffffffcUL,
      0x0000000300000004UL, 0x0005000600070008UL, 0xfffbfffafff9fff8UL,
      0x0005000600070008UL, 0xfffbfffafff9fff8UL };

static unsigned long long int res_pi16[] =
  { 0xfffdfffcff00fe00UL, 0x0002000301000200UL, 0xfffdfffcfffffffeUL,
      0x0003000400010002UL, 0x0506070801020304UL, 0xfbfaf9f8fffefdfcUL,
      0x050607087f7f7f7fUL, 0xfbfaf9f880808080UL };

static unsigned long long int res_pi32[] =
  { 0xfffdfffc80008000UL, 0x000200037fff7fffUL, 0xfffdfffcfffffffeUL,
      0x0003000400010002UL, 0x7fff7fff7fff7fffUL, 0x80008000fffe8000UL,
      0x7fff7fff7fff7fffUL, 0x8000800080008000UL };

static unsigned long long int res_pu16[] =
  { 0x0000000000000000UL, 0x0002000301000200UL, 0x0000000000000000UL,
      0x0003000400010002UL, 0x0506070801020304UL, 0x000000000000000UL,
      0x5060708ffffffffUL, 0x0000000000000000UL };

static void
TEST ()
{
  long i;

  for (i = 0; i < 8; i++)
    {
      check_packs_pu16 (src1[i], src2[i], res_pu16[i]);
      check_packs_pi16 (src1[i], src2[i], res_pi16[i]);
      check_packs_pi32 (src1[i], src2[i], res_pi32[i]);
    }
}

