amdfam10
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / sse4a-montss.c
blob28ecb1cf3c0d61e284d2c66d2f5cc3abbf25fc6b
1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-O2 -msse4a" } */
3 #include <ammintrin.h>
4 #include <stdlib.h>
5 #include "../../gcc.dg/i386-cpuid.h"
7 static void sse4a_test (void);
9 int
10 main ()
12 unsigned long cpu_facilities;
14 cpu_facilities = i386_extended_cpuid_ecx ();
16 /* Run SSE4a test only if host has SSE4a support. */
17 if ((cpu_facilities & bit_SSE4a))
18 sse4a_test ();
20 exit (0);
23 static void
24 sse4a_test_movntss (float *out, float *in)
26 __m128 in_v4sf = _mm_load_ss (in);
27 _mm_stream_ss (out, in_v4sf);
30 static int
31 chk_ss (float *v1, float *v2)
33 int n_fails = 0;
34 if (v1[0] != v2[0])
35 n_fails += 1;
36 return n_fails;
39 float vals[10] =
41 100.0, 200.0, 300.0, 400.0, 5.0,
42 -1.0, .345, -21.5, 9.32, 8.41
45 static void
46 sse4a_test (void)
48 int i;
49 int fail = 0;
50 float *out;
52 out = (float *) malloc (sizeof (float));
53 for (i = 0; i < 10; i += 1)
55 sse4a_test_movntss (out, &vals[i]);
57 fail += chk_ss (out, &vals[i]);
60 if (fail != 0)
61 abort ();
63 exit (0);