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