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