libretro: adjust psxclock description
[pcsx_rearmed.git] / deps / lightning / check / cva_list.c
1 #include <lightning.h>
2 #include <stdarg.h>
3 #include <stdio.h>
4
5 #define W               jit_word_t
6 #define D               jit_float64_t
7 #define VASTART(A)                                                      \
8     va_list             ap;                                             \
9     va_start(ap, A)
10 #define VARG2()         a2 = va_arg(ap, jit_word_t);    VARG3()
11 #define VARG3()         a3 = va_arg(ap, jit_word_t);    VARG4()
12 #define VARG4()         a4 = va_arg(ap, jit_word_t);    VARG5()
13 #define VARG5()         a5 = va_arg(ap, jit_word_t);    VARG6()
14 #define VARG6()         a6 = va_arg(ap, jit_word_t);    VARG7()
15 #define VARG7()         a7 = va_arg(ap, jit_word_t);    VARG8()
16 #define VARG8()         a8 = va_arg(ap, jit_word_t);    VARG9()
17 #define VARG9()         a9 = va_arg(ap, jit_word_t);    VARG10()
18 #define VARG10()        a10 = va_arg(ap, jit_word_t);   va_end(ap)
19
20 #define VARGD2()        a2 = va_arg(ap, jit_float64_t); VARGD3()
21 #define VARGD3()        a3 = va_arg(ap, jit_float64_t); VARGD4()
22 #define VARGD4()        a4 = va_arg(ap, jit_float64_t); VARGD5()
23 #define VARGD5()        a5 = va_arg(ap, jit_float64_t); VARGD6()
24 #define VARGD6()        a6 = va_arg(ap, jit_float64_t); VARGD7()
25 #define VARGD7()        a7 = va_arg(ap, jit_float64_t); VARGD8()
26 #define VARGD8()        a8 = va_arg(ap, jit_float64_t); VARGD9()
27 #define VARGD9()        a9 = va_arg(ap, jit_float64_t); VARGD10()
28 #define VARGD10()       a10 = va_arg(ap, jit_float64_t);va_end(ap)
29
30 #define IDVARG2()       a2 = va_arg(ap, jit_float64_t); IDVARG3()
31 #define IDVARG3()       a3 = va_arg(ap, jit_word_t);    IDVARG4()
32 #define IDVARG4()       a4 = va_arg(ap, jit_float64_t); IDVARG5()
33 #define IDVARG5()       a5 = va_arg(ap, jit_word_t);    IDVARG6()
34 #define IDVARG6()       a6 = va_arg(ap, jit_float64_t); IDVARG7()
35 #define IDVARG7()       a7 = va_arg(ap, jit_word_t);    IDVARG8()
36 #define IDVARG8()       a8 = va_arg(ap, jit_float64_t); IDVARG9()
37 #define IDVARG9()       a9 = va_arg(ap, jit_word_t);    IDVARG10()
38 #define IDVARG10()      a10 = va_arg(ap, jit_float64_t);va_end(ap)
39
40 #define DIVARG2()       a2 = va_arg(ap, jit_word_t);    DIVARG3()
41 #define DIVARG3()       a3 = va_arg(ap, jit_float64_t); DIVARG4()
42 #define DIVARG4()       a4 = va_arg(ap, jit_word_t);    DIVARG5()
43 #define DIVARG5()       a5 = va_arg(ap, jit_float64_t); DIVARG6()
44 #define DIVARG6()       a6 = va_arg(ap, jit_word_t);    DIVARG7()
45 #define DIVARG7()       a7 = va_arg(ap, jit_float64_t); DIVARG8()
46 #define DIVARG8()       a8 = va_arg(ap, jit_word_t);    DIVARG9()
47 #define DIVARG9()       a9 = va_arg(ap, jit_float64_t); DIVARG10()
48 #define DIVARG10()      a10 = va_arg(ap, jit_word_t);   va_end(ap)
49
50 #define CHECK()                                                         \
51     do {                                                                \
52         if (a1 != 1 || a2 != 2 || a3 != 3 || a4 != 4 || a5 != 5 ||      \
53             a6 != 6 || a7 != 7 || a8 != 8 || a9 != 9 || a10 != 10)      \
54             abort();                                                    \
55     } while (0)
56
57
58 void i_iiiiiiiii(W a1, ...)
59 {
60     W           a2, a3, a4, a5, a6, a7, a8, a9, a10;
61     VASTART(a1);
62     VARG2();
63     CHECK();
64 }
65
66 void ii_iiiiiiii(W a1, W a2, ...)
67 {
68     W           a3, a4, a5, a6, a7, a8, a9, a10;
69     VASTART(a2);
70     VARG3();
71     CHECK();
72 }
73
74 void iii_iiiiiii(W a1, W a2, W a3, ...)
75 {
76     W           a4, a5, a6, a7, a8, a9, a10;
77     VASTART(a3);
78     VARG4();
79     CHECK();
80 }
81
82 void iiii_iiiiii(W a1, W a2, W a3, W a4, ...)
83 {
84     W           a5, a6, a7, a8, a9, a10;
85     VASTART(a4);
86     VARG5();
87     CHECK();
88 }
89
90 void iiiii_iiiii(W a1, W a2, W a3, W a4, W a5, ...)
91 {
92     W           a6, a7, a8, a9, a10;
93     VASTART(a5);
94     VARG6();
95     CHECK();
96 }
97
98 void iiiiii_iiii(W a1, W a2, W a3, W a4, W a5, W a6, ...)
99 {
100     W           a7, a8, a9, a10;
101     VASTART(a6);
102     VARG7();
103     CHECK();
104 }
105
106 void iiiiiii_iii(W a1, W a2, W a3, W a4, W a5, W a6, W a7, ...)
107 {
108     W           a8, a9, a10;
109     VASTART(a7);
110     VARG8();
111     CHECK();
112 }
113
114 void iiiiiiii_ii(W a1, W a2, W a3, W a4, W a5, W a6, W a7, W a8, ...)
115 {
116     W           a9, a10;
117     VASTART(a8);
118     VARG9();
119     CHECK();
120 }
121
122 void iiiiiiiii_i(W a1, W a2, W a3, W a4, W a5, W a6, W a7, W a8, W a9, ...)
123 {
124     W           a10;
125     VASTART(a9);
126     VARG10();
127     CHECK();
128 }
129
130 void d_ddddddddd(D a1, ...)
131 {
132     D           a2, a3, a4, a5, a6, a7, a8, a9, a10;
133     VASTART(a1);
134     VARGD2();
135     CHECK();
136 }
137
138 void dd_dddddddd(D a1, D a2, ...)
139 {
140     D           a3, a4, a5, a6, a7, a8, a9, a10;
141     VASTART(a2);
142     VARGD3();
143     CHECK();
144 }
145
146 void ddd_ddddddd(D a1, D a2, D a3, ...)
147 {
148     D           a4, a5, a6, a7, a8, a9, a10;
149     VASTART(a3);
150     VARGD4();
151     CHECK();
152 }
153
154 void dddd_dddddd(D a1, D a2, D a3, D a4, ...)
155 {
156     D           a5, a6, a7, a8, a9, a10;
157     VASTART(a4);
158     VARGD5();
159     CHECK();
160 }
161
162 void ddddd_ddddd(D a1, D a2, D a3, D a4, D a5, ...)
163 {
164     D           a6, a7, a8, a9, a10;
165     VASTART(a5);
166     VARGD6();
167     CHECK();
168 }
169
170 void dddddd_dddd(D a1, D a2, D a3, D a4, D a5, D a6, ...)
171 {
172     D           a7, a8, a9, a10;
173     VASTART(a6);
174     VARGD7();
175     CHECK();
176 }
177
178 void ddddddd_ddd(D a1, D a2, D a3, D a4, D a5, D a6, D a7, ...)
179 {
180     D           a8, a9, a10;
181     VASTART(a7);
182     VARGD8();
183     CHECK();
184 }
185
186 void dddddddd_dd(D a1, D a2, D a3, D a4, D a5, D a6, D a7, D a8, ...)
187 {
188     D           a9, a10;
189     VASTART(a8);
190     VARGD9();
191     CHECK();
192 }
193
194 void ddddddddd_d(D a1, D a2, D a3, D a4, D a5, D a6, D a7, D a8, D a9, ...)
195 {
196     D           a10;
197     VASTART(a9);
198     VARGD10();
199     CHECK();
200 }
201
202 void i_didididid(W a1, ...)
203 {
204     W           a3, a5, a7, a9;
205     D           a2, a4, a6, a8, a10;
206     VASTART(a1);
207     IDVARG2();
208     CHECK();
209 }
210
211 void id_idididid(W a1, D a2, ...)
212 {
213     W           a3, a5, a7, a9;
214     D           a4, a6, a8, a10;
215     VASTART(a2);
216     IDVARG3();
217     CHECK();
218 }
219
220 void idi_dididid(W a1, D a2, W a3, ...)
221 {
222     W           a5, a7, a9;
223     D           a4, a6, a8, a10;
224     VASTART(a3);
225     IDVARG4();
226     CHECK();
227 }
228
229 void idid_ididid(W a1, D a2, W a3, D a4, ...)
230 {
231     W           a5, a7, a9;
232     D           a6, a8, a10;
233     VASTART(a4);
234     IDVARG5();
235     CHECK();
236 }
237
238 void ididi_didid(W a1, D a2, W a3, D a4, W a5, ...)
239 {
240     W           a7, a9;
241     D           a6, a8, a10;
242     VASTART(a5);
243     IDVARG6();
244     CHECK();
245 }
246
247 void ididid_idid(W a1, D a2, W a3, D a4, W a5, D a6, ...)
248 {
249     W           a7, a9;
250     D           a8, a10;
251     VASTART(a6);
252     IDVARG7();
253     CHECK();
254 }
255
256 void idididi_did(W a1, D a2, W a3, D a4, W a5, D a6, W a7, ...)
257 {
258     W           a9;
259     D           a8, a10;
260     VASTART(a7);
261     IDVARG8();
262     CHECK();
263 }
264
265 void idididid_id(W a1, D a2, W a3, D a4, W a5, D a6, W a7, D a8, ...)
266 {
267     W           a9;
268     D           a10;
269     VASTART(a8);
270     IDVARG9();
271     CHECK();
272 }
273
274 void ididididi_d(W a1, D a2, W a3, D a4, W a5, D a6, W a7, D a8, W a9, ...)
275 {
276     D           a10;
277     VASTART(a9);
278     IDVARG10();
279     CHECK();
280 }
281
282 void d_ididididi(D a1, ...)
283 {
284     W           a2, a4, a6, a8, a10;
285     D           a3, a5, a7, a9;
286     VASTART(a1);
287     DIVARG2();
288     CHECK();
289 }
290
291 void di_didididi(D a1, W a2, ...)
292 {
293     W           a4, a6, a8, a10;
294     D           a3, a5, a7, a9;
295     VASTART(a2);
296     DIVARG3();
297     CHECK();
298 }
299
300 void did_idididi(D a1, W a2, D a3, ...)
301 {
302     W           a4, a6, a8, a10;
303     D           a5, a7, a9;
304     VASTART(a3);
305     DIVARG4();
306     CHECK();
307 }
308
309 void didi_dididi(D a1, W a2, D a3, W a4, ...)
310 {
311     W           a6, a8, a10;
312     D           a5, a7, a9;
313     VASTART(a4);
314     DIVARG5();
315     CHECK();
316 }
317
318 void didid_ididi(D a1, W a2, D a3, W a4, D a5, ...)
319 {
320     W           a6, a8, a10;
321     D           a7, a9;
322     VASTART(a5);
323     DIVARG6();
324     CHECK();
325 }
326
327 void dididi_didi(D a1, W a2, D a3, W a4, D a5, W a6, ...)
328 {
329     W           a8, a10;
330     D           a7, a9;
331     VASTART(a6);
332     DIVARG7();
333     CHECK();
334 }
335
336 void dididid_idi(D a1, W a2, D a3, W a4, D a5, W a6, D a7, ...)
337 {
338     W           a8, a10;
339     D           a9;
340     VASTART(a7);
341     DIVARG8();
342     CHECK();
343 }
344
345 void didididi_di(D a1, W a2, D a3, W a4, D a5, W a6, D a7, W a8, ...)
346 {
347     W           a10;
348     D           a9;
349     VASTART(a8);
350     DIVARG9();
351     CHECK();
352 }
353
354 void didididid_i(D a1, W a2, D a3, W a4, D a5, W a6, D a7, W a8, D a9, ...)
355 {
356     W           a10;
357     VASTART(a9);
358     DIVARG10();
359     CHECK();
360 }
361
362 void va_i_iiiiiiiii(W a1, va_list ap)
363 {
364     W           a2, a3, a4, a5, a6, a7, a8, a9, a10;
365     VARG2();
366     CHECK();
367 }
368
369 void va_ii_iiiiiiii(W a1, W a2, va_list ap)
370 {
371     W           a3, a4, a5, a6, a7, a8, a9, a10;
372     VARG3();
373     CHECK();
374 }
375
376 void va_iii_iiiiiii(W a1, W a2, W a3, va_list ap)
377 {
378     W           a4, a5, a6, a7, a8, a9, a10;
379     VARG4();
380     CHECK();
381 }
382
383 void va_iiii_iiiiii(W a1, W a2, W a3, W a4, va_list ap)
384 {
385     W           a5, a6, a7, a8, a9, a10;
386     VARG5();
387     CHECK();
388 }
389
390
391 void va_d_ddddddddd(D a1, va_list ap)
392 {
393     D           a2, a3, a4, a5, a6, a7, a8, a9, a10;
394     VARGD2();
395     CHECK();
396 }
397
398 void va_dd_dddddddd(D a1, D a2, va_list ap)
399 {
400     D           a3, a4, a5, a6, a7, a8, a9, a10;
401     VARGD3();
402     CHECK();
403 }
404
405 void va_ddd_ddddddd(D a1, D a2, D a3, va_list ap)
406 {
407     D           a4, a5, a6, a7, a8, a9, a10;
408     VARGD4();
409     CHECK();
410 }
411
412 void va_dddd_dddddd(D a1, D a2, D a3, D a4, va_list ap)
413 {
414     D           a5, a6, a7, a8, a9, a10;
415     VARGD5();
416     CHECK();
417 }
418
419 void va_i_didididid(W a1, va_list ap)
420 {
421     W           a3, a5, a7, a9;
422     D           a2, a4, a6, a8, a10;
423     IDVARG2();
424     CHECK();
425 }
426
427 void va_id_idididid(W a1, D a2, va_list ap)
428 {
429     W           a3, a5, a7, a9;
430     D           a4, a6, a8, a10;
431     IDVARG3();
432     CHECK();
433 }
434
435 void va_idi_dididid(W a1, D a2, W a3, va_list ap)
436 {
437     W           a5, a7, a9;
438     D           a4, a6, a8, a10;
439     IDVARG4();
440     CHECK();
441 }
442
443 void va_idid_ididid(W a1, D a2, W a3, D a4, va_list ap)
444 {
445     W           a5, a7, a9;
446     D           a6, a8, a10;
447     IDVARG5();
448     CHECK();
449 }
450
451 void va_d_ididididi(D a1, va_list ap)
452 {
453     W           a2, a4, a6, a8, a10;
454     D           a3, a5, a7, a9;
455     DIVARG2();
456     CHECK();
457 }
458
459 void va_di_didididi(D a1, W a2, va_list ap)
460 {
461     W           a4, a6, a8, a10;
462     D           a3, a5, a7, a9;
463     DIVARG3();
464     CHECK();
465 }
466
467 void va_did_idididi(D a1, W a2, D a3, va_list ap)
468 {
469     W           a4, a6, a8, a10;
470     D           a5, a7, a9;
471     DIVARG4();
472     CHECK();
473 }
474
475 void va_didi_dididi(D a1, W a2, D a3, W a4, va_list ap)
476 {
477     W           a6, a8, a10;
478     D           a5, a7, a9;
479     DIVARG5();
480     CHECK();
481 }
482
483 #define PUSH1()                                 jit_pushargi(1)
484 #define PUSH2()         PUSH1();                jit_pushargi(2)
485 #define PUSH3()         PUSH2();                jit_pushargi(3)
486 #define PUSH4()         PUSH3();                jit_pushargi(4)
487 #define PUSH5()         PUSH4();                jit_pushargi(5)
488 #define PUSH6()         PUSH5();                jit_pushargi(6)
489 #define PUSH7()         PUSH6();                jit_pushargi(7)
490 #define PUSH8()         PUSH7();                jit_pushargi(8)
491 #define PUSH9()         PUSH8();                jit_pushargi(9)
492 #define VPUSH2()        jit_pushargi(2);        VPUSH3()
493 #define VPUSH3()        jit_pushargi(3);        VPUSH4()
494 #define VPUSH4()        jit_pushargi(4);        VPUSH5()
495 #define VPUSH5()        jit_pushargi(5);        VPUSH6()
496 #define VPUSH6()        jit_pushargi(6);        VPUSH7()
497 #define VPUSH7()        jit_pushargi(7);        VPUSH8()
498 #define VPUSH8()        jit_pushargi(8);        VPUSH9()
499 #define VPUSH9()        jit_pushargi(9);        VPUSH10()
500 #define VPUSH10()       jit_pushargi(10);
501 #define PUSHD1()                                jit_pushargi_d(1)
502 #define PUSHD2()        PUSHD1();               jit_pushargi_d(2)
503 #define PUSHD3()        PUSHD2();               jit_pushargi_d(3)
504 #define PUSHD4()        PUSHD3();               jit_pushargi_d(4)
505 #define PUSHD5()        PUSHD4();               jit_pushargi_d(5)
506 #define PUSHD6()        PUSHD5();               jit_pushargi_d(6)
507 #define PUSHD7()        PUSHD6();               jit_pushargi_d(7)
508 #define PUSHD8()        PUSHD7();               jit_pushargi_d(8)
509 #define PUSHD9()        PUSHD8();               jit_pushargi_d(9)
510 #define VPUSHD2()       jit_pushargi_d(2);      VPUSHD3()
511 #define VPUSHD3()       jit_pushargi_d(3);      VPUSHD4()
512 #define VPUSHD4()       jit_pushargi_d(4);      VPUSHD5()
513 #define VPUSHD5()       jit_pushargi_d(5);      VPUSHD6()
514 #define VPUSHD6()       jit_pushargi_d(6);      VPUSHD7()
515 #define VPUSHD7()       jit_pushargi_d(7);      VPUSHD8()
516 #define VPUSHD8()       jit_pushargi_d(8);      VPUSHD9()
517 #define VPUSHD9()       jit_pushargi_d(9);      VPUSHD10()
518 #define VPUSHD10()      jit_pushargi_d(10);
519 #define IDPUSH1()                               jit_pushargi(1)
520 #define IDPUSH2()       IDPUSH1();              jit_pushargi_d(2)
521 #define IDPUSH3()       IDPUSH2();              jit_pushargi(3)
522 #define IDPUSH4()       IDPUSH3();              jit_pushargi_d(4)
523 #define IDPUSH5()       IDPUSH4();              jit_pushargi(5)
524 #define IDPUSH6()       IDPUSH5();              jit_pushargi_d(6)
525 #define IDPUSH7()       IDPUSH6();              jit_pushargi(7)
526 #define IDPUSH8()       IDPUSH7();              jit_pushargi_d(8)
527 #define IDPUSH9()       IDPUSH8();              jit_pushargi(9)
528 #define IDVPUSH2()      jit_pushargi_d(2);      IDVPUSH3()
529 #define IDVPUSH3()      jit_pushargi(3);        IDVPUSH4()
530 #define IDVPUSH4()      jit_pushargi_d(4);      IDVPUSH5()
531 #define IDVPUSH5()      jit_pushargi(5);        IDVPUSH6()
532 #define IDVPUSH6()      jit_pushargi_d(6);      IDVPUSH7()
533 #define IDVPUSH7()      jit_pushargi(7);        IDVPUSH8()
534 #define IDVPUSH8()      jit_pushargi_d(8);      IDVPUSH9()
535 #define IDVPUSH9()      jit_pushargi(9);        IDVPUSH10()
536 #define IDVPUSH10()     jit_pushargi_d(10);
537 #define DIPUSH1()                               jit_pushargi_d(1)
538 #define DIPUSH2()       DIPUSH1();              jit_pushargi(2)
539 #define DIPUSH3()       DIPUSH2();              jit_pushargi_d(3)
540 #define DIPUSH4()       DIPUSH3();              jit_pushargi(4)
541 #define DIPUSH5()       DIPUSH4();              jit_pushargi_d(5)
542 #define DIPUSH6()       DIPUSH5();              jit_pushargi(6)
543 #define DIPUSH7()       DIPUSH6();              jit_pushargi_d(7)
544 #define DIPUSH8()       DIPUSH7();              jit_pushargi(8)
545 #define DIPUSH9()       DIPUSH8();              jit_pushargi_d(9)
546 #define DIVPUSH2()      jit_pushargi(2);        DIVPUSH3()
547 #define DIVPUSH3()      jit_pushargi_d(3);      DIVPUSH4()
548 #define DIVPUSH4()      jit_pushargi(4);        DIVPUSH5()
549 #define DIVPUSH5()      jit_pushargi_d(5);      DIVPUSH6()
550 #define DIVPUSH6()      jit_pushargi(6);        DIVPUSH7()
551 #define DIVPUSH7()      jit_pushargi_d(7);      DIVPUSH8()
552 #define DIVPUSH8()      jit_pushargi(8);        DIVPUSH9()
553 #define DIVPUSH9()      jit_pushargi_d(9);      DIVPUSH10()
554 #define DIVPUSH10()     jit_pushargi(10);
555
556 jit_state_t      *_jit;
557
558 int main(int argc, char *argv[])
559 {
560     void                (*function)(void);
561     jit_node_t          *jmpi_main;
562     jit_node_t          *a1, *a2, *node;
563     jit_node_t          *jva_i_iiiiiiiii, *jva_ii_iiiiiiii;
564     jit_node_t          *jva_d_ddddddddd, *jva_dd_dddddddd;
565     jit_node_t          *jva_i_didididid, *jva_id_idididid;
566     jit_node_t          *jva_d_ididididi, *jva_di_didididi;
567     jit_node_t          *jva_iii_iiiiiii, *jva_iiii_iiiiii;
568     jit_node_t          *jva_ddd_ddddddd, *jva_dddd_dddddd;
569     jit_node_t          *jva_idi_dididid, *jva_idid_ididid;
570     jit_node_t          *jva_did_idididi, *jva_didi_dididi;
571
572     init_jit(argv[0]);
573     _jit = jit_new_state();
574
575     jmpi_main = jit_jmpi();
576
577     /* Define simple functions to validate a jit_va_list_t
578      * is a valid va_list; these do not fetch arguments from
579      * the va_list. */
580     jva_i_iiiiiiiii = jit_label();
581     jit_name("va_i_iiiiiiiii");
582     jit_prolog();
583     a1 = jit_arg();
584     jit_getarg(JIT_V1, a1);
585     jit_ellipsis();
586     jit_va_start(JIT_V0);
587     jit_prepare();
588     jit_pushargr(JIT_V1);
589     jit_va_push(JIT_V0);
590     jit_finishi(va_i_iiiiiiiii);
591     jit_va_end(JIT_V0);
592     jit_ret();
593     jit_epilog();
594     jva_ii_iiiiiiii = jit_label();
595     jit_name("va_ii_iiiiiiii");
596     jit_prolog();
597     a1 = jit_arg();
598     a2 = jit_arg();
599     jit_getarg(JIT_V1, a1);
600     jit_getarg(JIT_V2, a2);
601     jit_ellipsis();
602     jit_va_start(JIT_V0);
603     jit_prepare();
604     jit_pushargr(JIT_V1);
605     jit_pushargr(JIT_V2);
606     jit_va_push(JIT_V0);
607     jit_finishi(va_ii_iiiiiiii);
608     jit_va_end(JIT_V0);
609     jit_ret();
610     jit_epilog();
611     jva_d_ddddddddd = jit_label();
612     jit_name("va_d_ddddddddd");
613     jit_prolog();
614     a1 = jit_arg_d();
615     jit_getarg_d(JIT_F3, a1);
616     jit_ellipsis();
617     jit_va_start(JIT_V0);
618     jit_prepare();
619     jit_pushargr_d(JIT_F3);
620     jit_va_push(JIT_V0);
621     jit_finishi(va_d_ddddddddd);
622     jit_va_end(JIT_V0);
623     jit_ret();
624     jit_epilog();
625     jva_dd_dddddddd = jit_label();
626     jit_name("va_dd_dddddddd");
627     jit_prolog();
628     a1 = jit_arg_d();
629     a2 = jit_arg_d();
630     jit_getarg_d(JIT_F3, a1);
631     jit_getarg_d(JIT_F4, a2);
632     jit_ellipsis();
633     jit_va_start(JIT_V0);
634     jit_prepare();
635     jit_pushargr_d(JIT_F3);
636     jit_pushargr_d(JIT_F4);
637     jit_va_push(JIT_V0);
638     jit_finishi(va_dd_dddddddd);
639     jit_va_end(JIT_V0);
640     jit_ret();
641     jit_epilog();
642     jva_i_didididid = jit_label();
643     jit_name("va_i_didididid");
644     jit_prolog();
645     a1 = jit_arg();
646     jit_getarg(JIT_V1, a1);
647     jit_ellipsis();
648     jit_va_start(JIT_V0);
649     jit_prepare();
650     jit_pushargr(JIT_V1);
651     jit_va_push(JIT_V0);
652     jit_finishi(va_i_didididid);
653     jit_va_end(JIT_V0);
654     jit_ret();
655     jit_epilog();
656     jva_id_idididid = jit_label();
657     jit_name("va_id_idididid");
658     jit_prolog();
659     a1 = jit_arg();
660     a2 = jit_arg_d();
661     jit_getarg(JIT_V1, a1);
662     jit_getarg_d(JIT_F3, a2);
663     jit_ellipsis();
664     jit_va_start(JIT_V0);
665     jit_prepare();
666     jit_pushargr(JIT_V1);
667     jit_pushargr_d(JIT_F3);
668     jit_va_push(JIT_V0);
669     jit_finishi(va_id_idididid);
670     jit_va_end(JIT_V0);
671     jit_ret();
672     jit_epilog();
673     jva_d_ididididi = jit_label();
674     jit_name("va_d_ididididi");
675     jit_prolog();
676     a1 = jit_arg_d();
677     jit_getarg_d(JIT_F3, a1);
678     jit_ellipsis();
679     jit_va_start(JIT_V0);
680     jit_prepare();
681     jit_pushargr_d(JIT_F3);
682     jit_va_push(JIT_V0);
683     jit_finishi(va_d_ididididi);
684     jit_va_end(JIT_V0);
685     jit_ret();
686     jit_epilog();
687     jva_di_didididi = jit_label();
688     jit_name("va_di_didididi");
689     jit_prolog();
690     a1 = jit_arg_d();
691     a2 = jit_arg();
692     jit_getarg_d(JIT_F3, a1);
693     jit_getarg(JIT_V1, a2);
694     jit_ellipsis();
695     jit_va_start(JIT_V0);
696     jit_prepare();
697     jit_pushargr_d(JIT_F3);
698     jit_pushargr(JIT_V1);
699     jit_va_push(JIT_V0);
700     jit_finishi(va_di_didididi);
701     jit_va_end(JIT_V0);
702     jit_ret();
703     jit_epilog();
704
705     /* Define complex functions to validate a jit_va_list_t
706      * is a valid va_list; these do fetch arguments from
707      * the va_list, to ensure it does the correct operations
708      * fetching arguments, and pass a valid va_list to the
709      * C function. */
710     jva_iii_iiiiiii = jit_label();
711     jit_name("va_iii_iiiiiii");
712     jit_prolog();
713     a1 = jit_arg();
714     jit_getarg(JIT_V1, a1);
715     node = jit_beqi(JIT_V1, 1);
716     jit_calli(abort);
717     jit_patch(node);
718     jit_ellipsis();
719     jit_va_start(JIT_V0);
720     jit_va_arg(JIT_V1, JIT_V0);
721     jit_va_arg(JIT_V2, JIT_V0);
722     jit_prepare();
723     jit_pushargi(1);
724     jit_pushargr(JIT_V1);
725     jit_pushargr(JIT_V2);
726     jit_va_push(JIT_V0);
727     jit_finishi(va_iii_iiiiiii);
728     jit_va_end(JIT_V0);
729     jit_ret();
730     jit_epilog();
731     jva_iiii_iiiiii = jit_label();
732     jit_name("va_iiii_iiiiii");
733     jit_prolog();
734     a1 = jit_arg();
735     a2 = jit_arg();
736     jit_getarg(JIT_V1, a1);
737     node = jit_beqi(JIT_V1, 1);
738     jit_calli(abort);
739     jit_patch(node);
740     jit_getarg(JIT_V1, a2);
741     node = jit_beqi(JIT_V1, 2);
742     jit_calli(abort);
743     jit_patch(node);
744     jit_ellipsis();
745     jit_va_start(JIT_V0);
746     jit_va_arg(JIT_V1, JIT_V0);
747     jit_va_arg(JIT_V2, JIT_V0);
748     jit_prepare();
749     jit_pushargi(1);
750     jit_pushargi(2);
751     jit_pushargr(JIT_V1);
752     jit_pushargr(JIT_V2);
753     jit_va_push(JIT_V0);
754     jit_finishi(va_iiii_iiiiii);
755     jit_va_end(JIT_V0);
756     jit_ret();
757     jit_epilog();
758     jva_ddd_ddddddd = jit_label();
759     jit_name("va_ddd_ddddddd");
760     jit_prolog();
761     a1 = jit_arg_d();
762     jit_getarg_d(JIT_F3, a1);
763     node = jit_beqi_d(JIT_F3, 1);
764     jit_calli(abort);
765     jit_patch(node);
766     jit_ellipsis();
767     jit_va_start(JIT_V0);
768     jit_va_arg_d(JIT_F3, JIT_V0);
769     jit_va_arg_d(JIT_F4, JIT_V0);
770     jit_prepare();
771     jit_pushargi_d(1);
772     jit_pushargr_d(JIT_F3);
773     jit_pushargr_d(JIT_F4);
774     jit_va_push(JIT_V0);
775     jit_finishi(va_ddd_ddddddd);
776     jit_va_end(JIT_V0);
777     jit_ret();
778     jit_epilog();
779     jva_dddd_dddddd = jit_label();
780     jit_name("va_dddd_dddddd");
781     jit_prolog();
782     a1 = jit_arg_d();
783     a2 = jit_arg_d();
784     jit_getarg_d(JIT_F3, a1);
785     node = jit_beqi_d(JIT_F3, 1);
786     jit_calli(abort);
787     jit_patch(node);
788     jit_getarg_d(JIT_F3, a2);
789     node = jit_beqi_d(JIT_F3, 2);
790     jit_calli(abort);
791     jit_patch(node);
792     jit_ellipsis();
793     jit_va_start(JIT_V0);
794     jit_va_arg_d(JIT_F3, JIT_V0);
795     jit_va_arg_d(JIT_F4, JIT_V0);
796     jit_prepare();
797     jit_pushargi_d(1);
798     jit_pushargi_d(2);
799     jit_pushargr_d(JIT_F3);
800     jit_pushargr_d(JIT_F4);
801     jit_va_push(JIT_V0);
802     jit_finishi(va_dddd_dddddd);
803     jit_va_end(JIT_V0);
804     jit_ret();
805     jit_epilog();
806     jva_idi_dididid = jit_label();
807     jit_name("va_idi_dididid");
808     jit_prolog();
809     a1 = jit_arg();
810     jit_getarg(JIT_V1, a1);
811     node = jit_beqi(JIT_V1, 1);
812     jit_calli(abort);
813     jit_patch(node);
814     jit_ellipsis();
815     jit_va_start(JIT_V0);
816     jit_va_arg_d(JIT_F3, JIT_V0);
817     jit_va_arg(JIT_V1, JIT_V0);
818     jit_prepare();
819     jit_pushargi(1);
820     jit_pushargr_d(JIT_F3);
821     jit_pushargr(JIT_V1);
822     jit_va_push(JIT_V0);
823     jit_finishi(va_idi_dididid);
824     jit_va_end(JIT_V0);
825     jit_ret();
826     jit_epilog();
827     jva_idid_ididid = jit_label();
828     jit_name("va_idid_ididid");
829     jit_prolog();
830     a1 = jit_arg();
831     a2 = jit_arg_d();
832     jit_getarg(JIT_V1, a1);
833     node = jit_beqi(JIT_V1, 1);
834     jit_calli(abort);
835     jit_patch(node);
836     jit_getarg_d(JIT_F3, a2);
837     node = jit_beqi_d(JIT_F3, 2);
838     jit_calli(abort);
839     jit_patch(node);
840     jit_ellipsis();
841     jit_va_start(JIT_V0);
842     jit_va_arg(JIT_V1, JIT_V0);
843     jit_va_arg_d(JIT_F3, JIT_V0);
844     jit_prepare();
845     jit_pushargi(1);
846     jit_pushargi_d(2);
847     jit_pushargr(JIT_V1);
848     jit_pushargr_d(JIT_F3);
849     jit_va_push(JIT_V0);
850     jit_finishi(va_idid_ididid);
851     jit_va_end(JIT_V0);
852     jit_ret();
853     jit_epilog();
854     jva_did_idididi = jit_label();
855     jit_name("va_did_idididi");
856     jit_prolog();
857     a1 = jit_arg_d();
858     jit_getarg_d(JIT_F3, a1);
859     node = jit_beqi_d(JIT_F3, 1);
860     jit_calli(abort);
861     jit_patch(node);
862     jit_ellipsis();
863     jit_va_start(JIT_V0);
864     jit_va_arg(JIT_V1, JIT_V0);
865     jit_va_arg_d(JIT_F3, JIT_V0);
866     jit_prepare();
867     jit_pushargi_d(1);
868     jit_pushargr(JIT_V1);
869     jit_pushargr_d(JIT_F3);
870     jit_va_push(JIT_V0);
871     jit_finishi(va_did_idididi);
872     jit_va_end(JIT_V0);
873     jit_ret();
874     jit_epilog();
875     jva_didi_dididi = jit_label();
876     jit_name("va_didi_dididi");
877     jit_prolog();
878     a1 = jit_arg_d();
879     a2 = jit_arg();
880     jit_getarg_d(JIT_F3, a1);
881     node = jit_beqi_d(JIT_F3, 1);
882     jit_calli(abort);
883     jit_patch(node);
884     jit_getarg(JIT_V1, a2);
885     node = jit_beqi(JIT_V1, 2);
886     jit_calli(abort);
887     jit_patch(node);
888     jit_ellipsis();
889     jit_va_start(JIT_V0);
890     jit_va_arg_d(JIT_F3, JIT_V0);
891     jit_va_arg(JIT_V1, JIT_V0);
892     jit_prepare();
893     jit_pushargi_d(1);
894     jit_pushargi(2);
895     jit_pushargr_d(JIT_F3);
896     jit_pushargr(JIT_V1);
897     jit_va_push(JIT_V0);
898     jit_finishi(va_didi_dididi);
899     jit_va_end(JIT_V0);
900     jit_ret();
901     jit_epilog();
902
903     jit_patch(jmpi_main);
904     jit_name("main");
905     jit_prolog();
906
907     /* Check that lightning properly calls vararg functions */
908     jit_prepare();
909     PUSH1();
910     jit_ellipsis();
911     VPUSH2();
912     jit_finishi(i_iiiiiiiii);
913     jit_prepare();
914     PUSH2();
915     jit_ellipsis();
916     VPUSH3();
917     jit_finishi(ii_iiiiiiii);
918     jit_prepare();
919     PUSH3();
920     jit_ellipsis();
921     VPUSH4();
922     jit_finishi(iii_iiiiiii);
923     jit_prepare();
924     PUSH4();
925     jit_ellipsis();
926     VPUSH5();
927     jit_finishi(iiii_iiiiii);
928     jit_prepare();
929     PUSH5();
930     jit_ellipsis();
931     VPUSH6();
932     jit_finishi(iiiii_iiiii);
933     jit_prepare();
934     PUSH6();
935     jit_ellipsis();
936     VPUSH7();
937     jit_finishi(iiiiii_iiii);
938     jit_prepare();
939     PUSH7();
940     jit_ellipsis();
941     VPUSH8();
942     jit_finishi(iiiiiii_iii);
943     jit_prepare();
944     PUSH8();
945     jit_ellipsis();
946     VPUSH9();
947     jit_finishi(iiiiiiii_ii);
948     jit_prepare();
949     PUSH9();
950     jit_ellipsis();
951     VPUSH10();
952     jit_finishi(iiiiiiiii_i);
953     jit_prepare();
954     PUSHD1();
955     jit_ellipsis();
956     VPUSHD2();
957     jit_finishi(d_ddddddddd);
958     jit_prepare();
959     PUSHD2();
960     jit_ellipsis();
961     VPUSHD3();
962     jit_finishi(dd_dddddddd);
963     jit_prepare();
964     PUSHD3();
965     jit_ellipsis();
966     VPUSHD4();
967     jit_finishi(ddd_ddddddd);
968     jit_prepare();
969     PUSHD4();
970     jit_ellipsis();
971     VPUSHD5();
972     jit_finishi(dddd_dddddd);
973     jit_prepare();
974     PUSHD5();
975     jit_ellipsis();
976     VPUSHD6();
977     jit_finishi(ddddd_ddddd);
978     jit_prepare();
979     PUSHD6();
980     jit_ellipsis();
981     VPUSHD7();
982     jit_finishi(dddddd_dddd);
983     jit_prepare();
984     PUSHD7();
985     jit_ellipsis();
986     VPUSHD8();
987     jit_finishi(ddddddd_ddd);
988     jit_prepare();
989     PUSHD8();
990     jit_ellipsis();
991     VPUSHD9();
992     jit_finishi(dddddddd_dd);
993     jit_prepare();
994     PUSHD9();
995     jit_ellipsis();
996     VPUSHD10();
997     jit_finishi(ddddddddd_d);
998     jit_prepare();
999     IDPUSH1();
1000     jit_ellipsis();
1001     IDVPUSH2();
1002     jit_finishi(i_didididid);
1003     jit_prepare();
1004     IDPUSH2();
1005     jit_ellipsis();
1006     IDVPUSH3();
1007     jit_finishi(id_idididid);
1008     jit_prepare();
1009     IDPUSH3();
1010     jit_ellipsis();
1011     IDVPUSH4();
1012     jit_finishi(idi_dididid);
1013     jit_prepare();
1014     IDPUSH4();
1015     jit_ellipsis();
1016     IDVPUSH5();
1017     jit_finishi(idid_ididid);
1018     jit_prepare();
1019     IDPUSH5();
1020     jit_ellipsis();
1021     IDVPUSH6();
1022     jit_finishi(ididi_didid);
1023     jit_prepare();
1024     IDPUSH6();
1025     jit_ellipsis();
1026     IDVPUSH7();
1027     jit_finishi(ididid_idid);
1028     jit_prepare();
1029     IDPUSH7();
1030     jit_ellipsis();
1031     IDVPUSH8();
1032     jit_finishi(idididi_did);
1033     jit_prepare();
1034     IDPUSH8();
1035     jit_ellipsis();
1036     IDVPUSH9();
1037     jit_finishi(idididid_id);
1038     jit_prepare();
1039     IDPUSH9();
1040     jit_ellipsis();
1041     IDVPUSH10();
1042     jit_finishi(ididididi_d);
1043     jit_prepare();
1044     DIPUSH1();
1045     jit_ellipsis();
1046     DIVPUSH2();
1047     jit_finishi(d_ididididi);
1048     jit_prepare();
1049     DIPUSH2();
1050     jit_ellipsis();
1051     DIVPUSH3();
1052     jit_finishi(di_didididi);
1053     jit_prepare();
1054     DIPUSH3();
1055     jit_ellipsis();
1056     DIVPUSH4();
1057     jit_finishi(did_idididi);
1058     jit_prepare();
1059     DIPUSH4();
1060     jit_ellipsis();
1061     DIVPUSH5();
1062     jit_finishi(didi_dididi);
1063     jit_prepare();
1064     DIPUSH5();
1065     jit_ellipsis();
1066     DIVPUSH6();
1067     jit_finishi(didid_ididi);
1068     jit_prepare();
1069     DIPUSH6();
1070     jit_ellipsis();
1071     DIVPUSH7();
1072     jit_finishi(dididi_didi);
1073     jit_prepare();
1074     DIPUSH7();
1075     jit_ellipsis();
1076     DIVPUSH8();
1077     jit_finishi(dididid_idi);
1078     jit_prepare();
1079     DIPUSH8();
1080     jit_ellipsis();
1081     DIVPUSH9();
1082     jit_finishi(didididi_di);
1083     jit_prepare();
1084     DIPUSH9();
1085     jit_ellipsis();
1086     DIVPUSH10();
1087     jit_finishi(didididid_i);
1088
1089     /* Check that unmodified jit_va_list_t is a valid va_list */
1090     jit_prepare();
1091     PUSH1();
1092     jit_ellipsis();
1093     VPUSH2();
1094     jit_patch_at(jit_finishi(NULL), jva_i_iiiiiiiii);
1095     jit_prepare();
1096     PUSH2();
1097     jit_ellipsis();
1098     VPUSH3();
1099     jit_patch_at(jit_finishi(NULL), jva_ii_iiiiiiii);
1100     jit_prepare();
1101     PUSHD1();
1102     jit_ellipsis();
1103     VPUSHD2();
1104     jit_patch_at(jit_finishi(NULL), jva_d_ddddddddd);
1105     jit_prepare();
1106     PUSHD2();
1107     jit_ellipsis();
1108     VPUSHD3();
1109     jit_patch_at(jit_finishi(NULL), jva_dd_dddddddd);
1110     jit_prepare();
1111     IDPUSH1();
1112     jit_ellipsis();
1113     IDVPUSH2();
1114     jit_patch_at(jit_finishi(NULL), jva_i_didididid);
1115     jit_prepare();
1116     IDPUSH2();
1117     jit_ellipsis();
1118     IDVPUSH3();
1119     jit_patch_at(jit_finishi(NULL), jva_id_idididid);
1120     jit_prepare();
1121     DIPUSH1();
1122     jit_ellipsis();
1123     DIVPUSH2();
1124     jit_patch_at(jit_finishi(NULL), jva_d_ididididi);
1125     jit_prepare();
1126     DIPUSH2();
1127     jit_ellipsis();
1128     DIVPUSH3();
1129     jit_patch_at(jit_finishi(NULL), jva_di_didididi);
1130
1131     /* Check that modified jit_va_list_t is a valid va_list */
1132     jit_prepare();
1133     PUSH1();
1134     jit_ellipsis();
1135     VPUSH2();
1136     jit_patch_at(jit_finishi(NULL), jva_iii_iiiiiii);
1137     jit_prepare();
1138     PUSH2();
1139     jit_ellipsis();
1140     VPUSH3();
1141     jit_patch_at(jit_finishi(NULL), jva_iiii_iiiiii);
1142     jit_prepare();
1143     PUSHD1();
1144     jit_ellipsis();
1145     VPUSHD2();
1146     jit_patch_at(jit_finishi(NULL), jva_ddd_ddddddd);
1147     jit_prepare();
1148     PUSHD2();
1149     jit_ellipsis();
1150     VPUSHD3();
1151     jit_patch_at(jit_finishi(NULL), jva_dddd_dddddd);
1152     jit_prepare();
1153     IDPUSH1();
1154     jit_ellipsis();
1155     IDVPUSH2();
1156     jit_patch_at(jit_finishi(NULL), jva_idi_dididid);
1157     jit_prepare();
1158     IDPUSH2();
1159     jit_ellipsis();
1160     IDVPUSH3();
1161     jit_patch_at(jit_finishi(NULL), jva_idid_ididid);
1162     jit_prepare();
1163     DIPUSH1();
1164     jit_ellipsis();
1165     DIVPUSH2();
1166     jit_patch_at(jit_finishi(NULL), jva_did_idididi);
1167     jit_prepare();
1168     DIPUSH2();
1169     jit_ellipsis();
1170     DIVPUSH3();
1171     jit_patch_at(jit_finishi(NULL), jva_didi_dididi);
1172
1173     jit_ret();
1174     jit_epilog();
1175
1176
1177     function = jit_emit();
1178     jit_clear_state();
1179     //jit_disassemble();
1180     (*function)();
1181     jit_destroy_state();
1182
1183     finish_jit();
1184
1185     printf("ok\n");
1186     return 0;
1187 }