1 /* { dg-do run } */
2 /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */
3 /* { dg-additional-options "-mno-mmx" { target { ! ia32 } } } */
4 
5 #include "sse2-check.h"
6 
7 __attribute__((noinline, noclone))
8 static void
test_cvtps_pi32(__m128 * src_p,long long * r)9 test_cvtps_pi32 (__m128 *src_p, long long *r)
10 {
11   *(__m64 *) r = _mm_cvtps_pi32 (*src_p);
12 }
13 
14 /* Routine to manually compute the results */
15 static void
compute_correct_result(__m128 * src_p,long long * res_p)16 compute_correct_result (__m128 *src_p, long long *res_p)
17 {
18   __v4sf *src = (__v4sf *) src_p;
19   int *res = (int *) res_p;
20   int i;
21   for (i = 0; i < 2; i++)
22     res[i] = _mm_cvt_ss2si (_mm_set_ss ((*src)[i]));
23 }
24 
25 static void
sse2_test(void)26 sse2_test (void)
27 {
28   long long r, ck;
29   __v4sf x = { 1.99f, -3.9f, -4.9f, 3.8f };
30 
31   /* Run the MMX tests */
32   test_cvtps_pi32 ((__m128 *) &x, &r);
33   compute_correct_result ((__m128 *) &x, &ck);
34   if (ck != r)
35     abort ();
36 }
37