162587Sitojun/* { dg-do run } */
278064Sume/* { dg-require-effective-target sse4 } */
362587Sitojun/* { dg-options "-O2 -msse4.1" } */
4139826Simp
553541Sshin#ifndef CHECK_H
653541Sshin#define CHECK_H "sse4_1-check.h"
753541Sshin#endif
853541Sshin
953541Sshin#ifndef TEST
1053541Sshin#define TEST sse4_1_test
1153541Sshin#endif
1253541Sshin
1353541Sshin#include CHECK_H
1453541Sshin
1553541Sshin#include <smmintrin.h>
1653541Sshin
1753541Sshin#define NUM 128
1853541Sshin
1953541Sshinstatic void
2053541SshinTEST (void)
2153541Sshin{
2253541Sshin  union
2353541Sshin    {
2453541Sshin      __m128i x[NUM / 2];
2553541Sshin      long long ll[NUM];
2653541Sshin      int i[NUM * 2];
2753541Sshin    } dst, src;
2853541Sshin  int i, sign = 1;
2953541Sshin
3053541Sshin  for (i = 0; i < NUM; i++)
3153541Sshin    {
3253541Sshin      src.i[(i % 2) + (i / 2) * 4] = i * i * sign;
3362587Sitojun      sign = -sign;
3462587Sitojun    }
3555009Sshin
36148921Ssuz  for (i = 0; i < NUM; i += 2)
3753541Sshin    dst.x [i / 2] = _mm_cvtepi32_epi64 (src.x [i / 2]);
3853541Sshin
3953541Sshin  for (i = 0; i < NUM; i++)
4078064Sume    if (src.i[(i % 2) + (i / 2) * 4] != dst.ll[i])
4153541Sshin      abort ();
4253541Sshin}
4353541Sshin