mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-08 02:40:17 +02:00
* check/cva_list.c: New file implementing a test to ensure the value returned by jit_va_start is a valid C va_list. * check/va_list.ok: New simple helper file, as now the va_list.tst test is enabled. * check/va_list.tst: Rewritten for an extensive variadic jit functions test. * check/Makefile.am: Update for the new tests. * lib/jit_arm-cpu.c, lib/jit_arm-swf.c, lib/jit_arm-vfp.c, lib/jit_arm.c: Correct broken software float in a previous commit. Note that the hard float abi implementation is known broken at this time, for special cases involving variadic functions, and should be corrected next. lib/jit_x86-cpu.c, lib/jit_x86-sz.c, lib/jit_x86.c: Correct the jit_va_list_t semantics to match C va_list.
1187 lines
27 KiB
C
1187 lines
27 KiB
C
#include <lightning.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
|
|
#define W jit_word_t
|
|
#define D jit_float64_t
|
|
#define VASTART(A) \
|
|
va_list ap; \
|
|
va_start(ap, A)
|
|
#define VARG2() a2 = va_arg(ap, jit_word_t); VARG3()
|
|
#define VARG3() a3 = va_arg(ap, jit_word_t); VARG4()
|
|
#define VARG4() a4 = va_arg(ap, jit_word_t); VARG5()
|
|
#define VARG5() a5 = va_arg(ap, jit_word_t); VARG6()
|
|
#define VARG6() a6 = va_arg(ap, jit_word_t); VARG7()
|
|
#define VARG7() a7 = va_arg(ap, jit_word_t); VARG8()
|
|
#define VARG8() a8 = va_arg(ap, jit_word_t); VARG9()
|
|
#define VARG9() a9 = va_arg(ap, jit_word_t); VARG10()
|
|
#define VARG10() a10 = va_arg(ap, jit_word_t); va_end(ap)
|
|
|
|
#define VARGD2() a2 = va_arg(ap, jit_float64_t); VARGD3()
|
|
#define VARGD3() a3 = va_arg(ap, jit_float64_t); VARGD4()
|
|
#define VARGD4() a4 = va_arg(ap, jit_float64_t); VARGD5()
|
|
#define VARGD5() a5 = va_arg(ap, jit_float64_t); VARGD6()
|
|
#define VARGD6() a6 = va_arg(ap, jit_float64_t); VARGD7()
|
|
#define VARGD7() a7 = va_arg(ap, jit_float64_t); VARGD8()
|
|
#define VARGD8() a8 = va_arg(ap, jit_float64_t); VARGD9()
|
|
#define VARGD9() a9 = va_arg(ap, jit_float64_t); VARGD10()
|
|
#define VARGD10() a10 = va_arg(ap, jit_float64_t);va_end(ap)
|
|
|
|
#define IDVARG2() a2 = va_arg(ap, jit_float64_t); IDVARG3()
|
|
#define IDVARG3() a3 = va_arg(ap, jit_word_t); IDVARG4()
|
|
#define IDVARG4() a4 = va_arg(ap, jit_float64_t); IDVARG5()
|
|
#define IDVARG5() a5 = va_arg(ap, jit_word_t); IDVARG6()
|
|
#define IDVARG6() a6 = va_arg(ap, jit_float64_t); IDVARG7()
|
|
#define IDVARG7() a7 = va_arg(ap, jit_word_t); IDVARG8()
|
|
#define IDVARG8() a8 = va_arg(ap, jit_float64_t); IDVARG9()
|
|
#define IDVARG9() a9 = va_arg(ap, jit_word_t); IDVARG10()
|
|
#define IDVARG10() a10 = va_arg(ap, jit_float64_t);va_end(ap)
|
|
|
|
#define DIVARG2() a2 = va_arg(ap, jit_word_t); DIVARG3()
|
|
#define DIVARG3() a3 = va_arg(ap, jit_float64_t); DIVARG4()
|
|
#define DIVARG4() a4 = va_arg(ap, jit_word_t); DIVARG5()
|
|
#define DIVARG5() a5 = va_arg(ap, jit_float64_t); DIVARG6()
|
|
#define DIVARG6() a6 = va_arg(ap, jit_word_t); DIVARG7()
|
|
#define DIVARG7() a7 = va_arg(ap, jit_float64_t); DIVARG8()
|
|
#define DIVARG8() a8 = va_arg(ap, jit_word_t); DIVARG9()
|
|
#define DIVARG9() a9 = va_arg(ap, jit_float64_t); DIVARG10()
|
|
#define DIVARG10() a10 = va_arg(ap, jit_word_t); va_end(ap)
|
|
|
|
#define CHECK() \
|
|
do { \
|
|
if (a1 != 1 || a2 != 2 || a3 != 3 || a4 != 4 || a5 != 5 || \
|
|
a6 != 6 || a7 != 7 || a8 != 8 || a9 != 9 || a10 != 10) \
|
|
abort(); \
|
|
} while (0)
|
|
|
|
|
|
void i_iiiiiiiii(W a1, ...)
|
|
{
|
|
W a2, a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a1);
|
|
VARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void ii_iiiiiiii(W a1, W a2, ...)
|
|
{
|
|
W a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a2);
|
|
VARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void iii_iiiiiii(W a1, W a2, W a3, ...)
|
|
{
|
|
W a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a3);
|
|
VARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void iiii_iiiiii(W a1, W a2, W a3, W a4, ...)
|
|
{
|
|
W a5, a6, a7, a8, a9, a10;
|
|
VASTART(a4);
|
|
VARG5();
|
|
CHECK();
|
|
}
|
|
|
|
void iiiii_iiiii(W a1, W a2, W a3, W a4, W a5, ...)
|
|
{
|
|
W a6, a7, a8, a9, a10;
|
|
VASTART(a5);
|
|
VARG6();
|
|
CHECK();
|
|
}
|
|
|
|
void iiiiii_iiii(W a1, W a2, W a3, W a4, W a5, W a6, ...)
|
|
{
|
|
W a7, a8, a9, a10;
|
|
VASTART(a6);
|
|
VARG7();
|
|
CHECK();
|
|
}
|
|
|
|
void iiiiiii_iii(W a1, W a2, W a3, W a4, W a5, W a6, W a7, ...)
|
|
{
|
|
W a8, a9, a10;
|
|
VASTART(a7);
|
|
VARG8();
|
|
CHECK();
|
|
}
|
|
|
|
void iiiiiiii_ii(W a1, W a2, W a3, W a4, W a5, W a6, W a7, W a8, ...)
|
|
{
|
|
W a9, a10;
|
|
VASTART(a8);
|
|
VARG9();
|
|
CHECK();
|
|
}
|
|
|
|
void iiiiiiiii_i(W a1, W a2, W a3, W a4, W a5, W a6, W a7, W a8, W a9, ...)
|
|
{
|
|
W a10;
|
|
VASTART(a9);
|
|
VARG10();
|
|
CHECK();
|
|
}
|
|
|
|
void d_ddddddddd(D a1, ...)
|
|
{
|
|
D a2, a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a1);
|
|
VARGD2();
|
|
CHECK();
|
|
}
|
|
|
|
void dd_dddddddd(D a1, D a2, ...)
|
|
{
|
|
D a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a2);
|
|
VARGD3();
|
|
CHECK();
|
|
}
|
|
|
|
void ddd_ddddddd(D a1, D a2, D a3, ...)
|
|
{
|
|
D a4, a5, a6, a7, a8, a9, a10;
|
|
VASTART(a3);
|
|
VARGD4();
|
|
CHECK();
|
|
}
|
|
|
|
void dddd_dddddd(D a1, D a2, D a3, D a4, ...)
|
|
{
|
|
D a5, a6, a7, a8, a9, a10;
|
|
VASTART(a4);
|
|
VARGD5();
|
|
CHECK();
|
|
}
|
|
|
|
void ddddd_ddddd(D a1, D a2, D a3, D a4, D a5, ...)
|
|
{
|
|
D a6, a7, a8, a9, a10;
|
|
VASTART(a5);
|
|
VARGD6();
|
|
CHECK();
|
|
}
|
|
|
|
void dddddd_dddd(D a1, D a2, D a3, D a4, D a5, D a6, ...)
|
|
{
|
|
D a7, a8, a9, a10;
|
|
VASTART(a6);
|
|
VARGD7();
|
|
CHECK();
|
|
}
|
|
|
|
void ddddddd_ddd(D a1, D a2, D a3, D a4, D a5, D a6, D a7, ...)
|
|
{
|
|
D a8, a9, a10;
|
|
VASTART(a7);
|
|
VARGD8();
|
|
CHECK();
|
|
}
|
|
|
|
void dddddddd_dd(D a1, D a2, D a3, D a4, D a5, D a6, D a7, D a8, ...)
|
|
{
|
|
D a9, a10;
|
|
VASTART(a8);
|
|
VARGD9();
|
|
CHECK();
|
|
}
|
|
|
|
void ddddddddd_d(D a1, D a2, D a3, D a4, D a5, D a6, D a7, D a8, D a9, ...)
|
|
{
|
|
D a10;
|
|
VASTART(a9);
|
|
VARGD10();
|
|
CHECK();
|
|
}
|
|
|
|
void i_didididid(W a1, ...)
|
|
{
|
|
W a3, a5, a7, a9;
|
|
D a2, a4, a6, a8, a10;
|
|
VASTART(a1);
|
|
IDVARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void id_idididid(W a1, D a2, ...)
|
|
{
|
|
W a3, a5, a7, a9;
|
|
D a4, a6, a8, a10;
|
|
VASTART(a2);
|
|
IDVARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void idi_dididid(W a1, D a2, W a3, ...)
|
|
{
|
|
W a5, a7, a9;
|
|
D a4, a6, a8, a10;
|
|
VASTART(a3);
|
|
IDVARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void idid_ididid(W a1, D a2, W a3, D a4, ...)
|
|
{
|
|
W a5, a7, a9;
|
|
D a6, a8, a10;
|
|
VASTART(a4);
|
|
IDVARG5();
|
|
CHECK();
|
|
}
|
|
|
|
void ididi_didid(W a1, D a2, W a3, D a4, W a5, ...)
|
|
{
|
|
W a7, a9;
|
|
D a6, a8, a10;
|
|
VASTART(a5);
|
|
IDVARG6();
|
|
CHECK();
|
|
}
|
|
|
|
void ididid_idid(W a1, D a2, W a3, D a4, W a5, D a6, ...)
|
|
{
|
|
W a7, a9;
|
|
D a8, a10;
|
|
VASTART(a6);
|
|
IDVARG7();
|
|
CHECK();
|
|
}
|
|
|
|
void idididi_did(W a1, D a2, W a3, D a4, W a5, D a6, W a7, ...)
|
|
{
|
|
W a9;
|
|
D a8, a10;
|
|
VASTART(a7);
|
|
IDVARG8();
|
|
CHECK();
|
|
}
|
|
|
|
void idididid_id(W a1, D a2, W a3, D a4, W a5, D a6, W a7, D a8, ...)
|
|
{
|
|
W a9;
|
|
D a10;
|
|
VASTART(a8);
|
|
IDVARG9();
|
|
CHECK();
|
|
}
|
|
|
|
void ididididi_d(W a1, D a2, W a3, D a4, W a5, D a6, W a7, D a8, W a9, ...)
|
|
{
|
|
D a10;
|
|
VASTART(a9);
|
|
IDVARG10();
|
|
CHECK();
|
|
}
|
|
|
|
void d_ididididi(D a1, ...)
|
|
{
|
|
W a2, a4, a6, a8, a10;
|
|
D a3, a5, a7, a9;
|
|
VASTART(a1);
|
|
DIVARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void di_didididi(D a1, W a2, ...)
|
|
{
|
|
W a4, a6, a8, a10;
|
|
D a3, a5, a7, a9;
|
|
VASTART(a2);
|
|
DIVARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void did_idididi(D a1, W a2, D a3, ...)
|
|
{
|
|
W a4, a6, a8, a10;
|
|
D a5, a7, a9;
|
|
VASTART(a3);
|
|
DIVARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void didi_dididi(D a1, W a2, D a3, W a4, ...)
|
|
{
|
|
W a6, a8, a10;
|
|
D a5, a7, a9;
|
|
VASTART(a4);
|
|
DIVARG5();
|
|
CHECK();
|
|
}
|
|
|
|
void didid_ididi(D a1, W a2, D a3, W a4, D a5, ...)
|
|
{
|
|
W a6, a8, a10;
|
|
D a7, a9;
|
|
VASTART(a5);
|
|
DIVARG6();
|
|
CHECK();
|
|
}
|
|
|
|
void dididi_didi(D a1, W a2, D a3, W a4, D a5, W a6, ...)
|
|
{
|
|
W a8, a10;
|
|
D a7, a9;
|
|
VASTART(a6);
|
|
DIVARG7();
|
|
CHECK();
|
|
}
|
|
|
|
void dididid_idi(D a1, W a2, D a3, W a4, D a5, W a6, D a7, ...)
|
|
{
|
|
W a8, a10;
|
|
D a9;
|
|
VASTART(a7);
|
|
DIVARG8();
|
|
CHECK();
|
|
}
|
|
|
|
void didididi_di(D a1, W a2, D a3, W a4, D a5, W a6, D a7, W a8, ...)
|
|
{
|
|
W a10;
|
|
D a9;
|
|
VASTART(a8);
|
|
DIVARG9();
|
|
CHECK();
|
|
}
|
|
|
|
void didididid_i(D a1, W a2, D a3, W a4, D a5, W a6, D a7, W a8, D a9, ...)
|
|
{
|
|
W a10;
|
|
VASTART(a9);
|
|
DIVARG10();
|
|
CHECK();
|
|
}
|
|
|
|
void va_i_iiiiiiiii(W a1, va_list ap)
|
|
{
|
|
W a2, a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void va_ii_iiiiiiii(W a1, W a2, va_list ap)
|
|
{
|
|
W a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void va_iii_iiiiiii(W a1, W a2, W a3, va_list ap)
|
|
{
|
|
W a4, a5, a6, a7, a8, a9, a10;
|
|
VARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void va_iiii_iiiiii(W a1, W a2, W a3, W a4, va_list ap)
|
|
{
|
|
W a5, a6, a7, a8, a9, a10;
|
|
VARG5();
|
|
CHECK();
|
|
}
|
|
|
|
|
|
void va_d_ddddddddd(D a1, va_list ap)
|
|
{
|
|
D a2, a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VARGD2();
|
|
CHECK();
|
|
}
|
|
|
|
void va_dd_dddddddd(D a1, D a2, va_list ap)
|
|
{
|
|
D a3, a4, a5, a6, a7, a8, a9, a10;
|
|
VARGD3();
|
|
CHECK();
|
|
}
|
|
|
|
void va_ddd_ddddddd(D a1, D a2, D a3, va_list ap)
|
|
{
|
|
D a4, a5, a6, a7, a8, a9, a10;
|
|
VARGD4();
|
|
CHECK();
|
|
}
|
|
|
|
void va_dddd_dddddd(D a1, D a2, D a3, D a4, va_list ap)
|
|
{
|
|
D a5, a6, a7, a8, a9, a10;
|
|
VARGD5();
|
|
CHECK();
|
|
}
|
|
|
|
void va_i_didididid(W a1, va_list ap)
|
|
{
|
|
W a3, a5, a7, a9;
|
|
D a2, a4, a6, a8, a10;
|
|
IDVARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void va_id_idididid(W a1, D a2, va_list ap)
|
|
{
|
|
W a3, a5, a7, a9;
|
|
D a4, a6, a8, a10;
|
|
IDVARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void va_idi_dididid(W a1, D a2, W a3, va_list ap)
|
|
{
|
|
W a5, a7, a9;
|
|
D a4, a6, a8, a10;
|
|
IDVARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void va_idid_ididid(W a1, D a2, W a3, D a4, va_list ap)
|
|
{
|
|
W a5, a7, a9;
|
|
D a6, a8, a10;
|
|
IDVARG5();
|
|
CHECK();
|
|
}
|
|
|
|
void va_d_ididididi(D a1, va_list ap)
|
|
{
|
|
W a2, a4, a6, a8, a10;
|
|
D a3, a5, a7, a9;
|
|
DIVARG2();
|
|
CHECK();
|
|
}
|
|
|
|
void va_di_didididi(D a1, W a2, va_list ap)
|
|
{
|
|
W a4, a6, a8, a10;
|
|
D a3, a5, a7, a9;
|
|
DIVARG3();
|
|
CHECK();
|
|
}
|
|
|
|
void va_did_idididi(D a1, W a2, D a3, va_list ap)
|
|
{
|
|
W a4, a6, a8, a10;
|
|
D a5, a7, a9;
|
|
DIVARG4();
|
|
CHECK();
|
|
}
|
|
|
|
void va_didi_dididi(D a1, W a2, D a3, W a4, va_list ap)
|
|
{
|
|
W a6, a8, a10;
|
|
D a5, a7, a9;
|
|
DIVARG5();
|
|
CHECK();
|
|
}
|
|
|
|
#define PUSH1() jit_pushargi(1)
|
|
#define PUSH2() PUSH1(); jit_pushargi(2)
|
|
#define PUSH3() PUSH2(); jit_pushargi(3)
|
|
#define PUSH4() PUSH3(); jit_pushargi(4)
|
|
#define PUSH5() PUSH4(); jit_pushargi(5)
|
|
#define PUSH6() PUSH5(); jit_pushargi(6)
|
|
#define PUSH7() PUSH6(); jit_pushargi(7)
|
|
#define PUSH8() PUSH7(); jit_pushargi(8)
|
|
#define PUSH9() PUSH8(); jit_pushargi(9)
|
|
#define VPUSH2() jit_pushargi(2); VPUSH3()
|
|
#define VPUSH3() jit_pushargi(3); VPUSH4()
|
|
#define VPUSH4() jit_pushargi(4); VPUSH5()
|
|
#define VPUSH5() jit_pushargi(5); VPUSH6()
|
|
#define VPUSH6() jit_pushargi(6); VPUSH7()
|
|
#define VPUSH7() jit_pushargi(7); VPUSH8()
|
|
#define VPUSH8() jit_pushargi(8); VPUSH9()
|
|
#define VPUSH9() jit_pushargi(9); VPUSH10()
|
|
#define VPUSH10() jit_pushargi(10);
|
|
#define PUSHD1() jit_pushargi_d(1)
|
|
#define PUSHD2() PUSHD1(); jit_pushargi_d(2)
|
|
#define PUSHD3() PUSHD2(); jit_pushargi_d(3)
|
|
#define PUSHD4() PUSHD3(); jit_pushargi_d(4)
|
|
#define PUSHD5() PUSHD4(); jit_pushargi_d(5)
|
|
#define PUSHD6() PUSHD5(); jit_pushargi_d(6)
|
|
#define PUSHD7() PUSHD6(); jit_pushargi_d(7)
|
|
#define PUSHD8() PUSHD7(); jit_pushargi_d(8)
|
|
#define PUSHD9() PUSHD8(); jit_pushargi_d(9)
|
|
#define VPUSHD2() jit_pushargi_d(2); VPUSHD3()
|
|
#define VPUSHD3() jit_pushargi_d(3); VPUSHD4()
|
|
#define VPUSHD4() jit_pushargi_d(4); VPUSHD5()
|
|
#define VPUSHD5() jit_pushargi_d(5); VPUSHD6()
|
|
#define VPUSHD6() jit_pushargi_d(6); VPUSHD7()
|
|
#define VPUSHD7() jit_pushargi_d(7); VPUSHD8()
|
|
#define VPUSHD8() jit_pushargi_d(8); VPUSHD9()
|
|
#define VPUSHD9() jit_pushargi_d(9); VPUSHD10()
|
|
#define VPUSHD10() jit_pushargi_d(10);
|
|
#define IDPUSH1() jit_pushargi(1)
|
|
#define IDPUSH2() IDPUSH1(); jit_pushargi_d(2)
|
|
#define IDPUSH3() IDPUSH2(); jit_pushargi(3)
|
|
#define IDPUSH4() IDPUSH3(); jit_pushargi_d(4)
|
|
#define IDPUSH5() IDPUSH4(); jit_pushargi(5)
|
|
#define IDPUSH6() IDPUSH5(); jit_pushargi_d(6)
|
|
#define IDPUSH7() IDPUSH6(); jit_pushargi(7)
|
|
#define IDPUSH8() IDPUSH7(); jit_pushargi_d(8)
|
|
#define IDPUSH9() IDPUSH8(); jit_pushargi(9)
|
|
#define IDVPUSH2() jit_pushargi_d(2); IDVPUSH3()
|
|
#define IDVPUSH3() jit_pushargi(3); IDVPUSH4()
|
|
#define IDVPUSH4() jit_pushargi_d(4); IDVPUSH5()
|
|
#define IDVPUSH5() jit_pushargi(5); IDVPUSH6()
|
|
#define IDVPUSH6() jit_pushargi_d(6); IDVPUSH7()
|
|
#define IDVPUSH7() jit_pushargi(7); IDVPUSH8()
|
|
#define IDVPUSH8() jit_pushargi_d(8); IDVPUSH9()
|
|
#define IDVPUSH9() jit_pushargi(9); IDVPUSH10()
|
|
#define IDVPUSH10() jit_pushargi_d(10);
|
|
#define DIPUSH1() jit_pushargi_d(1)
|
|
#define DIPUSH2() DIPUSH1(); jit_pushargi(2)
|
|
#define DIPUSH3() DIPUSH2(); jit_pushargi_d(3)
|
|
#define DIPUSH4() DIPUSH3(); jit_pushargi(4)
|
|
#define DIPUSH5() DIPUSH4(); jit_pushargi_d(5)
|
|
#define DIPUSH6() DIPUSH5(); jit_pushargi(6)
|
|
#define DIPUSH7() DIPUSH6(); jit_pushargi_d(7)
|
|
#define DIPUSH8() DIPUSH7(); jit_pushargi(8)
|
|
#define DIPUSH9() DIPUSH8(); jit_pushargi_d(9)
|
|
#define DIVPUSH2() jit_pushargi(2); DIVPUSH3()
|
|
#define DIVPUSH3() jit_pushargi_d(3); DIVPUSH4()
|
|
#define DIVPUSH4() jit_pushargi(4); DIVPUSH5()
|
|
#define DIVPUSH5() jit_pushargi_d(5); DIVPUSH6()
|
|
#define DIVPUSH6() jit_pushargi(6); DIVPUSH7()
|
|
#define DIVPUSH7() jit_pushargi_d(7); DIVPUSH8()
|
|
#define DIVPUSH8() jit_pushargi(8); DIVPUSH9()
|
|
#define DIVPUSH9() jit_pushargi_d(9); DIVPUSH10()
|
|
#define DIVPUSH10() jit_pushargi(10);
|
|
|
|
jit_state_t *_jit;
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
void (*function)(void);
|
|
jit_node_t *jmpi_main;
|
|
jit_node_t *a1, *a2, *node;
|
|
jit_node_t *jva_i_iiiiiiiii, *jva_ii_iiiiiiii;
|
|
jit_node_t *jva_d_ddddddddd, *jva_dd_dddddddd;
|
|
jit_node_t *jva_i_didididid, *jva_id_idididid;
|
|
jit_node_t *jva_d_ididididi, *jva_di_didididi;
|
|
jit_node_t *jva_iii_iiiiiii, *jva_iiii_iiiiii;
|
|
jit_node_t *jva_ddd_ddddddd, *jva_dddd_dddddd;
|
|
jit_node_t *jva_idi_dididid, *jva_idid_ididid;
|
|
jit_node_t *jva_did_idididi, *jva_didi_dididi;
|
|
|
|
init_jit(argv[0]);
|
|
_jit = jit_new_state();
|
|
|
|
jmpi_main = jit_jmpi();
|
|
|
|
/* Define simple functions to validate a jit_va_list_t
|
|
* is a valid va_list; these do not fetch arguments from
|
|
* the va_list. */
|
|
jva_i_iiiiiiiii = jit_label();
|
|
jit_name("va_i_iiiiiiiii");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_i_iiiiiiiii);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_ii_iiiiiiii = jit_label();
|
|
jit_name("va_ii_iiiiiiii");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
a2 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
jit_getarg(JIT_V2, a2);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V2);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_ii_iiiiiiii);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_d_ddddddddd = jit_label();
|
|
jit_name("va_d_ddddddddd");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_d_ddddddddd);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_dd_dddddddd = jit_label();
|
|
jit_name("va_dd_dddddddd");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
a2 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
jit_getarg_d(JIT_F4, a2);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr_d(JIT_F4);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_dd_dddddddd);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_i_didididid = jit_label();
|
|
jit_name("va_i_didididid");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_i_didididid);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_id_idididid = jit_label();
|
|
jit_name("va_id_idididid");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
a2 = jit_arg_d();
|
|
jit_getarg(JIT_V1, a1);
|
|
jit_getarg_d(JIT_F3, a2);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_id_idididid);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_d_ididididi = jit_label();
|
|
jit_name("va_d_ididididi");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_d_ididididi);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_di_didididi = jit_label();
|
|
jit_name("va_di_didididi");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
a2 = jit_arg();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
jit_getarg(JIT_V1, a2);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_di_didididi);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
|
|
/* Define complex functions to validate a jit_va_list_t
|
|
* is a valid va_list; these do fetch arguments from
|
|
* the va_list, to ensure it does the correct operations
|
|
* fetching arguments, and pass a valid va_list to the
|
|
* C function. */
|
|
jva_iii_iiiiiii = jit_label();
|
|
jit_name("va_iii_iiiiiii");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
node = jit_beqi(JIT_V1, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_va_arg(JIT_V2, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi(1);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V2);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_iii_iiiiiii);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_iiii_iiiiii = jit_label();
|
|
jit_name("va_iiii_iiiiii");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
a2 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
node = jit_beqi(JIT_V1, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_getarg(JIT_V1, a2);
|
|
node = jit_beqi(JIT_V1, 2);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_va_arg(JIT_V2, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi(1);
|
|
jit_pushargi(2);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V2);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_iiii_iiiiii);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_ddd_ddddddd = jit_label();
|
|
jit_name("va_ddd_ddddddd");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
node = jit_beqi_d(JIT_F3, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_va_arg_d(JIT_F4, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi_d(1);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr_d(JIT_F4);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_ddd_ddddddd);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_dddd_dddddd = jit_label();
|
|
jit_name("va_dddd_dddddd");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
a2 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
node = jit_beqi_d(JIT_F3, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_getarg_d(JIT_F3, a2);
|
|
node = jit_beqi_d(JIT_F3, 2);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_va_arg_d(JIT_F4, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi_d(1);
|
|
jit_pushargi_d(2);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr_d(JIT_F4);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_dddd_dddddd);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_idi_dididid = jit_label();
|
|
jit_name("va_idi_dididid");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
jit_getarg(JIT_V1, a1);
|
|
node = jit_beqi(JIT_V1, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi(1);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_idi_dididid);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_idid_ididid = jit_label();
|
|
jit_name("va_idid_ididid");
|
|
jit_prolog();
|
|
a1 = jit_arg();
|
|
a2 = jit_arg_d();
|
|
jit_getarg(JIT_V1, a1);
|
|
node = jit_beqi(JIT_V1, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_getarg_d(JIT_F3, a2);
|
|
node = jit_beqi_d(JIT_F3, 2);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi(1);
|
|
jit_pushargi_d(2);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_idid_ididid);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_did_idididi = jit_label();
|
|
jit_name("va_did_idididi");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
node = jit_beqi_d(JIT_F3, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi_d(1);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_did_idididi);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
jva_didi_dididi = jit_label();
|
|
jit_name("va_didi_dididi");
|
|
jit_prolog();
|
|
a1 = jit_arg_d();
|
|
a2 = jit_arg();
|
|
jit_getarg_d(JIT_F3, a1);
|
|
node = jit_beqi_d(JIT_F3, 1);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_getarg(JIT_V1, a2);
|
|
node = jit_beqi(JIT_V1, 2);
|
|
jit_calli(abort);
|
|
jit_patch(node);
|
|
jit_ellipsis();
|
|
jit_va_start(JIT_V0);
|
|
jit_va_arg_d(JIT_F3, JIT_V0);
|
|
jit_va_arg(JIT_V1, JIT_V0);
|
|
jit_prepare();
|
|
jit_pushargi_d(1);
|
|
jit_pushargi(2);
|
|
jit_pushargr_d(JIT_F3);
|
|
jit_pushargr(JIT_V1);
|
|
jit_pushargr(JIT_V0);
|
|
jit_finishi(va_didi_dididi);
|
|
jit_va_end(JIT_V0);
|
|
jit_ret();
|
|
jit_epilog();
|
|
|
|
jit_patch(jmpi_main);
|
|
jit_name("main");
|
|
jit_prolog();
|
|
|
|
/* Check that lightning properly calls vararg functions */
|
|
jit_prepare();
|
|
PUSH1();
|
|
jit_ellipsis();
|
|
VPUSH2();
|
|
jit_finishi(i_iiiiiiiii);
|
|
jit_prepare();
|
|
PUSH2();
|
|
jit_ellipsis();
|
|
VPUSH3();
|
|
jit_finishi(ii_iiiiiiii);
|
|
jit_prepare();
|
|
PUSH3();
|
|
jit_ellipsis();
|
|
VPUSH4();
|
|
jit_finishi(iii_iiiiiii);
|
|
jit_prepare();
|
|
PUSH4();
|
|
jit_ellipsis();
|
|
VPUSH5();
|
|
jit_finishi(iiii_iiiiii);
|
|
jit_prepare();
|
|
PUSH5();
|
|
jit_ellipsis();
|
|
VPUSH6();
|
|
jit_finishi(iiiii_iiiii);
|
|
jit_prepare();
|
|
PUSH6();
|
|
jit_ellipsis();
|
|
VPUSH7();
|
|
jit_finishi(iiiiii_iiii);
|
|
jit_prepare();
|
|
PUSH7();
|
|
jit_ellipsis();
|
|
VPUSH8();
|
|
jit_finishi(iiiiiii_iii);
|
|
jit_prepare();
|
|
PUSH8();
|
|
jit_ellipsis();
|
|
VPUSH9();
|
|
jit_finishi(iiiiiiii_ii);
|
|
jit_prepare();
|
|
PUSH9();
|
|
jit_ellipsis();
|
|
VPUSH10();
|
|
jit_finishi(iiiiiiiii_i);
|
|
jit_prepare();
|
|
PUSHD1();
|
|
jit_ellipsis();
|
|
VPUSHD2();
|
|
jit_finishi(d_ddddddddd);
|
|
jit_prepare();
|
|
PUSHD2();
|
|
jit_ellipsis();
|
|
VPUSHD3();
|
|
jit_finishi(dd_dddddddd);
|
|
jit_prepare();
|
|
PUSHD3();
|
|
jit_ellipsis();
|
|
VPUSHD4();
|
|
jit_finishi(ddd_ddddddd);
|
|
jit_prepare();
|
|
PUSHD4();
|
|
jit_ellipsis();
|
|
VPUSHD5();
|
|
jit_finishi(dddd_dddddd);
|
|
jit_prepare();
|
|
PUSHD5();
|
|
jit_ellipsis();
|
|
VPUSHD6();
|
|
jit_finishi(ddddd_ddddd);
|
|
jit_prepare();
|
|
PUSHD6();
|
|
jit_ellipsis();
|
|
VPUSHD7();
|
|
jit_finishi(dddddd_dddd);
|
|
jit_prepare();
|
|
PUSHD7();
|
|
jit_ellipsis();
|
|
VPUSHD8();
|
|
jit_finishi(ddddddd_ddd);
|
|
jit_prepare();
|
|
PUSHD8();
|
|
jit_ellipsis();
|
|
VPUSHD9();
|
|
jit_finishi(dddddddd_dd);
|
|
jit_prepare();
|
|
PUSHD9();
|
|
jit_ellipsis();
|
|
VPUSHD10();
|
|
jit_finishi(ddddddddd_d);
|
|
jit_prepare();
|
|
IDPUSH1();
|
|
jit_ellipsis();
|
|
IDVPUSH2();
|
|
jit_finishi(i_didididid);
|
|
jit_prepare();
|
|
IDPUSH2();
|
|
jit_ellipsis();
|
|
IDVPUSH3();
|
|
jit_finishi(id_idididid);
|
|
jit_prepare();
|
|
IDPUSH3();
|
|
jit_ellipsis();
|
|
IDVPUSH4();
|
|
jit_finishi(idi_dididid);
|
|
jit_prepare();
|
|
IDPUSH4();
|
|
jit_ellipsis();
|
|
IDVPUSH5();
|
|
jit_finishi(idid_ididid);
|
|
jit_prepare();
|
|
IDPUSH5();
|
|
jit_ellipsis();
|
|
IDVPUSH6();
|
|
jit_finishi(ididi_didid);
|
|
jit_prepare();
|
|
IDPUSH6();
|
|
jit_ellipsis();
|
|
IDVPUSH7();
|
|
jit_finishi(ididid_idid);
|
|
jit_prepare();
|
|
IDPUSH7();
|
|
jit_ellipsis();
|
|
IDVPUSH8();
|
|
jit_finishi(idididi_did);
|
|
jit_prepare();
|
|
IDPUSH8();
|
|
jit_ellipsis();
|
|
IDVPUSH9();
|
|
jit_finishi(idididid_id);
|
|
jit_prepare();
|
|
IDPUSH9();
|
|
jit_ellipsis();
|
|
IDVPUSH10();
|
|
jit_finishi(ididididi_d);
|
|
jit_prepare();
|
|
DIPUSH1();
|
|
jit_ellipsis();
|
|
DIVPUSH2();
|
|
jit_finishi(d_ididididi);
|
|
jit_prepare();
|
|
DIPUSH2();
|
|
jit_ellipsis();
|
|
DIVPUSH3();
|
|
jit_finishi(di_didididi);
|
|
jit_prepare();
|
|
DIPUSH3();
|
|
jit_ellipsis();
|
|
DIVPUSH4();
|
|
jit_finishi(did_idididi);
|
|
jit_prepare();
|
|
DIPUSH4();
|
|
jit_ellipsis();
|
|
DIVPUSH5();
|
|
jit_finishi(didi_dididi);
|
|
jit_prepare();
|
|
DIPUSH5();
|
|
jit_ellipsis();
|
|
DIVPUSH6();
|
|
jit_finishi(didid_ididi);
|
|
jit_prepare();
|
|
DIPUSH6();
|
|
jit_ellipsis();
|
|
DIVPUSH7();
|
|
jit_finishi(dididi_didi);
|
|
jit_prepare();
|
|
DIPUSH7();
|
|
jit_ellipsis();
|
|
DIVPUSH8();
|
|
jit_finishi(dididid_idi);
|
|
jit_prepare();
|
|
DIPUSH8();
|
|
jit_ellipsis();
|
|
DIVPUSH9();
|
|
jit_finishi(didididi_di);
|
|
jit_prepare();
|
|
DIPUSH9();
|
|
jit_ellipsis();
|
|
DIVPUSH10();
|
|
jit_finishi(didididid_i);
|
|
|
|
/* Check that unmodified jit_va_list_t is a valid va_list */
|
|
jit_prepare();
|
|
PUSH1();
|
|
jit_ellipsis();
|
|
VPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_i_iiiiiiiii);
|
|
jit_prepare();
|
|
PUSH2();
|
|
jit_ellipsis();
|
|
VPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_ii_iiiiiiii);
|
|
jit_prepare();
|
|
PUSHD1();
|
|
jit_ellipsis();
|
|
VPUSHD2();
|
|
jit_patch_at(jit_finishi(NULL), jva_d_ddddddddd);
|
|
jit_prepare();
|
|
PUSHD2();
|
|
jit_ellipsis();
|
|
VPUSHD3();
|
|
jit_patch_at(jit_finishi(NULL), jva_dd_dddddddd);
|
|
jit_prepare();
|
|
IDPUSH1();
|
|
jit_ellipsis();
|
|
IDVPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_i_didididid);
|
|
jit_prepare();
|
|
IDPUSH2();
|
|
jit_ellipsis();
|
|
IDVPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_id_idididid);
|
|
jit_prepare();
|
|
DIPUSH1();
|
|
jit_ellipsis();
|
|
DIVPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_d_ididididi);
|
|
jit_prepare();
|
|
DIPUSH2();
|
|
jit_ellipsis();
|
|
DIVPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_di_didididi);
|
|
|
|
/* Check that modified jit_va_list_t is a valid va_list */
|
|
jit_prepare();
|
|
PUSH1();
|
|
jit_ellipsis();
|
|
VPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_iii_iiiiiii);
|
|
jit_prepare();
|
|
PUSH2();
|
|
jit_ellipsis();
|
|
VPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_iiii_iiiiii);
|
|
jit_prepare();
|
|
PUSHD1();
|
|
jit_ellipsis();
|
|
VPUSHD2();
|
|
jit_patch_at(jit_finishi(NULL), jva_ddd_ddddddd);
|
|
jit_prepare();
|
|
PUSHD2();
|
|
jit_ellipsis();
|
|
VPUSHD3();
|
|
jit_patch_at(jit_finishi(NULL), jva_dddd_dddddd);
|
|
jit_prepare();
|
|
IDPUSH1();
|
|
jit_ellipsis();
|
|
IDVPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_idi_dididid);
|
|
jit_prepare();
|
|
IDPUSH2();
|
|
jit_ellipsis();
|
|
IDVPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_idid_ididid);
|
|
jit_prepare();
|
|
DIPUSH1();
|
|
jit_ellipsis();
|
|
DIVPUSH2();
|
|
jit_patch_at(jit_finishi(NULL), jva_did_idididi);
|
|
jit_prepare();
|
|
DIPUSH2();
|
|
jit_ellipsis();
|
|
DIVPUSH3();
|
|
jit_patch_at(jit_finishi(NULL), jva_didi_dididi);
|
|
|
|
jit_ret();
|
|
jit_epilog();
|
|
|
|
|
|
function = jit_emit();
|
|
jit_clear_state();
|
|
//jit_disassemble();
|
|
(*function)();
|
|
jit_destroy_state();
|
|
|
|
finish_jit();
|
|
|
|
printf("ok\n");
|
|
return 0;
|
|
}
|