1 /* { dg-do run } */
2 /* { dg-options "-fno-inline -fomit-frame-pointer -fno-rename-registers" } */
3 /* { dg-additional-options "-mdynamic-no-pic" { target *-*-darwin* } } */
4 
5 /* -fno-inline -maltivec -m32/-m64 -mmultiple/no-multiple -Os/-O2.  */
6 #ifndef NO_BODY
7 #define abort() __builtin_abort ()
8 #define vec_all_eq(v1,v2) __builtin_vec_vcmpeq_p (2, v1, v2)
9 #define SET(T,R,V) register T R __asm__ (#R) = V
10 #define SET_GPR(R,V) SET (long, R, V)
11 #define SET_FPR(R,V) SET (double, R, V)
12 #define SET_VR(R,V) SET (__attribute__ ((vector_size (16))) int, R, V)
13 /* There doesn't seem to be a way of letting gcc know that cr2, cr3
14    and cr4 are being used, and therefore should not be touched by
15    gcc.  Unlike gpr, fpr and vr we can't do something like
16    register __attribute__ ((__mode__ ("__CC__"))) int cr2 __asm__ ("cr2");
17    This makes the test somewhat fragile, dependent on gcc not using
18    any of cr2, cr3 and cr4 in main(), and is why -fno-rename-registers
19    is required.  */
20 #define SET_CR(R,V) __asm__ __volatile__ ("mtcrf %0,%1" : : "n" (1<<(7-R)), "r" (V<<(4*(7-R))) : "cr" #R)
21 #define TRASH_GPR(R) SET_GPR (R, 0)
22 #define TRASH_FPR(R) SET_FPR (R, 0)
23 #define TRASH_VR(R) SET_VR (R, val0)
24 #define TRASH_CR(R) SET_CR (R, 0)
25 #define TRASH_SOME_GPR TRASH_GPR (r30); TRASH_GPR (r31)
26 #define TRASH_SOME_FPR TRASH_FPR (fr28); TRASH_FPR (fr31)
27 #define TRASH_SOME_VR TRASH_VR (v26); TRASH_VR (v27); TRASH_VR (v31)
28 #define TRASH_SOME_CR TRASH_CR (2)
29 #define TRASH_ALL_GPR TRASH_GPR (r14); TRASH_GPR (r15); TRASH_GPR (r16); TRASH_GPR (r17); TRASH_GPR (r18); TRASH_GPR (r19); TRASH_GPR (r20); TRASH_GPR (r21); TRASH_GPR (r22); TRASH_GPR (r23); TRASH_GPR (r24); TRASH_GPR (r25); TRASH_GPR (r26); TRASH_GPR (r27); TRASH_GPR (r28); TRASH_GPR (r29); TRASH_GPR (r30); TRASH_GPR (r31)
30 #define TRASH_ALL_FPR TRASH_FPR (fr14); TRASH_FPR (fr15); TRASH_FPR (fr16); TRASH_FPR (fr17); TRASH_FPR (fr18); TRASH_FPR (fr19); TRASH_FPR (fr20); TRASH_FPR (fr21); TRASH_FPR (fr22); TRASH_FPR (fr23); TRASH_FPR (fr24); TRASH_FPR (fr25); TRASH_FPR (fr26); TRASH_FPR (fr27); TRASH_FPR (fr28); TRASH_FPR (fr29); TRASH_FPR (fr30); TRASH_FPR (fr31)
31 #define TRASH_ALL_VR TRASH_VR (v20); TRASH_VR (v21); TRASH_VR (v22); TRASH_VR (v23); TRASH_VR (v24); TRASH_VR (v25); TRASH_VR (v26); TRASH_VR (v27); TRASH_VR (v28); TRASH_VR (v29); TRASH_VR (v30); TRASH_VR (v31)
32 #define TRASH_ALL_CR TRASH_CR (2); TRASH_CR (3); TRASH_CR (4)
33 #define USE_SOME_GPR __asm__ __volatile__ ("#%0 %1" : : "r" (r30), "r" (r31))
34 #define USE_SOME_FPR __asm__ __volatile__ ("#%0 %1" : : "f" (fr28), "f" (fr31))
35 #define USE_SOME_VR __asm__ __volatile__ ("#%0 %1 %2" : : "v" (v26), "v" (v27), "v" (v31))
36 #define USE_SOME_CR
37 #define USE_ALL_GPR __asm__ __volatile__ ("#%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17" : : "r" (r14), "r" (r15), "r" (r16), "r" (r17), "r" (r18), "r" (r19), "r" (r20), "r" (r21), "r" (r22), "r" (r23), "r" (r24), "r" (r25), "r" (r26), "r" (r27), "r" (r28), "r" (r29), "r" (r30), "r" (r31))
38 #define USE_ALL_FPR __asm__ __volatile__ ("#%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17" : : "f" (fr14), "f" (fr15), "f" (fr16), "f" (fr17), "f" (fr18), "f" (fr19), "f" (fr20), "f" (fr21), "f" (fr22), "f" (fr23), "f" (fr24), "f" (fr25), "f" (fr26), "f" (fr27), "f" (fr28), "f" (fr29), "f" (fr30), "f" (fr31))
39 #define USE_ALL_VR __asm__ __volatile__ ("#%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11" : : "v" (v20), "v" (v21), "v" (v22), "v" (v23), "v" (v24), "v" (v25), "v" (v26), "v" (v27), "v" (v28), "v" (v29), "v" (v30), "v" (v31))
40 #define USE_ALL_CR
41 
42 #define INIT_GPR SET_GPR (r14, 14); SET_GPR (r15, 15); SET_GPR (r16, 16); SET_GPR (r17, 17); SET_GPR (r18, 18); SET_GPR (r19, 19); SET_GPR (r20, 20); SET_GPR (r21, 21); SET_GPR (r22, 22); SET_GPR (r23, 23); SET_GPR (r24, 24); SET_GPR (r25, 25); SET_GPR (r26, 26); SET_GPR (r27, 27); SET_GPR (r28, 28); SET_GPR (r29, 29); SET_GPR (r30, 30); SET_GPR (r31, 31)
43 #define INIT_FPR SET_FPR (fr14, 140.0); SET_FPR (fr15, 150.0); SET_FPR (fr16, 160.0); SET_FPR (fr17, 170.0); SET_FPR (fr18, 180.0); SET_FPR (fr19, 190.0); SET_FPR (fr20, 200.0); SET_FPR (fr21, 210.0); SET_FPR (fr22, 220.0); SET_FPR (fr23, 230.0); SET_FPR (fr24, 240.0); SET_FPR (fr25, 250.0); SET_FPR (fr26, 260.0); SET_FPR (fr27, 270.0); SET_FPR (fr28, 280.0); SET_FPR (fr29, 290.0); SET_FPR (fr30, 300.0); SET_FPR (fr31, 310.0)
44 #define INIT_VR SET_VR (v20, val20); SET_VR (v21, val21); SET_VR (v22, val22); SET_VR (v23, val23); SET_VR (v24, val24); SET_VR (v25, val25); SET_VR (v26, val26); SET_VR (v27, val27); SET_VR (v28, val28); SET_VR (v29, val29); SET_VR (v30, val30); SET_VR (v31, val31)
45 #define INIT_CR SET_CR (2, 6); SET_CR (3, 7); SET_CR (4, 8)
46 #ifdef __ALTIVEC__
47 __attribute__ ((vector_size (16))) int val0 = {0,0,0,0};
48 __attribute__ ((vector_size (16))) int val20 = {-201,-202,-203,-204};
49 __attribute__ ((vector_size (16))) int val21 = {-211,-212,-213,-214};
50 __attribute__ ((vector_size (16))) int val22 = {-221,-222,-223,-224};
51 __attribute__ ((vector_size (16))) int val23 = {-231,-232,-233,-234};
52 __attribute__ ((vector_size (16))) int val24 = {-241,-242,-243,-244};
53 __attribute__ ((vector_size (16))) int val25 = {-251,-252,-253,-254};
54 __attribute__ ((vector_size (16))) int val26 = {-261,-262,-263,-264};
55 __attribute__ ((vector_size (16))) int val27 = {-271,-272,-273,-274};
56 __attribute__ ((vector_size (16))) int val28 = {-281,-282,-283,-284};
57 __attribute__ ((vector_size (16))) int val29 = {-291,-292,-293,-294};
58 __attribute__ ((vector_size (16))) int val30 = {-301,-302,-303,-304};
59 __attribute__ ((vector_size (16))) int val31 = {-311,-312,-313,-314};
60 #define INIT_REGS INIT_VR; INIT_FPR; INIT_GPR; INIT_CR
61 #else
62 #ifndef __NO_FPRS__
63 #define INIT_REGS INIT_FPR; INIT_GPR; INIT_CR
64 #else
65 #define INIT_REGS INIT_GPR; INIT_CR
66 #endif
67 #endif
68 #define VERIFY_GPR if (r14 != 14 || r15 != 15 || r16 != 16 || r17 != 17 || r18 != 18 || r19 != 19 || r20 != 20 || r21 != 21 || r22 != 22 || r23 != 23 || r24 != 24 || r25 != 25 || r26 != 26 || r27 != 27 || r28 != 28 || r29 != 29 || r30 != 30 || r31 != 31) abort ()
69 #define VERIFY_FPR if (fr14 != 140.0 || fr15 != 150.0 || fr16 != 160.0 || fr17 != 170.0 || fr18 != 180.0 || fr19 != 190.0 || fr20 != 200.0 || fr21 != 210.0 || fr22 != 220.0 || fr23 != 230.0 || fr24 != 240.0 || fr25 != 250.0 || fr26 != 260.0 || fr27 != 270.0 || fr28 != 280.0 || fr29 != 290.0 || fr30 != 300.0 || fr31 != 310.0) abort ()
70 #define VERIFY_VR if (!vec_all_eq (v20, val20) || !vec_all_eq (v21, val21) || !vec_all_eq (v22, val22) || !vec_all_eq (v23, val23) || !vec_all_eq (v24, val24) || !vec_all_eq (v25, val25) || !vec_all_eq (v26, val26) || !vec_all_eq (v27, val27) || !vec_all_eq (v28, val28) || !vec_all_eq (v29, val29) || !vec_all_eq (v30, val30) || !vec_all_eq (v31, val31)) abort ()
71 #define VERIFY_CR ({ int tmp; __asm__ __volatile__ ("mfcr %0" : "=r" (tmp)); if ((tmp & ((15 << 20) | (15 << 16) | (15 << 12))) != ((6 << 20) | (7 << 16) | (8 << 12))) abort (); })
72 #ifdef __ALTIVEC__
73 #define VERIFY_REGS VERIFY_VR; VERIFY_FPR; VERIFY_GPR; VERIFY_CR
74 #else
75 #ifndef __NO_FPRS__
76 #define VERIFY_REGS VERIFY_FPR; VERIFY_GPR; VERIFY_CR
77 #else
78 #define VERIFY_REGS VERIFY_GPR; VERIFY_CR
79 #endif
80 #endif
81 
82 #else /* NO_BODY */
83 /* For looking at prologue and epilogue code without distractions.  */
84 #define abort()
85 #define TRASH_ALL_CR
86 #define TRASH_ALL_VR
87 #define TRASH_ALL_FPR
88 #define TRASH_ALL_GPR
89 #define USE_ALL_CR
90 #define USE_ALL_VR
91 #define USE_ALL_FPR
92 #define USE_ALL_GPR
93 #define TRASH_SOME_CR
94 #define TRASH_SOME_VR
95 #define TRASH_SOME_FPR
96 #define TRASH_SOME_GPR
97 #define USE_SOME_CR
98 #define USE_SOME_VR
99 #define USE_SOME_FPR
100 #define USE_SOME_GPR
101 #define INIT_REGS
102 #define VERIFY_REGS
103 #endif
104 
105 #ifdef __ALTIVEC__
106 #ifndef __NO_FPRS__
b_all(void)107 void b_all (void)
108 {
109   char a[33000];
110   TRASH_ALL_CR;
111   TRASH_ALL_VR;
112   TRASH_ALL_FPR;
113   TRASH_ALL_GPR;
114   USE_ALL_CR;
115   USE_ALL_VR;
116   USE_ALL_FPR;
117   USE_ALL_GPR;
118   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "cr3", "cr4", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "fr14", "fr15", "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23", "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31");
119 }
120 
b_cvfr(void)121 void b_cvfr (void)
122 {
123   char a[33000];
124   TRASH_SOME_CR;
125   TRASH_SOME_VR;
126   TRASH_SOME_FPR;
127   TRASH_SOME_GPR;
128   USE_SOME_CR;
129   USE_SOME_VR;
130   USE_SOME_FPR;
131   USE_SOME_GPR;
132   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
133 }
134 
b_vfr(void)135 void b_vfr (void)
136 {
137   char a[33000];
138   TRASH_SOME_VR;
139   TRASH_SOME_FPR;
140   TRASH_SOME_GPR;
141   USE_SOME_VR;
142   USE_SOME_FPR;
143   USE_SOME_GPR;
144   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
145 }
146 
b_cvf(void)147 void b_cvf (void)
148 {
149   char a[33000];
150   TRASH_SOME_CR;
151   TRASH_SOME_VR;
152   TRASH_SOME_FPR;
153   USE_SOME_CR;
154   USE_SOME_VR;
155   USE_SOME_FPR;
156   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "fr28", "fr31");
157 }
158 
b_vf(void)159 void b_vf (void)
160 {
161   char a[33000];
162   TRASH_SOME_VR;
163   TRASH_SOME_FPR;
164   USE_SOME_VR;
165   USE_SOME_FPR;
166   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "fr28", "fr31");
167 }
168 #endif
169 
b_cvr(void)170 void b_cvr (void)
171 {
172   char a[33000];
173   TRASH_SOME_CR;
174   TRASH_SOME_VR;
175   TRASH_SOME_GPR;
176   USE_SOME_CR;
177   USE_SOME_VR;
178   USE_SOME_GPR;
179   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "r30", "r31");
180 }
181 
b_vr(void)182 void b_vr (void)
183 {
184   char a[33000];
185   TRASH_SOME_VR;
186   TRASH_SOME_GPR;
187   USE_SOME_VR;
188   USE_SOME_GPR;
189   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "r30", "r31");
190 }
191 
b_cv(void)192 void b_cv (void)
193 {
194   char a[33000];
195   TRASH_SOME_CR;
196   TRASH_SOME_VR;
197   USE_SOME_CR;
198   USE_SOME_VR;
199   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31");
200 }
201 
b_v(void)202 void b_v (void)
203 {
204   char a[33000];
205   TRASH_SOME_VR;
206   USE_SOME_VR;
207   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31");
208 }
209 #endif
210 
211 #ifndef __NO_FPRS__
b_cfr(void)212 void b_cfr (void)
213 {
214   char a[33000];
215   TRASH_SOME_CR;
216   TRASH_SOME_FPR;
217   TRASH_SOME_GPR;
218   USE_SOME_CR;
219   USE_SOME_FPR;
220   USE_SOME_GPR;
221   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "fr28", "fr31", "r30", "r31");
222 }
223 
b_fr(void)224 void b_fr (void)
225 {
226   char a[33000];
227   TRASH_SOME_FPR;
228   TRASH_SOME_GPR;
229   USE_SOME_FPR;
230   USE_SOME_GPR;
231   __asm __volatile ("#%0" : "=m" (a) : : "fr28", "fr31", "r30", "r31");
232 }
233 
b_cf(void)234 void b_cf (void)
235 {
236   char a[33000];
237   TRASH_SOME_CR;
238   TRASH_SOME_FPR;
239   USE_SOME_CR;
240   USE_SOME_FPR;
241   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "fr28", "fr31");
242 }
243 
b_f(void)244 void b_f (void)
245 {
246   char a[33000];
247   TRASH_SOME_FPR;
248   USE_SOME_FPR;
249   __asm __volatile ("#%0" : "=m" (a) : : "fr28", "fr31");
250 }
251 #endif
252 
b_cr(void)253 void b_cr (void)
254 {
255   char a[33000];
256   TRASH_SOME_CR;
257   TRASH_SOME_GPR;
258   USE_SOME_CR;
259   USE_SOME_GPR;
260   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "r30", "r31");
261 }
262 
b_r(void)263 void b_r (void)
264 {
265   char a[33000];
266   TRASH_SOME_GPR;
267   USE_SOME_GPR;
268   __asm __volatile ("#%0" : "=m" (a) : : "r30", "r31");
269 }
270 
b_c(void)271 void b_c (void)
272 {
273   char a[33000];
274   TRASH_SOME_CR;
275   USE_SOME_CR;
276   __asm __volatile ("#%0" : "=m" (a) : : "cr2");
277 }
278 
b_0(void)279 void b_0 (void)
280 {
281   char a[33000];
282   __asm __volatile ("#%0" : "=m" (a) );
283 }
284 
285 #ifdef __ALTIVEC__
286 #ifndef __NO_FPRS__
s_all(void)287 void s_all (void)
288 {
289   char a[33];
290   TRASH_ALL_CR;
291   TRASH_ALL_VR;
292   TRASH_ALL_FPR;
293   TRASH_ALL_GPR;
294   USE_ALL_CR;
295   USE_ALL_VR;
296   USE_ALL_FPR;
297   USE_ALL_GPR;
298   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "cr3", "cr4", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "fr14", "fr15", "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23", "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31");
299 }
300 
s_cvfr(void)301 void s_cvfr (void)
302 {
303   char a[33];
304   TRASH_SOME_CR;
305   TRASH_SOME_VR;
306   TRASH_SOME_FPR;
307   TRASH_SOME_GPR;
308   USE_SOME_CR;
309   USE_SOME_VR;
310   USE_SOME_FPR;
311   USE_SOME_GPR;
312   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
313 }
314 
s_vfr(void)315 void s_vfr (void)
316 {
317   char a[33];
318   TRASH_SOME_VR;
319   TRASH_SOME_FPR;
320   TRASH_SOME_GPR;
321   USE_SOME_VR;
322   USE_SOME_FPR;
323   USE_SOME_GPR;
324   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
325 }
326 
s_cvf(void)327 void s_cvf (void)
328 {
329   char a[33];
330   TRASH_SOME_CR;
331   TRASH_SOME_VR;
332   TRASH_SOME_FPR;
333   USE_SOME_CR;
334   USE_SOME_VR;
335   USE_SOME_FPR;
336   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "fr28", "fr31");
337 }
338 
s_vf(void)339 void s_vf (void)
340 {
341   char a[33];
342   TRASH_SOME_VR;
343   TRASH_SOME_FPR;
344   USE_SOME_VR;
345   USE_SOME_FPR;
346   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "fr28", "fr31");
347 }
348 #endif
349 
s_cvr(void)350 void s_cvr (void)
351 {
352   char a[33];
353   TRASH_SOME_CR;
354   TRASH_SOME_VR;
355   TRASH_SOME_GPR;
356   USE_SOME_CR;
357   USE_SOME_VR;
358   USE_SOME_GPR;
359   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31", "r30", "r31");
360 }
361 
s_vr(void)362 void s_vr (void)
363 {
364   char a[33];
365   TRASH_SOME_VR;
366   TRASH_SOME_GPR;
367   USE_SOME_VR;
368   USE_SOME_GPR;
369   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31", "r30", "r31");
370 }
371 
s_cv(void)372 void s_cv (void)
373 {
374   char a[33];
375   TRASH_SOME_CR;
376   TRASH_SOME_VR;
377   USE_SOME_CR;
378   USE_SOME_VR;
379   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "v26", "v27", "v31");
380 }
381 
s_v(void)382 void s_v (void)
383 {
384   char a[33];
385   TRASH_SOME_VR;
386   USE_SOME_VR;
387   __asm __volatile ("#%0" : "=m" (a) : : "v26", "v27", "v31");
388 }
389 #endif
390 
391 #ifndef __NO_FPRS__
s_cfr(void)392 void s_cfr (void)
393 {
394   char a[33];
395   TRASH_SOME_CR;
396   TRASH_SOME_FPR;
397   TRASH_SOME_GPR;
398   USE_SOME_CR;
399   USE_SOME_FPR;
400   USE_SOME_GPR;
401   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "fr28", "fr31", "r30", "r31");
402 }
403 
s_fr(void)404 void s_fr (void)
405 {
406   char a[33];
407   TRASH_SOME_FPR;
408   TRASH_SOME_GPR;
409   USE_SOME_FPR;
410   USE_SOME_GPR;
411   __asm __volatile ("#%0" : "=m" (a) : : "fr28", "fr31", "r30", "r31");
412 }
413 
s_cf(void)414 void s_cf (void)
415 {
416   char a[33];
417   TRASH_SOME_CR;
418   TRASH_SOME_FPR;
419   USE_SOME_CR;
420   USE_SOME_FPR;
421   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "fr28", "fr31");
422 }
423 
s_f(void)424 void s_f (void)
425 {
426   char a[33];
427   TRASH_SOME_FPR;
428   USE_SOME_FPR;
429   __asm __volatile ("#%0" : "=m" (a) : : "fr28", "fr31");
430 }
431 #endif
432 
s_cr(void)433 void s_cr (void)
434 {
435   char a[33];
436   TRASH_SOME_CR;
437   TRASH_SOME_GPR;
438   USE_SOME_CR;
439   USE_SOME_GPR;
440   __asm __volatile ("#%0" : "=m" (a) : : "cr2", "r30", "r31");
441 }
442 
s_r(void)443 void s_r (void)
444 {
445   char a[33];
446   TRASH_SOME_GPR;
447   USE_SOME_GPR;
448   __asm __volatile ("#%0" : "=m" (a) : : "r30", "r31");
449 }
450 
s_r31(void)451 void s_r31 (void)
452 {
453   char a[33];
454 #ifndef NO_BODY
455   TRASH_GPR (r31);
456   __asm__ __volatile__ ("#%0" : : "r" (r31));
457 #endif
458   __asm __volatile ("#%0" : "=m" (a) : : "r31");
459 }
460 
s_c(void)461 void s_c (void)
462 {
463   char a[33];
464   TRASH_SOME_CR;
465   USE_SOME_CR;
466   __asm __volatile ("#%0" : "=m" (a) : : "cr2");
467 }
468 
s_0(void)469 void s_0 (void)
470 {
471   char a[33];
472   __asm __volatile ("#%0" : "=m" (a) );
473 }
474 
475 #ifdef __ALTIVEC__
476 #ifndef __NO_FPRS__
wb_all(void)477 void wb_all (void)
478 {
479   char b[10];
480   char *nb_all (void)
481   {
482     char a[33000];
483     TRASH_ALL_CR;
484     TRASH_ALL_VR;
485     TRASH_ALL_FPR;
486     TRASH_ALL_GPR;
487     USE_ALL_CR;
488     USE_ALL_VR;
489     USE_ALL_FPR;
490     USE_ALL_GPR;
491     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "cr3", "cr4", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "fr14", "fr15", "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23", "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31");
492     return b;
493   }
494   if (nb_all() != b)
495     abort ();
496 }
497 
wb_cvfr(void)498 void wb_cvfr (void)
499 {
500   char b[10];
501   char *nb_cvfr (void)
502   {
503     char a[33000];
504     TRASH_SOME_CR;
505     TRASH_SOME_VR;
506     TRASH_SOME_FPR;
507     TRASH_SOME_GPR;
508     USE_SOME_CR;
509     USE_SOME_VR;
510     USE_SOME_FPR;
511     USE_SOME_GPR;
512     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
513     return b;
514   }
515   if (nb_cvfr () != b)
516     abort ();
517 }
518 
wb_vfr(void)519 void wb_vfr (void)
520 {
521   char b[10];
522   char *nb_vfr (void)
523   {
524     char a[33000];
525     TRASH_SOME_VR;
526     TRASH_SOME_FPR;
527     TRASH_SOME_GPR;
528     USE_SOME_VR;
529     USE_SOME_FPR;
530     USE_SOME_GPR;
531     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
532     return b;
533   }
534   if (nb_vfr () != b)
535     abort ();
536 }
537 
wb_cvf(void)538 void wb_cvf (void)
539 {
540   char b[10];
541   char *nb_cvf (void)
542   {
543     char a[33000];
544     TRASH_SOME_CR;
545     TRASH_SOME_VR;
546     TRASH_SOME_FPR;
547     USE_SOME_CR;
548     USE_SOME_VR;
549     USE_SOME_FPR;
550     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "fr28", "fr31");
551     return b;
552   }
553   if (nb_cvf () != b)
554     abort ();
555 }
556 
wb_vf(void)557 void wb_vf (void)
558 {
559   char b[10];
560   char *nb_vf (void)
561   {
562     char a[33000];
563     TRASH_SOME_VR;
564     TRASH_SOME_FPR;
565     USE_SOME_VR;
566     USE_SOME_FPR;
567     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "fr28", "fr31");
568     return b;
569   }
570   if (nb_vf () != b)
571     abort ();
572 }
573 #endif
574 
wb_cvr(void)575 void wb_cvr (void)
576 {
577   char b[10];
578   char *nb_cvr (void)
579   {
580     char a[33000];
581     TRASH_SOME_CR;
582     TRASH_SOME_VR;
583     TRASH_SOME_GPR;
584     USE_SOME_CR;
585     USE_SOME_VR;
586     USE_SOME_GPR;
587     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "r30", "r31");
588     return b;
589   }
590   if (nb_cvr () != b)
591     abort ();
592 }
593 
wb_vr(void)594 void wb_vr (void)
595 {
596   char b[10];
597   char *nb_vr (void)
598   {
599     char a[33000];
600     TRASH_SOME_VR;
601     TRASH_SOME_GPR;
602     USE_SOME_VR;
603     USE_SOME_GPR;
604     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "r30", "r31");
605     return b;
606   }
607   if (nb_vr () != b)
608     abort ();
609 }
610 
wb_cv(void)611 void wb_cv (void)
612 {
613   char b[10];
614   char *nb_cv (void)
615   {
616     char a[33000];
617     TRASH_SOME_CR;
618     TRASH_SOME_VR;
619     USE_SOME_CR;
620     USE_SOME_VR;
621     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31");
622     return b;
623   }
624   if (nb_cv () != b)
625     abort ();
626 }
627 
wb_v(void)628 void wb_v (void)
629 {
630   char b[10];
631   char *nb_v (void)
632   {
633     char a[33000];
634     TRASH_SOME_VR;
635     USE_SOME_VR;
636     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31");
637     return b;
638   }
639   if (nb_v () != b)
640     abort ();
641 }
642 #endif
643 
644 #ifndef __NO_FPRS__
wb_cfr(void)645 void wb_cfr (void)
646 {
647   char b[10];
648   char *nb_cfr (void)
649   {
650     char a[33000];
651     TRASH_SOME_CR;
652     TRASH_SOME_FPR;
653     TRASH_SOME_GPR;
654     USE_SOME_CR;
655     USE_SOME_FPR;
656     USE_SOME_GPR;
657     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "fr28", "fr31", "r30", "r31");
658     return b;
659   }
660   if (nb_cfr () != b)
661     abort ();
662 }
663 
wb_fr(void)664 void wb_fr (void)
665 {
666   char b[10];
667   char *nb_fr (void)
668   {
669     char a[33000];
670     TRASH_SOME_FPR;
671     TRASH_SOME_GPR;
672     USE_SOME_FPR;
673     USE_SOME_GPR;
674     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "fr28", "fr31", "r30", "r31");
675     return b;
676   }
677   if (nb_fr () != b)
678     abort ();
679 }
680 
wb_cf(void)681 void wb_cf (void)
682 {
683   char b[10];
684   char *nb_cf (void)
685   {
686     char a[33000];
687     TRASH_SOME_CR;
688     TRASH_SOME_FPR;
689     USE_SOME_CR;
690     USE_SOME_FPR;
691     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "fr28", "fr31");
692     return b;
693   }
694   if (nb_cf () != b)
695     abort ();
696 }
697 
wb_f(void)698 void wb_f (void)
699 {
700   char b[10];
701   char *nb_f (void)
702   {
703     char a[33000];
704     TRASH_SOME_FPR;
705     USE_SOME_FPR;
706     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "fr28", "fr31");
707     return b;
708   }
709   if (nb_f () != b)
710     abort ();
711 }
712 #endif
713 
wb_cr(void)714 void wb_cr (void)
715 {
716   char b[10];
717   char *nb_cr (void)
718   {
719     char a[33000];
720     TRASH_SOME_CR;
721     TRASH_SOME_GPR;
722     USE_SOME_CR;
723     USE_SOME_GPR;
724     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "r30", "r31");
725     return b;
726   }
727   if (nb_cr () != b)
728     abort ();
729 }
730 
wb_r(void)731 void wb_r (void)
732 {
733   char b[10];
734   char *nb_r (void)
735   {
736     char a[33000];
737     TRASH_SOME_GPR;
738     USE_SOME_GPR;
739     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "r30", "r31");
740     return b;
741   }
742   if (nb_r () != b)
743     abort ();
744 }
745 
wb_c(void)746 void wb_c (void)
747 {
748   char b[10];
749   char *nb_c (void)
750   {
751     char a[33000];
752     TRASH_SOME_CR;
753     USE_SOME_CR;
754     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2");
755     return b;
756   }
757   if (nb_c () != b)
758     abort ();
759 }
760 
wb_0(void)761 void wb_0 (void)
762 {
763   char b[10];
764   char *nb_0 (void)
765   {
766     char a[33000];
767     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) );
768     return b;
769   }
770   if (nb_0 () != b)
771     abort ();
772 }
773 
774 #ifdef __ALTIVEC__
775 #ifndef __NO_FPRS__
ws_all(void)776 void ws_all (void)
777 {
778   char b[10];
779   char *ns_all (void)
780   {
781     char a[33];
782     TRASH_ALL_CR;
783     TRASH_ALL_VR;
784     TRASH_ALL_FPR;
785     TRASH_ALL_GPR;
786     USE_ALL_CR;
787     USE_ALL_VR;
788     USE_ALL_FPR;
789     USE_ALL_GPR;
790     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "cr3", "cr4", "v20", "v21", "v22", "v23", "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", "fr14", "fr15", "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23", "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31", "r14", "r15", "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31");
791     return b;
792   }
793   if (ns_all() != b)
794     abort ();
795 }
796 
ws_cvfr(void)797 void ws_cvfr (void)
798 {
799   char b[10];
800   char *ns_cvfr (void)
801   {
802     char a[33];
803     TRASH_SOME_CR;
804     TRASH_SOME_VR;
805     TRASH_SOME_FPR;
806     TRASH_SOME_GPR;
807     USE_SOME_CR;
808     USE_SOME_VR;
809     USE_SOME_FPR;
810     USE_SOME_GPR;
811     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
812     return b;
813   }
814   if (ns_cvfr () != b)
815     abort ();
816 }
817 
ws_vfr(void)818 void ws_vfr (void)
819 {
820   char b[10];
821   char *ns_vfr (void)
822   {
823     char a[33];
824     TRASH_SOME_VR;
825     TRASH_SOME_FPR;
826     TRASH_SOME_GPR;
827     USE_SOME_VR;
828     USE_SOME_FPR;
829     USE_SOME_GPR;
830     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "fr28", "fr31", "r30", "r31");
831     return b;
832   }
833   if (ns_vfr () != b)
834     abort ();
835 }
836 
ws_cvf(void)837 void ws_cvf (void)
838 {
839   char b[10];
840   char *ns_cvf (void)
841   {
842     char a[33];
843     TRASH_SOME_CR;
844     TRASH_SOME_VR;
845     TRASH_SOME_FPR;
846     USE_SOME_CR;
847     USE_SOME_VR;
848     USE_SOME_FPR;
849     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "fr28", "fr31");
850     return b;
851   }
852   if (ns_cvf () != b)
853     abort ();
854 }
855 
ws_vf(void)856 void ws_vf (void)
857 {
858   char b[10];
859   char *ns_vf (void)
860   {
861     char a[33];
862     TRASH_SOME_VR;
863     TRASH_SOME_FPR;
864     USE_SOME_VR;
865     USE_SOME_FPR;
866     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "fr28", "fr31");
867     return b;
868   }
869   if (ns_vf () != b)
870     abort ();
871 }
872 #endif
873 
ws_cvr(void)874 void ws_cvr (void)
875 {
876   char b[10];
877   char *ns_cvr (void)
878   {
879     char a[33];
880     TRASH_SOME_CR;
881     TRASH_SOME_VR;
882     TRASH_SOME_GPR;
883     USE_SOME_CR;
884     USE_SOME_VR;
885     USE_SOME_GPR;
886     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31", "r30", "r31");
887     return b;
888   }
889   if (ns_cvr () != b)
890     abort ();
891 }
892 
ws_vr(void)893 void ws_vr (void)
894 {
895   char b[10];
896   char *ns_vr (void)
897   {
898     char a[33];
899     TRASH_SOME_VR;
900     TRASH_SOME_FPR;
901     USE_SOME_VR;
902     USE_SOME_FPR;
903     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31", "r30", "r31");
904     return b;
905   }
906   if (ns_vr () != b)
907     abort ();
908 }
909 
ws_cv(void)910 void ws_cv (void)
911 {
912   char b[10];
913   char *ns_cv (void)
914   {
915     char a[33];
916     TRASH_SOME_CR;
917     TRASH_SOME_VR;
918     USE_SOME_CR;
919     USE_SOME_VR;
920     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "v26", "v27", "v31");
921     return b;
922   }
923   if (ns_cv () != b)
924     abort ();
925 }
926 
ws_v(void)927 void ws_v (void)
928 {
929   char b[10];
930   char *ns_v (void)
931   {
932     char a[33];
933     TRASH_SOME_VR;
934     USE_SOME_VR;
935     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "v26", "v27", "v31");
936     return b;
937   }
938   if (ns_v () != b)
939     abort ();
940 }
941 #endif
942 
943 #ifndef __NO_FPRS__
ws_cfr(void)944 void ws_cfr (void)
945 {
946   char b[10];
947   char *ns_cfr (void)
948   {
949     char a[33];
950     TRASH_SOME_CR;
951     TRASH_SOME_FPR;
952     TRASH_SOME_GPR;
953     USE_SOME_CR;
954     USE_SOME_FPR;
955     USE_SOME_GPR;
956     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "fr28", "fr31", "r30", "r31");
957     return b;
958   }
959   if (ns_cfr () != b)
960     abort ();
961 }
962 
ws_fr(void)963 void ws_fr (void)
964 {
965   char b[10];
966   char *ns_fr (void)
967   {
968     char a[33];
969     TRASH_SOME_FPR;
970     TRASH_SOME_GPR;
971     USE_SOME_FPR;
972     USE_SOME_GPR;
973     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "fr28", "fr31", "r30", "r31");
974     return b;
975   }
976   if (ns_fr () != b)
977     abort ();
978 }
979 
ws_cf(void)980 void ws_cf (void)
981 {
982   char b[10];
983   char *ns_cf (void)
984   {
985     char a[33];
986     TRASH_SOME_CR;
987     TRASH_SOME_FPR;
988     USE_SOME_CR;
989     USE_SOME_FPR;
990     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "fr28", "fr31");
991     return b;
992   }
993   if (ns_cf () != b)
994     abort ();
995 }
996 
ws_f(void)997 void ws_f (void)
998 {
999   char b[10];
1000   char *ns_f (void)
1001   {
1002     char a[33];
1003     TRASH_SOME_FPR;
1004     USE_SOME_FPR;
1005     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "fr28", "fr31");
1006     return b;
1007   }
1008   if (ns_f () != b)
1009     abort ();
1010 }
1011 #endif
1012 
ws_cr(void)1013 void ws_cr (void)
1014 {
1015   char b[10];
1016   char *ns_cr (void)
1017   {
1018     char a[33];
1019     TRASH_SOME_CR;
1020     TRASH_SOME_GPR;
1021     USE_SOME_CR;
1022     USE_SOME_GPR;
1023     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2", "r30", "r31");
1024     return b;
1025   }
1026   if (ns_cr () != b)
1027     abort ();
1028 }
1029 
ws_r(void)1030 void ws_r (void)
1031 {
1032   char b[10];
1033   char *ns_r (void)
1034   {
1035     char a[33];
1036     TRASH_SOME_GPR;
1037     USE_SOME_GPR;
1038     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "r30", "r31");
1039     return b;
1040   }
1041   if (ns_r () != b)
1042     abort ();
1043 }
1044 
ws_c(void)1045 void ws_c (void)
1046 {
1047   char b[10];
1048   char *ns_c (void)
1049   {
1050     char a[33];
1051     TRASH_SOME_CR;
1052     USE_SOME_CR;
1053     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) : : "cr2");
1054     return b;
1055   }
1056   if (ns_c () != b)
1057     abort ();
1058 }
1059 
ws_0(void)1060 void ws_0 (void)
1061 {
1062   char b[10];
1063   char *ns_0 (void)
1064   {
1065     char a[33];
1066     __asm __volatile ("#%0 %1" : "=m" (a), "=m" (b) );
1067     return b;
1068   }
1069   if (ns_0 () != b)
1070     abort ();
1071 }
1072 
1073 /* We'd like to compile main with
1074    __attribute__ ((__optimize__ ("fixed-cr2,fixed-cr3,fixed-cr4")))
1075    but that doesn't do anything currently.  Obviously we don't want to
1076    compile the whole file with -ffixed-cr2 -ffixed-cr3 -ffixed-cr4 as
1077    that would also tell gcc not to save/restore cr, and we're trying
1078    to check that the above functions do save/restore cr.
1079    __attribute__ ((__optimize__ ("no-rename-registers,omit-frame-pointer")))
1080    works, but it seems odd to need omit-frame-pointer and raises the
1081    question of whether darwin would need -mdynamic-no-pic.
1082    So for now use -fno-rename-registers over the whole test.  */
1083 int
main(void)1084 main (void)
1085 {
1086   INIT_REGS;
1087   USE_ALL_CR;
1088 #ifdef __ALTIVEC__
1089   USE_ALL_VR;
1090 #ifndef __NO_FPRS__
1091   USE_ALL_FPR;
1092 #endif
1093 #endif
1094   USE_ALL_GPR;
1095 #ifdef __ALTIVEC__
1096 #ifndef __NO_FPRS__
1097   b_all ();
1098   VERIFY_REGS;
1099   b_cvfr ();
1100   VERIFY_REGS;
1101   b_vfr ();
1102   VERIFY_REGS;
1103   b_cvf ();
1104   VERIFY_REGS;
1105   b_vf ();
1106   VERIFY_REGS;
1107 #endif
1108   b_cvr ();
1109   VERIFY_REGS;
1110   b_vr ();
1111   VERIFY_REGS;
1112   b_cv ();
1113   VERIFY_REGS;
1114   b_v ();
1115   VERIFY_REGS;
1116 #endif
1117 #ifndef __NO_FPRS__
1118   b_cfr ();
1119   VERIFY_REGS;
1120   b_fr ();
1121   VERIFY_REGS;
1122   b_cf ();
1123   VERIFY_REGS;
1124   b_f ();
1125   VERIFY_REGS;
1126 #endif
1127   b_cr ();
1128   VERIFY_REGS;
1129   b_r ();
1130   VERIFY_REGS;
1131   b_c ();
1132   VERIFY_REGS;
1133   b_0 ();
1134   VERIFY_REGS;
1135 #ifdef __ALTIVEC__
1136 #ifndef __NO_FPRS__
1137   s_all ();
1138   VERIFY_REGS;
1139   s_cvfr ();
1140   VERIFY_REGS;
1141   s_vfr ();
1142   VERIFY_REGS;
1143   s_cvf ();
1144   VERIFY_REGS;
1145   s_vf ();
1146   VERIFY_REGS;
1147 #endif
1148   s_cvr ();
1149   VERIFY_REGS;
1150   s_vr ();
1151   VERIFY_REGS;
1152   s_cv ();
1153   VERIFY_REGS;
1154   s_v ();
1155   VERIFY_REGS;
1156 #endif
1157 #ifndef __NO_FPRS__
1158   s_cfr ();
1159   VERIFY_REGS;
1160   s_fr ();
1161   VERIFY_REGS;
1162   s_cf ();
1163   VERIFY_REGS;
1164   s_f ();
1165   VERIFY_REGS;
1166 #endif
1167   s_cr ();
1168   VERIFY_REGS;
1169   s_r ();
1170   VERIFY_REGS;
1171   s_r31 ();
1172   VERIFY_REGS;
1173   s_c ();
1174   VERIFY_REGS;
1175   s_0 ();
1176   VERIFY_REGS;
1177 #ifdef __ALTIVEC__
1178 #ifndef __NO_FPRS__
1179   wb_all ();
1180   VERIFY_REGS;
1181   wb_cvfr ();
1182   VERIFY_REGS;
1183   wb_vfr ();
1184   VERIFY_REGS;
1185   wb_cvf ();
1186   VERIFY_REGS;
1187   wb_vf ();
1188   VERIFY_REGS;
1189 #endif
1190   wb_cvr ();
1191   VERIFY_REGS;
1192   wb_vr ();
1193   VERIFY_REGS;
1194   wb_cv ();
1195   VERIFY_REGS;
1196   wb_v ();
1197   VERIFY_REGS;
1198 #endif
1199 #ifndef __NO_FPRS__
1200   wb_cfr ();
1201   VERIFY_REGS;
1202   wb_fr ();
1203   VERIFY_REGS;
1204   wb_cf ();
1205   VERIFY_REGS;
1206   wb_f ();
1207   VERIFY_REGS;
1208 #endif
1209   wb_cr ();
1210   VERIFY_REGS;
1211   wb_r ();
1212   VERIFY_REGS;
1213   wb_c ();
1214   VERIFY_REGS;
1215   wb_0 ();
1216   VERIFY_REGS;
1217 #ifdef __ALTIVEC__
1218 #ifndef __NO_FPRS__
1219   ws_all ();
1220   VERIFY_REGS;
1221   ws_cvfr ();
1222   VERIFY_REGS;
1223   ws_vfr ();
1224   VERIFY_REGS;
1225   ws_cvf ();
1226   VERIFY_REGS;
1227   ws_vf ();
1228   VERIFY_REGS;
1229 #endif
1230   ws_cvr ();
1231   VERIFY_REGS;
1232   ws_vr ();
1233   VERIFY_REGS;
1234   ws_cv ();
1235   VERIFY_REGS;
1236   ws_v ();
1237   VERIFY_REGS;
1238 #endif
1239 #ifndef __NO_FPRS__
1240   ws_cfr ();
1241   VERIFY_REGS;
1242   ws_fr ();
1243   VERIFY_REGS;
1244   ws_cf ();
1245   VERIFY_REGS;
1246   ws_f ();
1247   VERIFY_REGS;
1248 #endif
1249   ws_cr ();
1250   VERIFY_REGS;
1251   ws_r ();
1252   VERIFY_REGS;
1253   ws_c ();
1254   VERIFY_REGS;
1255   ws_0 ();
1256   VERIFY_REGS;
1257   return 0;
1258 }
1259