1 /* { dg-do run { target { powerpc*-*-* && vmx_hw } } } */
2 /* { dg-do compile { target { powerpc*-*-* && { ! vmx_hw } } } } */
3 /* { dg-require-effective-target powerpc_altivec_ok } */
4 /* { dg-options "-maltivec -mabi=altivec -fno-inline" } */
5 
6 #include <altivec.h>
7 
8 extern void exit (int);
9 extern void abort (void);
10 
11 typedef union
12 {
13   float         f[4];
14   unsigned int  i[4];
15   vector float  v;
16 } vec_float_t;
17 
18 void
check_vec_all_num()19 check_vec_all_num ()
20 {
21   vec_float_t a, b, c;
22 
23   a.i[0] = 0xfffa5a5a;
24   a.f[1] = 1.0;
25   a.f[2] = 1.0;
26   a.f[3] = 1.0;
27 
28   b.f[0] = 1.0;
29   b.f[1] = 1.0;
30   b.f[2] = 1.0;
31   b.f[3] = 1.0;
32 
33   c.i[0] = 0xfffa5a5a;
34   c.i[1] = 0xfffa5a5a;
35   c.i[2] = 0xfffa5a5a;
36   c.i[3] = 0xfffa5a5a;
37 
38   if (vec_all_numeric (a.v))
39     abort ();
40 
41   if (vec_all_nan (a.v))
42     abort ();
43 
44   if (!vec_all_numeric (b.v))
45     abort ();
46 
47   if (vec_all_nan (b.v))
48     abort ();
49 
50   if (vec_all_numeric (c.v))
51     abort ();
52 
53   if (!vec_all_nan (c.v))
54     abort ();
55 
56 }
57 
58 void
check_cmple()59 check_cmple()
60 {
61   vector float a = {1.0, 2.0, 3.0, 4.0};
62   vector float b = {1.0, 3.0, 2.0, 5.0};
63   vector bool int aux;
64   vector signed int le = {-1, -1, 0, -1};
65 
66   aux = vec_cmple (a, b);
67 
68   if (!vec_all_eq (aux, le))
69     abort ();
70 }
71 
72 
73 int
main()74 main()
75 {
76   check_cmple ();
77   check_vec_all_num ();
78   exit (0);
79 }
80