1236644Semax/* { dg-do run } */
2236644Semax/* { dg-options "-O2 -msse2" } */
3236644Semax/* { dg-require-effective-target sse2 } */
4236644Semax
5236644Semax#ifndef CHECK_H
6236645Semax#define CHECK_H "sse2-check.h"
7236644Semax#endif
8236644Semax
9236644Semax#ifndef TEST
10236644Semax#define TEST sse2_test
11236644Semax#endif
12236644Semax
13236644Semax#include CHECK_H
14236645Semax
15236645Semax#include <emmintrin.h>
16236645Semax
17236645Semaxstatic __m128i
18236645Semax__attribute__((noinline, unused))
19236644Semaxtest (__m128i s1, __m128i c)
20236644Semax{
21236645Semax  return _mm_sll_epi64 (s1, c);
22236645Semax}
23236645Semax
24236645Semaxstatic void
25236644SemaxTEST (void)
26236644Semax{
27236644Semax  union128i_q u, s, c;
28236644Semax  long long e[2] = {0};
29236644Semax  int i;
30236644Semax
31236644Semax  s.x = _mm_set_epi64x (-1, 0xf);
32236644Semax  c.x = _mm_set_epi64x (60,50);
33236644Semax
34236644Semax  u.x = test (s.x, c.x);
35236644Semax
36236644Semax  if (c.a[0] < 64)
37236644Semax    for (i = 0; i < 2; i++)
38236644Semax      e[i] = s.a[i] << c.a[0];
39236644Semax
40236644Semax  if (check_union128i_q (u, e))
41236644Semax    abort ();
42236644Semax}
43236644Semax