Fix warning with -Wsign-compare -Wsystem-headers
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / vec-init-2.c
blobddd41e280ee02395efe96f843a16267239ea39c4
1 /* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -mvsx" } */
5 #include <stdlib.h>
6 #include <stddef.h>
7 #include <altivec.h>
9 #define ELEMENTS -12345678L, 9L
10 #define SPLAT 0x0123456789ABCDE
12 vector long sv = (vector long) { ELEMENTS };
13 vector long splat = (vector long) { SPLAT, SPLAT };
14 vector long sv_global, sp_global;
15 static vector long sv_static, sp_static;
16 static const int expected[] = { ELEMENTS };
18 extern void check (vector long a)
19 __attribute__((__noinline__));
21 extern void check_splat (vector long a)
22 __attribute__((__noinline__));
24 extern vector long pack_reg (long a, long b)
25 __attribute__((__noinline__));
27 extern vector long pack_from_ptr (long *p_a, long *p_b)
28 __attribute__((__noinline__));
30 extern vector long pack_const (void)
31 __attribute__((__noinline__));
33 extern void pack_ptr (vector long *p, long a, long b)
34 __attribute__((__noinline__));
36 extern void pack_static (long a, long b)
37 __attribute__((__noinline__));
39 extern void pack_global (long a, long b)
40 __attribute__((__noinline__));
42 extern vector long splat_reg (long a)
43 __attribute__((__noinline__));
45 extern vector long splat_from_ptr (long *p)
46 __attribute__((__noinline__));
48 extern vector long splat_const (void)
49 __attribute__((__noinline__));
51 extern void splat_ptr (vector long *p, long a)
52 __attribute__((__noinline__));
54 extern void splat_static (long a)
55 __attribute__((__noinline__));
57 extern void splat_global (long a)
58 __attribute__((__noinline__));
60 void
61 check (vector long a)
63 size_t i;
65 for (i = 0; i < 2; i++)
66 if (vec_extract (a, i) != expected[i])
67 abort ();
70 void
71 check_splat (vector long a)
73 size_t i;
75 for (i = 0; i < 2; i++)
76 if (vec_extract (a, i) != SPLAT)
77 abort ();
80 vector long
81 pack_reg (long a, long b)
83 return (vector long) { a, b };
86 vector long
87 pack_from_ptr (long *p_a, long *p_b)
89 return (vector long) { *p_a, *p_b };
92 vector long
93 pack_const (void)
95 return (vector long) { ELEMENTS };
98 void
99 pack_ptr (vector long *p, long a, long b)
101 *p = (vector long) { a, b };
104 void
105 pack_static (long a, long b)
107 sv_static = (vector long) { a, b };
110 void
111 pack_global (long a, long b)
113 sv_global = (vector long) { a, b };
116 vector long
117 splat_reg (long a)
119 return (vector long) { a, a };
122 vector long
123 splat_from_ptr (long *p)
125 return (vector long) { *p, *p };
128 vector long
129 splat_const (void)
131 return (vector long) { SPLAT, SPLAT };
134 void
135 splat_ptr (vector long *p, long a)
137 *p = (vector long) { a, a };
140 void
141 splat_static (long a)
143 sp_static = (vector long) { a, a };
146 void
147 splat_global (long a)
149 sp_global = (vector long) { a, a };
152 int main (void)
154 vector long sv2, sv3;
155 long mem = SPLAT;
156 long mem2[2] = { ELEMENTS };
158 check (sv);
160 check (pack_reg (ELEMENTS));
162 check (pack_from_ptr (&mem2[0], &mem2[1]));
164 check (pack_const ());
166 pack_ptr (&sv2, ELEMENTS);
167 check (sv2);
169 pack_static (ELEMENTS);
170 check (sv_static);
172 pack_global (ELEMENTS);
173 check (sv_global);
175 check_splat (splat);
177 check_splat (splat_reg (SPLAT));
179 check_splat (splat_from_ptr (&mem));
181 check_splat (splat_const ());
183 splat_ptr (&sv2, SPLAT);
184 check_splat (sv2);
186 splat_static (SPLAT);
187 check_splat (sp_static);
189 splat_global (SPLAT);
190 check_splat (sp_global);
192 return 0;