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