10SN/A/* { dg-do run } */
22362SN/A/* { dg-options "-O2 -msse2" } */
30SN/A/* { dg-require-effective-target sse2 } */
40SN/A
50SN/A#ifndef CHECK_H
60SN/A#define CHECK_H "sse2-check.h"
72362SN/A#endif
80SN/A
92362SN/A#ifndef TEST
100SN/A#define TEST sse2_test
110SN/A#endif
120SN/A
130SN/A#define N 0xb
140SN/A
150SN/A#include CHECK_H
160SN/A
170SN/A#include <emmintrin.h>
180SN/A
190SN/Astatic __m128i
200SN/A__attribute__((noinline, unused))
212362SN/Atest (__m128i s1)
222362SN/A{
232362SN/A  return _mm_slli_epi16 (s1, N);
240SN/A}
250SN/A
260SN/Astatic void
270SN/ATEST (void)
280SN/A{
290SN/A  union128i_w u, s;
300SN/A  short e[8] = {0};
310SN/A  int i;
320SN/A
330SN/A  s.x = _mm_set_epi16 (1, 2, 3, 4, 5, 6, 0x7000, 0x9000);
340SN/A
350SN/A  u.x = test (s.x);
360SN/A
370SN/A  if (N < 16)
380SN/A    for (i = 0; i < 8; i++)
390SN/A      e[i] = s.a[i] << N;
400SN/A
410SN/A  if (check_union128i_w (u, e))
420SN/A    abort ();
430SN/A}
440SN/A