1153838Sdfr/* { dg-do run } */
2153838Sdfr/* { dg-require-effective-target sse4 } */
3153838Sdfr/* { dg-options "-O2 -msse4.1" } */
4153838Sdfr
5153838Sdfr#ifndef CHECK_H
6153838Sdfr#define CHECK_H "sse4_1-check.h"
7153838Sdfr#endif
8153838Sdfr
9153838Sdfr#ifndef TEST
10153838Sdfr#define TEST sse4_1_test
11153838Sdfr#endif
12153838Sdfr
13153838Sdfr#include CHECK_H
14153838Sdfr
15153838Sdfr#include <smmintrin.h>
16153838Sdfr
17153838Sdfr#define NUM 128
18153838Sdfr
19153838Sdfrstatic void
20153838SdfrTEST (void)
21153838Sdfr{
22153838Sdfr  union
23153838Sdfr    {
24153838Sdfr      __m128i x[NUM / 4];
25153838Sdfr      unsigned int i[NUM];
26153838Sdfr      unsigned char c[NUM * 4];
27153838Sdfr    } dst, src;
28153838Sdfr  int i;
29153838Sdfr
30203027Sgavin  for (i = 0; i < NUM; i++)
31206622Suqs    {
32153838Sdfr      src.c[(i % 4) + (i / 4) * 16] = i * i;
33153838Sdfr      if ((i % 4))
34153838Sdfr	src.c[(i % 4) + (i / 4) * 16] |= 0x80;
35153838Sdfr    }
36153838Sdfr
37153838Sdfr  for (i = 0; i < NUM; i += 4)
38153838Sdfr    dst.x [i / 4] = _mm_cvtepu8_epi32 (src.x [i / 4]);
39153838Sdfr
40153838Sdfr  for (i = 0; i < NUM; i++)
41153838Sdfr    if (src.c[(i % 4) + (i / 4) * 16] != dst.i[i])
42153838Sdfr      abort ();
43153838Sdfr}
44153838Sdfr