drc: implement cycle reload on read
[pcsx_rearmed.git] / deps / lightning / check / cva_list.c
CommitLineData
4a71579b
PC
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
58void 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
66void 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
74void 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
82void 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
90void 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
98void 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
106void 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
114void 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
122void 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
130void 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
138void 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
146void 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
154void 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
162void 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
170void 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
178void 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
186void 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
194void 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
202void 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
211void 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
220void 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
229void 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
238void 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
247void 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
256void 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
265void 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
274void 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
282void 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
291void 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
300void 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
309void 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
318void 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
327void 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
336void 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
345void 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
354void 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
362void 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
369void 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
376void 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
383void 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
391void 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
398void 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
405void 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
412void 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
419void 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
427void 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
435void 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
443void 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
451void 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
459void 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
467void 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
475void 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
556jit_state_t *_jit;
557
558int 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}