1/* { dg-do run } */
2/* { dg-options "-O2 -msse2" } */
3/* { dg-require-effective-target sse2 } */
4
5#ifndef CHECK_H
6#define CHECK_H "sse2-check.h"
7#endif
8
9#ifndef TEST
10#define TEST sse2_test
11#endif
12
13#include CHECK_H
14
15#include <emmintrin.h>
16
17
18static __m128
19__attribute__((noinline, unused))
20test (__m128 p1, __m128d p2)
21{
22  return _mm_cvtsd_ss (p1, p2);
23}
24
25static void
26TEST (void)
27{
28  union128d s1;
29  union128 u, s2;
30  double source1[2] = {123.345, 67.3321};
31  float  e[4] = {5633.098, 93.21, 3.34, 4555.2};
32
33  s1.x = _mm_loadu_pd (source1);
34  s2.x = _mm_loadu_ps (e);
35
36  u.x = test(s2.x, s1.x);
37
38  e[0] = (float)source1[0];
39
40  if (check_union128(u, e))
41    abort ();
42}
43