Bug 480126 - Build failure on Raspberry Pi 5 / OS 6.1.0-rpi7-rpi-v8
[valgrind.git] / memcheck / tests / wrap6.c
blob46eb3c7083faac779f5237c796b0a941d8187aa4
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <assert.h>
5 #include "valgrind.h"
7 /* Program that checks all numbers of args (0 through 12) work for
8 wrapping. Also calls originals which trash all the iregs in an
9 attempt to shake out any problems caused by insufficient saving of
10 caller-save registers around the hidden call instruction. */
12 typedef unsigned int UInt;
14 #define ROL(_x,n) (((_x) << n) | ((UInt)(_x)) >> ((8*sizeof(UInt)-n)))
16 #define TRASH_IREGS(_rlval, _vec) \
17 do { \
18 register UInt* vec = (_vec); \
19 /* x86 spills for v > 4, amd64 for v > 12. Getting ppc */ \
20 /* to spill is quite difficult, requiring v > 28 or so. */ \
21 register UInt i, sum = 0; \
22 register UInt v1 = vec[1-1]; \
23 register UInt v2 = vec[2-1]; \
24 register UInt v3 = vec[3-1]; \
25 register UInt v4 = vec[4-1]; \
26 register UInt v5 = vec[5-1]; \
27 register UInt v6 = vec[6-1]; \
28 register UInt v7 = vec[7-1]; \
29 register UInt v8 = vec[8-1]; \
30 register UInt v9 = vec[9-1]; \
31 register UInt v10 = vec[10-1]; \
32 register UInt v11 = vec[11-1]; \
33 register UInt v12 = vec[12-1]; \
34 register UInt v13 = vec[13-1]; \
35 register UInt v14 = vec[14-1]; \
36 register UInt v15 = vec[15-1]; \
37 register UInt v16 = vec[16-1]; \
38 register UInt v17 = vec[17-1]; \
39 register UInt v18 = vec[18-1]; \
40 register UInt v19 = vec[19-1]; \
41 register UInt v20 = vec[20-1]; \
42 register UInt v21 = vec[21-1]; \
43 register UInt v22 = vec[22-1]; \
44 register UInt v23 = vec[23-1]; \
45 register UInt v24 = vec[24-1]; \
46 register UInt v25 = vec[25-1]; \
47 register UInt v26 = vec[26-1]; \
48 register UInt v27 = vec[27-1]; \
49 register UInt v28 = vec[28-1]; \
50 register UInt v29 = vec[29-1]; \
51 for (i = 0; i < 50; i++) { \
52 v1 = ROL(v1,1); \
53 v2 = ROL(v2,2); \
54 v3 = ROL(v3,3); \
55 v4 = ROL(v4,4); \
56 v5 = ROL(v5,5); \
57 v6 = ROL(v6,6); \
58 v7 = ROL(v7,7); \
59 v8 = ROL(v8,8); \
60 v9 = ROL(v9,9); \
61 v10 = ROL(v10,10); \
62 v11 = ROL(v11,11); \
63 v12 = ROL(v12,12); \
64 v13 = ROL(v13,13); \
65 v14 = ROL(v14,14); \
66 v15 = ROL(v15,15); \
67 v16 = ROL(v16,16); \
68 v17 = ROL(v17,17); \
69 v18 = ROL(v18,18); \
70 v19 = ROL(v19,19); \
71 v20 = ROL(v20,20); \
72 v21 = ROL(v21,21); \
73 v22 = ROL(v22,22); \
74 v23 = ROL(v23,23); \
75 v24 = ROL(v24,24); \
76 v25 = ROL(v25,25); \
77 v26 = ROL(v26,26); \
78 v27 = ROL(v27,27); \
79 v28 = ROL(v28,28); \
80 v29 = ROL(v29,29); \
81 sum ^= ((0xFFF & v1) * i); \
82 sum ^= (v1-v2); \
83 sum ^= (v1-v3); \
84 sum ^= (v1-v4); \
85 sum ^= (v1-v5); \
86 sum ^= (v1-v6); \
87 sum ^= (v1-v7); \
88 sum ^= (v1-v8); \
89 sum ^= (v1-v9); \
90 sum ^= (v1-v10); \
91 sum ^= (v1-v11); \
92 sum ^= (v1-v12); \
93 sum ^= (v1-v13); \
94 sum ^= (v1-v14); \
95 sum ^= (v1-v15); \
96 sum ^= (v1-v16); \
97 sum ^= (v1-v17); \
98 sum ^= (v1-v18); \
99 sum ^= (v1-v19); \
100 sum ^= (v1-v20); \
101 sum ^= (v1-v21); \
102 sum ^= (v1-v22); \
103 sum ^= (v1-v23); \
104 sum ^= (v1-v24); \
105 sum ^= (v1-v25); \
106 sum ^= (v1-v26); \
107 sum ^= (v1-v27); \
108 sum ^= (v1-v28); \
109 sum ^= (v1-v29); \
111 _rlval = sum; \
112 } while (0)
114 #if defined(__clang__)
115 #define ATTRIBUTE_OPTNONE __attribute__((optnone))
116 #else
117 #define ATTRIBUTE_OPTNONE
118 #endif
122 /* Returns one, in a way that gcc probably can't constant fold out */
124 volatile int one_actual_return_value = 0; /* the value one() returns */
126 __attribute__((noinline))
127 int one ( void )
129 int i, sum, a[7];
130 for (i = 0; i < 7; i++)
131 a[i] = i;
132 a[3] = 3+one_actual_return_value;
133 sum = 0;
134 for (i = 7-1; i >= 0; i--)
135 sum += a[i] - i;
136 return sum;
139 #define LOOPS_START \
140 { register int len = one(); \
141 register int x0; for (x0 = 0x1000; x0 < 0x1000+len; x0++) { \
142 register int x1; for (x1 = 0x1100; x1 < 0x1100+len; x1++) { \
143 register int x2; for (x2 = 0x1200; x2 < 0x1200+len; x2++) { \
144 register int x3; for (x3 = 0x1300; x3 < 0x1300+len; x3++) { \
145 register int x4; for (x4 = 0x1400; x4 < 0x1400+len; x4++) { \
146 register int x5; for (x5 = 0x1500; x5 < 0x1500+len; x5++) { \
147 register int x6; for (x6 = 0x1600; x6 < 0x1600+len; x6++) { \
148 register int x7; for (x7 = 0x1700; x7 < 0x1700+len; x7++) { \
149 register int x8; for (x8 = 0x1800; x8 < 0x1800+len; x8++) { \
150 register int x9; for (x9 = 0x1900; x9 < 0x1900+len; x9++) { \
151 register int xA; for (xA = 0x1A00; xA < 0x1A00+len; xA++) { \
152 register int xB; for (xB = 0x1B00; xB < 0x1B00+len; xB++) { \
153 register int xC; for (xC = 0x1C00; xC < 0x1C00+len; xC++) { \
154 register int xD; for (xD = 0x1D00; xD < 0x1D00+len; xD++) { \
155 register int xE; for (xE = 0x1E00; xE < 0x1E00+len; xE++) { \
156 register int xF; for (xF = 0x1F00; xF < 0x1F00+len; xF++) { \
157 /* */
159 #define LOOPS_END \
160 assert(xF >= 0x1F00 && xF <= 0x1F00+len); } \
161 assert(xE >= 0x1E00 && xE <= 0x1E00+len); } \
162 assert(xD >= 0x1D00 && xD <= 0x1D00+len); } \
163 assert(xC >= 0x1C00 && xC <= 0x1C00+len); } \
164 assert(xB >= 0x1B00 && xB <= 0x1B00+len); } \
165 assert(xA >= 0x1A00 && xA <= 0x1A00+len); } \
166 assert(x9 >= 0x1900 && x9 <= 0x1900+len); } \
167 assert(x8 >= 0x1800 && x8 <= 0x1800+len); } \
168 assert(x7 >= 0x1700 && x7 <= 0x1700+len); } \
169 assert(x6 >= 0x1600 && x6 <= 0x1600+len); } \
170 assert(x5 >= 0x1500 && x5 <= 0x1500+len); } \
171 assert(x4 >= 0x1400 && x4 <= 0x1400+len); } \
172 assert(x3 >= 0x1300 && x3 <= 0x1300+len); } \
173 assert(x2 >= 0x1200 && x2 <= 0x1200+len); } \
174 assert(x1 >= 0x1100 && x1 <= 0x1100+len); } \
175 assert(x0 >= 0x1000 && x0 <= 0x1000+len); } \
178 /* General idea is for the wrappers to use LOOPS_START / LOOPS_END to
179 soak up lots of int registers. And the orig fn uses TRASH_IREGS to
180 do the same. If there is insufficient saving of caller-saves regs
181 by the CALL_FN_* macros, then hopefully the assertions in LOOPS_END
182 will fail. */
184 /* --------------- 0 --------------- */
186 ATTRIBUTE_OPTNONE
187 UInt fn_0 ( void )
189 UInt r;
190 UInt* words = calloc(200, sizeof(UInt));
191 TRASH_IREGS(r, words);
192 free(words);
193 return r;
196 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_0) ( UInt a1 )
198 UInt r = 0;
199 OrigFn fn;
200 VALGRIND_GET_ORIG_FN(fn);
201 LOOPS_START
202 printf("fn_0 wrapper pre ()\n");
203 CALL_FN_W_v(r, fn);
204 printf("fn_0 wrapper post1 = %d\n", (int)r);
205 CALL_FN_v_v(fn);
206 printf("fn_0 wrapper post2 = %d\n", (int)r);
207 LOOPS_END
208 return r;
211 /* --------------- 1 --------------- */
213 ATTRIBUTE_OPTNONE
214 UInt fn_1 ( UInt a1 )
216 UInt r;
217 UInt* words = calloc(200, sizeof(UInt));
218 words[1-1] = a1;
219 TRASH_IREGS(r, words);
220 free(words);
221 return r;
224 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_1) ( UInt a1 )
226 UInt r = 0;
227 OrigFn fn;
228 VALGRIND_GET_ORIG_FN(fn);
229 LOOPS_START
230 printf("fn_1 wrapper pre ( %d )\n", (int)a1);
231 CALL_FN_W_W(r, fn, a1);
232 printf("fn_1 wrapper post1 = %d\n", (int)r);
233 CALL_FN_v_W(fn, a1);
234 printf("fn_1 wrapper post2 = %d\n", (int)r);
235 LOOPS_END
236 return r;
239 /* --------------- 2 --------------- */
241 ATTRIBUTE_OPTNONE
242 UInt fn_2 ( UInt a1, UInt a2 )
244 UInt r = 0;
245 UInt* words = calloc(200, sizeof(UInt));
246 words[1-1] = a1;
247 words[2-1] = a2;
248 TRASH_IREGS(r, words);
249 free(words);
250 return r;
253 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_2) ( UInt a1, UInt a2 )
255 UInt r = 0;
256 OrigFn fn;
257 VALGRIND_GET_ORIG_FN(fn);
258 LOOPS_START
259 printf("fn_2 wrapper pre ( %d, %d )\n", (int)a1, (int)a2);
260 CALL_FN_W_WW(r, fn, a1, a2);
261 printf("fn_2 wrapper post1 = %d\n", (int)r);
262 CALL_FN_v_WW(fn, a1, a2);
263 printf("fn_2 wrapper post2 = %d\n", (int)r);
264 LOOPS_END
265 return r;
268 /* --------------- 3 --------------- */
270 ATTRIBUTE_OPTNONE
271 UInt fn_3 ( UInt a1, UInt a2, UInt a3 )
273 UInt r;
274 UInt* words = calloc(200, sizeof(UInt));
275 words[1-1] = a1;
276 words[2-1] = a2;
277 words[3-1] = a3;
278 TRASH_IREGS(r, words);
279 free(words);
280 return r;
283 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_3) ( UInt a1, UInt a2, UInt a3 )
285 UInt r = 0;
286 OrigFn fn;
287 VALGRIND_GET_ORIG_FN(fn);
288 LOOPS_START
289 printf("fn_3 wrapper pre ( %d, %d, %d )\n", (int)a1, (int)a2, (int)a3);
290 CALL_FN_W_WWW(r, fn, a1, a2, a3);
291 printf("fn_3 wrapper post1 = %d\n", (int)r);
292 CALL_FN_v_WWW(fn, a1, a2, a3);
293 printf("fn_3 wrapper post2 = %d\n", (int)r);
294 LOOPS_END
295 return r;
298 /* --------------- 4 --------------- */
300 ATTRIBUTE_OPTNONE
301 UInt fn_4 ( UInt a1, UInt a2, UInt a3, UInt a4 )
303 UInt r;
304 UInt* words = calloc(200, sizeof(UInt));
305 words[1-1] = a1;
306 words[2-1] = a2;
307 words[3-1] = a3;
308 words[4-1] = a4;
309 TRASH_IREGS(r, words);
310 free(words);
311 return r;
314 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_4)
315 ( UInt a1, UInt a2, UInt a3, UInt a4 )
317 UInt r = 0;
318 OrigFn fn;
319 VALGRIND_GET_ORIG_FN(fn);
320 LOOPS_START
321 printf("fn_4 wrapper pre ( %d, %d, %d, %d )\n",
322 (int)a1, (int)a2, (int)a3, (int)a4);
323 CALL_FN_W_WWWW(r, fn, a1, a2, a3, a4);
324 printf("fn_4 wrapper post1 = %d\n", (int)r);
325 LOOPS_END
326 return r;
329 /* --------------- 5 --------------- */
331 ATTRIBUTE_OPTNONE
332 UInt fn_5 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5 )
334 UInt r;
335 UInt* words = calloc(200, sizeof(UInt));
336 words[1-1] = a1;
337 words[2-1] = a2;
338 words[3-1] = a3;
339 words[4-1] = a4;
340 words[5-1] = a5;
341 TRASH_IREGS(r, words);
342 free(words);
343 return r;
346 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_5)
347 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5 )
349 UInt r = 0;
350 OrigFn fn;
351 VALGRIND_GET_ORIG_FN(fn);
352 LOOPS_START
353 printf("fn_5 wrapper pre ( %d, %d, %d, %d, %d )\n",
354 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5);
355 CALL_FN_W_5W(r, fn, a1, a2, a3, a4, a5);
356 printf("fn_5 wrapper post1 = %d\n", (int)r);
357 LOOPS_END
358 return r;
361 /* --------------- 6 --------------- */
363 ATTRIBUTE_OPTNONE
364 UInt fn_6 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6 )
366 UInt r;
367 UInt* words = calloc(200, sizeof(UInt));
368 words[1-1] = a1;
369 words[2-1] = a2;
370 words[3-1] = a3;
371 words[4-1] = a4;
372 words[5-1] = a5;
373 words[6-1] = a6;
374 TRASH_IREGS(r, words);
375 free(words);
376 return r;
379 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_6)
380 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6 )
382 UInt r = 0;
383 OrigFn fn;
384 VALGRIND_GET_ORIG_FN(fn);
385 LOOPS_START
386 printf("fn_6 wrapper pre ( %d, %d, %d, %d, %d, %d )\n",
387 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6);
388 CALL_FN_W_6W(r, fn, a1, a2, a3, a4, a5, a6);
389 printf("fn_6 wrapper post1 = %d\n", (int)r);
390 LOOPS_END
391 return r;
394 /* --------------- 7 --------------- */
396 ATTRIBUTE_OPTNONE
397 UInt fn_7 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
398 UInt a7 )
400 UInt r;
401 UInt* words = calloc(200, sizeof(UInt));
402 words[1-1] = a1;
403 words[2-1] = a2;
404 words[3-1] = a3;
405 words[4-1] = a4;
406 words[5-1] = a5;
407 words[6-1] = a6;
408 words[7-1] = a7;
409 TRASH_IREGS(r, words);
410 free(words);
411 return r;
414 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_7)
415 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
416 UInt a7 )
418 UInt r = 0;
419 OrigFn fn;
420 VALGRIND_GET_ORIG_FN(fn);
421 LOOPS_START
422 printf("fn_7 wrapper pre ( %d, %d, %d, %d, %d, %d, %d )\n",
423 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
424 (int)a7);
425 CALL_FN_W_7W(r, fn, a1, a2, a3, a4, a5, a6, a7);
426 printf("fn_7 wrapper post1 = %d\n", (int)r);
427 LOOPS_END
428 return r;
431 /* --------------- 8 --------------- */
433 ATTRIBUTE_OPTNONE
434 UInt fn_8 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
435 UInt a7, UInt a8 )
437 UInt r;
438 UInt* words = calloc(200, sizeof(UInt));
439 words[1-1] = a1;
440 words[2-1] = a2;
441 words[3-1] = a3;
442 words[4-1] = a4;
443 words[5-1] = a5;
444 words[6-1] = a6;
445 words[7-1] = a7;
446 words[8-1] = a8;
447 TRASH_IREGS(r, words);
448 free(words);
449 return r;
452 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_8)
453 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
454 UInt a7, UInt a8 )
456 UInt r = 0;
457 OrigFn fn;
458 VALGRIND_GET_ORIG_FN(fn);
459 LOOPS_START
460 printf("fn_8 wrapper pre ( %d, %d, %d, %d, %d, %d, %d, %d )\n",
461 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
462 (int)a7, (int)a8);
463 CALL_FN_W_8W(r, fn, a1, a2, a3, a4, a5, a6, a7, a8);
464 printf("fn_8 wrapper post1 = %d\n", (int)r);
465 LOOPS_END
466 return r;
469 /* --------------- 9 --------------- */
471 ATTRIBUTE_OPTNONE
472 UInt fn_9 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
473 UInt a7, UInt a8, UInt a9 )
475 UInt r;
476 UInt* words = calloc(200, sizeof(UInt));
477 words[1-1] = a1;
478 words[2-1] = a2;
479 words[3-1] = a3;
480 words[4-1] = a4;
481 words[5-1] = a5;
482 words[6-1] = a6;
483 words[7-1] = a7;
484 words[8-1] = a8;
485 words[9-1] = a9;
486 TRASH_IREGS(r, words);
487 free(words);
488 return r;
491 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_9)
492 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
493 UInt a7, UInt a8, UInt a9 )
495 UInt r = 0;
496 OrigFn fn;
497 VALGRIND_GET_ORIG_FN(fn);
498 LOOPS_START
499 printf("fn_9 wrapper pre ( %d, %d, %d, %d, %d, %d, %d, %d, %d )\n",
500 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
501 (int)a7, (int)a8, (int)a9);
502 CALL_FN_W_9W(r, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9);
503 printf("fn_9 wrapper post1 = %d\n", (int)r);
504 LOOPS_END
505 return r;
508 /* --------------- 10 --------------- */
510 ATTRIBUTE_OPTNONE
511 UInt fn_10 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
512 UInt a7, UInt a8, UInt a9, UInt a10 )
514 UInt r;
515 UInt* words = calloc(200, sizeof(UInt));
516 words[1-1] = a1;
517 words[2-1] = a2;
518 words[3-1] = a3;
519 words[4-1] = a4;
520 words[5-1] = a5;
521 words[6-1] = a6;
522 words[7-1] = a7;
523 words[8-1] = a8;
524 words[9-1] = a9;
525 words[10-1] = a10;
526 TRASH_IREGS(r, words);
527 free(words);
528 return r;
531 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_10)
532 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
533 UInt a7, UInt a8, UInt a9, UInt a10 )
535 UInt r = 0;
536 OrigFn fn;
537 VALGRIND_GET_ORIG_FN(fn);
538 LOOPS_START
539 printf("fn_10 wrapper pre ( %d, %d, %d, %d, %d, %d, %d, %d, %d, %d )\n",
540 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
541 (int)a7, (int)a8, (int)a9, (int)a10);
542 CALL_FN_W_10W(r, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
543 printf("fn_10 wrapper post1 = %d\n", (int)r);
544 LOOPS_END
545 return r;
548 /* --------------- 11 --------------- */
550 ATTRIBUTE_OPTNONE
551 UInt fn_11 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
552 UInt a7, UInt a8, UInt a9, UInt a10, UInt a11 )
554 UInt r;
555 UInt* words = calloc(200, sizeof(UInt));
556 words[1-1] = a1;
557 words[2-1] = a2;
558 words[3-1] = a3;
559 words[4-1] = a4;
560 words[5-1] = a5;
561 words[6-1] = a6;
562 words[7-1] = a7;
563 words[8-1] = a8;
564 words[9-1] = a9;
565 words[10-1] = a10;
566 words[11-1] = a11;
567 TRASH_IREGS(r, words);
568 free(words);
569 return r;
572 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_11)
573 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
574 UInt a7, UInt a8, UInt a9, UInt a10, UInt a11 )
576 UInt r = 0;
577 OrigFn fn;
578 VALGRIND_GET_ORIG_FN(fn);
579 LOOPS_START
580 printf("fn_11 wrapper pre ( %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d )\n",
581 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
582 (int)a7, (int)a8, (int)a9, (int)a10, (int)a11);
583 CALL_FN_W_11W(r, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
584 printf("fn_11 wrapper post1 = %d\n", (int)r);
585 LOOPS_END
586 return r;
589 /* --------------- 12 --------------- */
591 __attribute__((noinline))
592 UInt fn_12 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
593 UInt a7, UInt a8, UInt a9, UInt a10, UInt a11, UInt a12 )
595 UInt r;
596 UInt* words = calloc(200, sizeof(UInt));
597 words[1-1] = a1;
598 words[2-1] = a2;
599 words[3-1] = a3;
600 words[4-1] = a4;
601 words[5-1] = a5;
602 words[6-1] = a6;
603 words[7-1] = a7;
604 words[8-1] = a8;
605 words[9-1] = a9;
606 words[10-1] = a10;
607 words[11-1] = a11;
608 words[12-1] = a12;
609 TRASH_IREGS(r, words);
610 free(words);
611 return r;
614 UInt I_WRAP_SONAME_FNNAME_ZU(NONE,fn_12)
615 ( UInt a1, UInt a2, UInt a3, UInt a4, UInt a5, UInt a6,
616 UInt a7, UInt a8, UInt a9, UInt a10, UInt a11, UInt a12 )
618 UInt r = 0;
619 OrigFn fn;
620 VALGRIND_GET_ORIG_FN(fn);
621 LOOPS_START
622 printf("fn_12 wrapper pre ( %d, %d, %d, %d, %d, %d, "
623 "%d, %d, %d, %d, %d, %d )\n",
624 (int)a1, (int)a2, (int)a3, (int)a4, (int)a5, (int)a6,
625 (int)a7, (int)a8, (int)a9, (int)a10, (int)a11, (int)a12);
626 CALL_FN_W_12W(r, fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
627 printf("fn_12 wrapper post1 = %d\n", (int)r);
628 LOOPS_END
629 return r;
632 /* --------------- main --------------- */
634 int main ( void )
636 UInt w;
638 one_actual_return_value = 1;
640 printf("fn_0 ...\n");
641 w = fn_0();
642 printf(" ... %d\n\n", (int)w);
644 printf("fn_1 ...\n");
645 w = fn_1(42);
646 printf(" ... %d\n\n", (int)w);
648 printf("fn_2 ...\n");
649 w = fn_2(42,43);
650 printf(" ... %d\n\n", (int)w);
652 printf("fn_3 ...\n");
653 w = fn_3(42,43,44);
654 printf(" ... %d\n\n", (int)w);
656 printf("fn_4 ...\n");
657 w = fn_4(42,43,44,45);
658 printf(" ... %d\n\n", (int)w);
660 printf("fn_5 ...\n");
661 w = fn_5(42,43,44,45,46);
662 printf(" ... %d\n\n", (int)w);
664 printf("fn_6 ...\n");
665 w = fn_6(42,43,44,45,46,47);
666 printf(" ... %d\n\n", (int)w);
668 printf("fn_7 ...\n");
669 w = fn_7(42,43,44,45,46,47,48);
670 printf(" ... %d\n\n", (int)w);
672 printf("fn_8 ...\n");
673 w = fn_8(42,43,44,45,46,47,48,49);
674 printf(" ... %d\n\n", (int)w);
676 printf("fn_9 ...\n");
677 w = fn_9(42,43,44,45,46,47,48,49,50);
678 printf(" ... %d\n\n", (int)w);
680 printf("fn_10 ...\n");
681 w = fn_10(42,43,44,45,46,47,48,49,50,51);
682 printf(" ... %d\n\n", (int)w);
684 printf("fn_11 ...\n");
685 w = fn_11(42,43,44,45,46,47,48,49,50,51,52);
686 printf(" ... %d\n\n", (int)w);
688 printf("fn_12 ...\n");
689 w = fn_12(42,43,44,45,46,47,48,49,50,51,52,53);
690 printf(" ... %d\n\n", (int)w);
692 return 0;