2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / gcc.dg / altivec-10.c
blob8d9223f3be482dc38a4d3c3f5b2e9f52b14e3984
1 /* { dg-do compile { target powerpc*-*-* } } */
2 /* { dg-options "-maltivec -mabi=altivec -fno-inline" } */
4 #include <altivec.h>
5 #include <signal.h>
7 void
8 sig_ill_handler (int sig)
10 exit(0);
13 typedef union
15 float f[4];
16 unsigned int i[4];
17 vector float v;
18 } vec_float_t;
20 void
21 check_vec_all_num ()
23 vec_float_t a, b, c;
25 a.i[0] = 0xfffa5a5a;
26 a.f[1] = 1.0;
27 a.f[2] = 1.0;
28 a.f[3] = 1.0;
30 b.f[0] = 1.0;
31 b.f[1] = 1.0;
32 b.f[2] = 1.0;
33 b.f[3] = 1.0;
35 c.i[0] = 0xfffa5a5a;
36 c.i[1] = 0xfffa5a5a;
37 c.i[2] = 0xfffa5a5a;
38 c.i[3] = 0xfffa5a5a;
40 if (vec_all_numeric (a.v))
41 abort ();
43 if (vec_all_nan (a.v))
44 abort ();
46 if (!vec_all_numeric (b.v))
47 abort ();
49 if (vec_all_nan (b.v))
50 abort ();
52 if (vec_all_numeric (c.v))
53 abort ();
55 if (!vec_all_nan (c.v))
56 abort ();
60 void
61 check_cmple()
63 vector float a = {1.0, 2.0, 3.0, 4.0};
64 vector float b = {1.0, 3.0, 2.0, 5.0};
65 vector signed int aux;
66 vector signed int le = {-1, -1, 0, -1};
68 aux = vec_cmple (a, b);
70 if (!vec_all_eq (aux, le))
71 abort ();
75 int
76 main()
78 /* Exit on systems without altivec. */
79 signal (SIGILL, sig_ill_handler);
80 asm volatile ("vor 0,0,0");
81 signal (SIGILL, SIG_DFL);
83 check_cmple ();
84 check_vec_all_num ();
85 exit (0);