OSDN Git Service

37cd7bca7394982f7cad068df12c28d51ca5db65
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vmx / vprint-1.c
1 /* These tests require an AltiVec aware C library with vector
2    extensions for printf (%v).  Currently newlib handles AltiVec
3    vector extensions.  There are some clandestine patches for glibc
4    floating around, as well as a stanalone libaltivec library that
5    implements such extensions.  */
6
7 #include "harness.h"
8 #include <string.h>
9
10 static void test()
11 {
12   const char *x;
13   char buf[256];
14
15   vector float f32;
16   vector signed char s8;
17   vector unsigned short u16;
18   vector signed short s16;
19   vector signed int s32;
20
21   f32 = ((vector float){1, 2.2, 333.333e-18, -4.5007544});
22
23   x = "%vf: 1.000000 2.200000 0.000000 -4.500754";
24   snprintf(buf, sizeof buf, "%%vf: %vf", f32);
25   check(!strcmp(buf, x), x);
26
27   x = "%ve: 1.000000e+00 2.200000e+00 3.333330e-16 -4.500754e+00";
28   snprintf(buf, sizeof buf, "%%ve: %ve", f32);
29   check(!strcmp(buf, x), x);
30
31   x = "%vE: 1.000000E+00 2.200000E+00 3.333330E-16 -4.500754E+00";
32   snprintf(buf, sizeof buf, "%%vE: %vE", f32);
33   check(!strcmp(buf, x), x);
34
35   x = "%vg: 1 2.2 3.33333e-16 -4.50075";
36   snprintf(buf, sizeof buf, "%%vg: %vg", f32);
37   check(!strcmp(buf, x), x);
38
39   x = "%vG: 1 2.2 3.33333E-16 -4.50075";
40   snprintf(buf, sizeof buf, "%%vG: %vG", f32);
41   check(!strcmp(buf, x), x);
42
43   x = "%7.3vf:   1.000   2.200   0.000  -4.501";
44   snprintf(buf, sizeof buf, "%%7.3vf: %7.3vf", f32);
45   check(!strcmp(buf, x), x);
46
47   x = "%:7.3vf:   1.000:  2.200:  0.000: -4.501";
48   snprintf(buf, sizeof buf, "%%:7.3vf: %:7.3vf", f32);
49   check(!strcmp(buf, x), x);
50
51   x = "%:7.3f: :7.3f";
52   snprintf(buf, sizeof buf, "%%:7.3f: %:7.3f", f32);
53   check(!strcmp(buf, x), x);
54
55
56   s8 = vec_sub((vector signed char)vec_lvsl(1,(signed char *)0),
57                ((vector signed char){8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8}));
58   x = "%vd: -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8";
59   snprintf(buf, sizeof buf, "%%vd: %vd", s8);
60   check(!strcmp(buf, x), x);
61
62   x = "%vi: -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8";
63   snprintf(buf, sizeof buf, "%%vi: %vi", s8);
64   check(!strcmp(buf, x), x);
65
66   x = "%vu: 249 250 251 252 253 254 255 0 1 2 3 4 5 6 7 8";
67   snprintf(buf, sizeof buf, "%%vu: %vu", s8);
68   check(!strcmp(buf, x), x);
69
70   x = "%vx: f9 fa fb fc fd fe ff 0 1 2 3 4 5 6 7 8";
71   snprintf(buf, sizeof buf, "%%vx: %vx", s8);
72   check(!strcmp(buf, x), x);
73
74   x = "%vo: 371 372 373 374 375 376 377 0 1 2 3 4 5 6 7 10";
75   snprintf(buf, sizeof buf, "%%vo: %vo", s8);
76   check(!strcmp(buf, x), x);
77
78   x = "%vp: 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8";
79   snprintf(buf, sizeof buf, "%%vp: %vp", s8);
80   check(!strcmp(buf, x), x);
81
82   x = "%vx: f9 fa fb fc fd fe ff 0 1 2 3 4 5 6 7 8";
83   snprintf(buf, sizeof buf, "%%vx: %vx", s8);
84   check(!strcmp(buf, x), x);
85
86   x = "%vX: F9 FA FB FC FD FE FF 0 1 2 3 4 5 6 7 8";
87   snprintf(buf, sizeof buf, "%%vX: %vX", s8);
88   check(!strcmp(buf, x), x);
89
90
91   x = "%hvd: -1542 -1028 -514 -256 258 772 1286 1800";
92   snprintf(buf, sizeof buf, "%%hvd: %hvd", s8);
93   check(!strcmp(buf, x), x);
94
95   x = "%vhi: -1542 -1028 -514 -256 258 772 1286 1800";
96   snprintf(buf, sizeof buf, "%%vhi: %vhi", s8);
97   check(!strcmp(buf, x), x);
98
99   x = "%hvu: 63994 64508 65022 65280 258 772 1286 1800";
100   snprintf(buf, sizeof buf, "%%hvu: %hvu", s8);
101   check(!strcmp(buf, x), x);
102
103   x = "%vhx: f9fa fbfc fdfe ff00 102 304 506 708";
104   snprintf(buf, sizeof buf, "%%vhx: %vhx", s8);
105   check(!strcmp(buf, x), x);
106
107   x = "%hvo: 174772 175774 176776 177400 402 1404 2406 3410";
108   snprintf(buf, sizeof buf, "%%hvo: %hvo", s8);
109   check(!strcmp(buf, x), x);
110
111   x = "%vhp: 0xf9fa 0xfbfc 0xfdfe 0xff00 0x102 0x304 0x506 0x708";
112   snprintf(buf, sizeof buf, "%%vhp: %vhp", s8);
113   check(!strcmp(buf, x), x);
114
115   x = "%hvx: f9fa fbfc fdfe ff00 102 304 506 708";
116   snprintf(buf, sizeof buf, "%%hvx: %hvx", s8);
117   check(!strcmp(buf, x), x);
118
119   x = "%vhX: F9FA FBFC FDFE FF00 102 304 506 708";
120   snprintf(buf, sizeof buf, "%%vhX: %vhX", s8);
121   check(!strcmp(buf, x), x);
122
123   x = "0x%_04vhx: 0xf9fa_fbfc_fdfe_ff00_0102_0304_0506_0708";
124   snprintf(buf, sizeof buf, "0x%%_04vhx: 0x%_04vhx", s8);
125   check(!strcmp(buf, x), x);
126
127
128   x = "%lvd: -100992004 -33620224 16909060 84281096";
129   snprintf(buf, sizeof buf, "%%lvd: %lvd", s8);
130   check(!strcmp(buf, x), x);
131
132   x = "%vli: -100992004 -33620224 16909060 84281096";
133   snprintf(buf, sizeof buf, "%%vli: %vli", s8);
134   check(!strcmp(buf, x), x);
135
136   x = "%lvu: 4193975292 4261347072 16909060 84281096";
137   snprintf(buf, sizeof buf, "%%lvu: %lvu", s8);
138   check(!strcmp(buf, x), x);
139
140   x = "%vlx: f9fafbfc fdfeff00 1020304 5060708";
141   snprintf(buf, sizeof buf, "%%vlx: %vlx", s8);
142   check(!strcmp(buf, x), x);
143
144   x = "%lvo: 37176575774 37577577400 100401404 501403410";
145   snprintf(buf, sizeof buf, "%%lvo: %lvo", s8);
146   check(!strcmp(buf, x), x);
147
148   x = "%vlp: 0xf9fafbfc 0xfdfeff00 0x1020304 0x5060708";
149   snprintf(buf, sizeof buf, "%%vlp: %vlp", s8);
150   check(!strcmp(buf, x), x);
151
152   x = "%lvx: f9fafbfc fdfeff00 1020304 5060708";
153   snprintf(buf, sizeof buf, "%%lvx: %lvx", s8);
154   check(!strcmp(buf, x), x);
155
156   x = "%vlX: F9FAFBFC FDFEFF00 1020304 5060708";
157   snprintf(buf, sizeof buf, "%%vlX: %vlX", s8);
158   check(!strcmp(buf, x), x);
159
160   x = ">-154234 ;-1028   ;+0258   ;+1800   <";
161   printf(">%- +;8.4vld<", ((vector signed int){-154234, -1028, 258, 1800}));
162   check(!strcmp(buf, x), x);
163
164   x = "%,2vx: f9,fa,fb,fc,fd,fe,ff, 0, 1, 2, 3, 4, 5, 6, 7, 8";
165   snprintf(buf, sizeof buf, "%%,2vx: %,2vx", s8);
166   check(!strcmp(buf, x), x);
167
168   x = "%;4vhX: F9FA;FBFC;FDFE;FF00; 102; 304; 506; 708";
169   snprintf(buf, sizeof buf, "%%;4vhX: %;4vhX", s8);
170   check(!strcmp(buf, x), x);
171
172   x = "%;8vlx: f9fafbfc;fdfeff00; 1020304; 5060708";
173   snprintf(buf, sizeof buf, "%%;8vlx: %;8vlx", s8);
174   check(!strcmp(buf, x), x);
175
176   x = "%- ;+8.5vhd: -01542  ;-01028  ;-00514  ;-00256  ;+00258  ;+00772  ;+01286  ;+01800  ";
177   snprintf(buf, sizeof buf, "%%- ;+8.5vhd: %- ;+8.5vhd", s8);
178   check(!strcmp(buf, x), x);
179
180   x = "%- ;+*.5vhd: -01542  ;-01028  ;-00514  ;-00256  ;+00258  ;+00772  ;+01286  ;+01800  ";
181   snprintf(buf, sizeof buf, "%%- ;+*.5vhd: %- ;+*.5vhd", 8, s8);
182   check(!strcmp(buf, x), x);
183
184   x = "%- ;+8.*vhd: -01542  ;-01028  ;-00514  ;-00256  ;+00258  ;+00772  ;+01286  ;+01800  ";
185   snprintf(buf, sizeof buf, "%%- ;+8.*vhd: %- ;+8.*vhd", 5, s8);
186   check(!strcmp(buf, x), x);
187
188   x = "%- ;+*.*vhd: -01542  ;-01028  ;-00514  ;-00256  ;+00258  ;+00772  ;+01286  ;+01800  ";
189   snprintf(buf, sizeof buf, "%%- ;+*.*vhd: %- ;+*.*vhd", 8, 5, s8);
190   check(!strcmp(buf, x), x);
191
192   x = "%- ;+7.4vhd: -1542  ;-1028  ;-0514  ;-0256  ;+0258  ;+0772  ;+1286  ;+1800  ";
193   snprintf(buf, sizeof buf, "%%- ;+7.4vhd: %- ;+7.4vhd", s8);
194   check(!strcmp(buf, x), x);
195
196   x = "%- ;+*.4vhd: -1542  ;-1028  ;-0514  ;-0256  ;+0258  ;+0772  ;+1286  ;+1800  ";
197   snprintf(buf, sizeof buf, "%%- ;+*.4vhd: %- ;+*.4vhd", 7, s8);
198   check(!strcmp(buf, x), x);
199
200   x = "%- ;+7.*vhd: -1542  ;-1028  ;-0514  ;-0256  ;+0258  ;+0772  ;+1286  ;+1800  ";
201   snprintf(buf, sizeof buf, "%%- ;+7.*vhd: %- ;+7.*vhd", 4, s8);
202   check(!strcmp(buf, x), x);
203
204   x = "%- ;+*.*vhd: -1542  ;-1028  ;-0514  ;-0256  ;+0258  ;+0772  ;+1286  ;+1800  ";
205   snprintf(buf, sizeof buf, "%%- ;+*.*vhd: %- ;+*.*vhd", 7, 4, s8);
206   check(!strcmp(buf, x), x);
207
208
209   s8 = vec_add(s8, ((vector signed char){'h','h','h','h','h','h','h','h',
210                                         'h','h','h','h','h','h','h','h'}));
211   x = "%vc: abcdefghijklmnop";
212   snprintf(buf, sizeof buf, "%%vc: %vc", s8);
213   check(!strcmp(buf, x), x);
214
215   x = "abcdefghijklmnopqrstuvwxyz,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p";
216   snprintf(buf, sizeof buf, "%vcqrstuvwxyz,%,vc", s8, s8);
217   check(!strcmp(buf, x), x);
218
219   x = "%#0,2vx: 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70";
220   snprintf(buf, sizeof buf, "%%#0,2vx: %#0,2vx", s8);
221   check(!strcmp(buf, x), x);
222
223
224   s8 = ((vector signed char){'H','e','l','l','o',' ','W','o','r','l','d',',',' ','.','.','.' });
225   x = "s8  = Hello World, ...";
226   snprintf(buf, sizeof buf, "s8  = %vc", s8);
227   check(!strcmp(buf, x), x);
228
229   x = "s8  = H,e,l,l,o, ,W,o,r,l,d,,, ,.,.,.";
230   snprintf(buf, sizeof buf, "s8  = %,vc", s8);
231   check(!strcmp(buf, x), x);
232
233
234   s16 = ((vector signed short){-2,-1,0,1,2,3,4,5});
235   x = "s16 = -2 -1 0 1 2 3 4 5";
236   snprintf(buf, sizeof buf, "s16 = %vhd", s16);
237   check(!strcmp(buf, x), x);
238
239
240   u16 = ((vector unsigned short){65534,65535,0,1,2,3,4,5});
241   x = "u16 = 65534,65535,0,1,2,3,4,5";
242   snprintf(buf, sizeof buf, "u16 = %,vhu", u16);
243   check(!strcmp(buf, x), x);
244
245
246   s32 = ((vector signed int){1,2,3,99});
247   x = "s32 =  1, 2, 3,99";
248   snprintf(buf, sizeof buf, "s32 = %,2lvd", s32);
249   check(!strcmp(buf, x), x);
250
251
252   f32 = ((vector float){1.1, 2.2, 3.3, 4.39501});
253   x = "f32 = 1.10 ,2.20 ,3.30 ,4.40 ";
254   snprintf(buf, sizeof buf, "f32 = %-,5.2vf", f32);
255   check(!strcmp(buf, x), x);
256
257
258   /* <char-conv> only goes with <vector-size> 'v'.  */
259   x = "u16 = vhc";
260   snprintf(buf, sizeof buf, "u16 = %vhc", u16);
261   check(!strcmp(buf, x), x);
262
263   x = "s32 = vhc";
264   snprintf(buf, sizeof buf, "s32 = %vhc", s32);
265   check(!strcmp(buf, x), x);
266 }