1265236Sken/* { dg-do run } */
2283990Sslm/* { dg-require-effective-target sse4 } */
3283990Sslm/* { dg-options "-O2 -msse4.1" } */
4265236Sken
5265236Sken#ifndef CHECK_H
6265236Sken#define CHECK_H "sse4_1-check.h"
7265236Sken#endif
8265236Sken
9265236Sken#ifndef TEST
10265236Sken#define TEST sse4_1_test
11265236Sken#endif
12265236Sken
13265236Sken#include CHECK_H
14265236Sken
15265236Sken#include <smmintrin.h>
16265236Sken
17265236Sken#define NUM 128
18265236Sken
19265236Skenstatic void
20265236SkenTEST (void)
21265236Sken{
22265236Sken  union
23265236Sken    {
24265236Sken      __m128i x[NUM / 4];
25265236Sken      int i[NUM];
26265236Sken      short s[NUM * 2];
27283990Sslm    } dst, src;
28265236Sken  int i, sign = 1;
29265236Sken
30265236Sken  for (i = 0; i < NUM; i++)
31265236Sken    {
32265236Sken      src.s[(i % 4) + (i / 4) * 8] = i * i * sign;
33265236Sken      sign = -sign;
34265236Sken    }
35265236Sken
36265236Sken  for (i = 0; i < NUM; i += 4)
37265236Sken    dst.x [i / 4] = _mm_cvtepi16_epi32 (src.x [i / 4]);
38265236Sken
39265236Sken  for (i = 0; i < NUM; i++)
40265236Sken    if (src.s[(i % 4) + (i / 4) * 8] != dst.i[i])
41265236Sken      abort ();
42265236Sken}
43265236Sken