1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 17:20:29 +02:00

Add jit_ellipis and remove jit_prepare argument.

* include/lightning.h, lib/jit_arm.c, lib/jit_mips.c,
	lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Change jit_prepare
	to no longer receive an argument. If receiving an argument, it
	should be an ABI specifier, not a boolean if varargs or not,
	and add the new jit_ellipsis call, to specify where the
	ellipsis is in the C prototype of the function being called.
	Note that currently it is not supported to define varargs
	functions and it will be ignored if calling jit_ellipsis not
	in a prepare/finish* block, but this should be addressed.

	* check/allocai.tst, check/alu_add.tst, check/alu_and.tst,
	check/alu_com.tst, check/alu_div.tst, check/alu_lsh.tst,
	check/alu_mul.tst, check/alu_neg.tst, check/alu_or.tst,
	check/alu_rem.tst, check/alu_rsh.tst, check/alu_sub.tst,
	check/alu_xor.tst, check/alux_add.tst, check/alux_sub.tst,
	check/bp.tst, check/branch.tst, check/cvt.tst, check/divi.tst,
	check/fib.tst, check/ldsti.tst, check/ldstr-c.tst,
	check/ldstr.tst, check/ldstxi-c.tst, check/ldstxi.tst,
	check/ldstxr-c.tst, check/ldstxr.tst, check/rpn.tst,
	check/lightning.c: Update for the change to jit_prepare and
	addition of jit_ellipsis.
This commit is contained in:
pcpa 2012-12-12 22:59:52 -02:00
parent a04df966c0
commit 0b89a17ca2
39 changed files with 165 additions and 70 deletions

View file

@ -1,3 +1,27 @@
2012-12-12 Paulo Andrade <pcpa@gnu.org>
* include/lightning.h, lib/jit_arm.c, lib/jit_mips.c,
lib/jit_ppc.c, lib/jit_x86.c, lib/lightning.c: Change jit_prepare
to no longer receive an argument. If receiving an argument, it
should be an ABI specifier, not a boolean if varargs or not,
and add the new jit_ellipsis call, to specify where the
ellipsis is in the C prototype of the function being called.
Note that currently it is not supported to define varargs
functions and it will be ignored if calling jit_ellipsis not
in a prepare/finish* block, but this should be addressed.
* check/allocai.tst, check/alu_add.tst, check/alu_and.tst,
check/alu_com.tst, check/alu_div.tst, check/alu_lsh.tst,
check/alu_mul.tst, check/alu_neg.tst, check/alu_or.tst,
check/alu_rem.tst, check/alu_rsh.tst, check/alu_sub.tst,
check/alu_xor.tst, check/alux_add.tst, check/alux_sub.tst,
check/bp.tst, check/branch.tst, check/cvt.tst, check/divi.tst,
check/fib.tst, check/ldsti.tst, check/ldstr-c.tst,
check/ldstr.tst, check/ldstxi-c.tst, check/ldstxi.tst,
check/ldstxr-c.tst, check/ldstxr.tst, check/rpn.tst,
check/lightning.c: Update for the change to jit_prepare and
addition of jit_ellipsis.
2012-12-11 Paulo Andrade <pcpa@gnu.org> 2012-12-11 Paulo Andrade <pcpa@gnu.org>
* lib/jit_ppc-cpu.c: Make movr a function that checks arguments * lib/jit_ppc-cpu.c: Make movr a function that checks arguments

View file

@ -18,13 +18,14 @@ test_double_##a##_##b##_##c: \
retr_d %a \ retr_d %a \
epilog epilog
#define test_double(a, b, c, x, y) \ #define test_double(a, b, c, x, y) \
prepare 0 \ prepare \
pushargi_d x \ pushargi_d x \
pushargi_d y \ pushargi_d y \
finishi test_double_##a##_##b##_##c \ finishi test_double_##a##_##b##_##c \
retval_d %f0 \ retval_d %f0 \
prepare 1 \ prepare \
pushargi dfmt \ pushargi dfmt \
ellipsis \
pushargr_d %f0 \ pushargr_d %f0 \
finishi @printf finishi @printf
@ -39,13 +40,14 @@ test_int_##a##_##b##_##c: \
retr %a \ retr %a \
epilog epilog
#define test_int(a, b, c, x, y) \ #define test_int(a, b, c, x, y) \
prepare 0 \ prepare \
pushargi x \ pushargi x \
pushargi y \ pushargi y \
finishi test_int_##a##_##b##_##c \ finishi test_int_##a##_##b##_##c \
retval %r0 \ retval %r0 \
prepare 1 \ prepare \
pushargi ifmt \ pushargi ifmt \
ellipsis \
pushargr %r0 \ pushargr %r0 \
finishi @printf finishi @printf

View file

@ -17,13 +17,14 @@ test:
main: main:
prolog prolog
prepare 0 prepare
pushargi 5 pushargi 5
pushargi 4 pushargi 4
finishi test finishi test
retval %r0 retval %r0
prepare 1 prepare
pushargi fmt pushargi fmt
ellipsis
pushargi 5 pushargi 5
pushargi 4 pushargi 4
pushargr %r0 pushargr %r0

View file

@ -196,11 +196,12 @@ label:
jmpi label jmpi label
callr %r0 callr %r0
calli label calli label
prepare 0 prepare
pushargr %r0 pushargr %r0
finishr %r0 finishr %r0
prepare 1 prepare
pushargi 1 pushargi 1
ellipsis
finishi 0x80000000 finishi 0x80000000
ret ret
retr %r1 retr %r1
@ -303,7 +304,7 @@ unordi:
bordi_f unordi %f0 0.5 bordi_f unordi %f0 0.5
bunordr_f unord %f0 %f1 bunordr_f unord %f0 %f1
bunordi_f unordi %f0 0.5 bunordi_f unordi %f0 0.5
prepare 0 prepare
pushargr_f %f1 pushargr_f %f1
pushargi_f 0.5 pushargi_f 0.5
finishi 0x80000000 finishi 0x80000000
@ -395,7 +396,7 @@ unordi:
bordi_d unordi %f0 0.5 bordi_d unordi %f0 0.5
bunordr_d unord %f0 %f1 bunordr_d unord %f0 %f1
bunordi_d unordi %f0 0.5 bunordi_d unordi %f0 0.5
prepare 0 prepare
pushargr_d %f1 pushargr_d %f1
pushargi_d 0.5 pushargi_d 0.5
finishi 0x80000000 finishi 0x80000000

View file

@ -23,8 +23,9 @@ identify:
prolog prolog
arg $i arg $i
getarg %v0 $i getarg %v0 $i
prepare 1 prepare
pushargi idfmt pushargi idfmt
ellipsis
pushargr %v0 pushargr %v0
finishi @printf finishi @printf
retr %v0 retr %v0
@ -45,7 +46,7 @@ identity_func:
stxi $neg %fp %r2 stxi $neg %fp %r2
/* Invoke FUNC. */ /* Invoke FUNC. */
prepare 0 prepare
pushargr %r1 pushargr %r1
finishi identify finishi identify
@ -64,8 +65,9 @@ identity_func:
/* Display a failure message. */ /* Display a failure message. */
branch: branch:
prepare 1 prepare
pushargi failure_message pushargi failure_message
ellipsis
finishi @printf finishi @printf
/* Leave. */ /* Leave. */
@ -74,19 +76,21 @@ branch:
main: main:
prolog prolog
prepare 0 prepare
pushargi 7777 pushargi 7777
finishi identity_func finishi identity_func
beqi succeeded %ret 7777 beqi succeeded %ret 7777
prepare 1 prepare
pushargi report_message pushargi report_message
ellipsis
pushargr %ret pushargr %ret
pushargi 7777 pushargi 7777
finishi @printf finishi @printf
reti 1 reti 1
succeeded: succeeded:
prepare 1 prepare
pushargi succeeded_message pushargi succeeded_message
ellipsis
finishi @printf finishi @printf
reti 0 reti 0
epilog epilog

View file

@ -39,8 +39,9 @@
ADD(0, _d, -0.5, 0.5, 0.0) ADD(0, _d, -0.5, 0.5, 0.0)
ADD(1, _d, 0.25, 0.75, 1.0) ADD(1, _d, 0.25, 0.75, 1.0)
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -28,8 +28,9 @@
AND(19, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff) AND(19, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -25,8 +25,9 @@
COM(9, 0x8000000000000001, 0x7ffffffffffffffe) COM(9, 0x8000000000000001, 0x7ffffffffffffffe)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -75,8 +75,9 @@
DIV(0, _d, -0.5, 0.5, -1.0) DIV(0, _d, -0.5, 0.5, -1.0)
DIV(1, _d, 1.25, 0.5, 2.5) DIV(1, _d, 1.25, 0.5, 2.5)
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -49,8 +49,9 @@
LSH(30, 0xffffffffff, 47, 0xffff800000000000) LSH(30, 0xffffffffff, 47, 0xffff800000000000)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -51,8 +51,9 @@
MUL(0, _d, -0.5, 0.5, -0.25) MUL(0, _d, -0.5, 0.5, -0.25)
MUL(1, _d, 0.25, 0.75, 0.1875) MUL(1, _d, 0.25, 0.75, 0.1875)
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -34,8 +34,9 @@
NEG(2, _d, $(1.0 / 0), $(-1 / 0.0)) NEG(2, _d, $(1.0 / 0), $(-1 / 0.0))
NEG(3, _d, -1.25, 1.25) NEG(3, _d, -1.25, 1.25)
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -28,8 +28,9 @@
OR(19, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff) OR(19, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -68,8 +68,9 @@
UREM(26,0xffffffffffffffff, 0xffffffffffffffff, 0) UREM(26,0xffffffffffffffff, 0xffffffffffffffff, 0)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -77,8 +77,9 @@
URSH(31,0xffff800000000000, 47, 0x1ffff) URSH(31,0xffff800000000000, 47, 0x1ffff)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -41,8 +41,9 @@
SUB(0, _d, -0.5, 0.5, -1.0) SUB(0, _d, -0.5, 0.5, -1.0)
SUB(1, _d, 0.25, 0.75, -0.5) SUB(1, _d, 0.25, 0.75, -0.5)
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -28,8 +28,9 @@
XOR(20, 0xffffffffffffffff, 0xffffffffffffffff, 0) XOR(20, 0xffffffffffffffff, 0xffffffffffffffff, 0)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -41,8 +41,9 @@
ADDX(10,0x8000000000000000, 0x8000000000000000, 1) ADDX(10,0x8000000000000000, 0x8000000000000000, 1)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -41,8 +41,9 @@
SUBX(10,1, 0x8000000000000000, -1) SUBX(10,1, 0x8000000000000000, -1)
#endif #endif
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -13,11 +13,11 @@ rfibs:
blti_u out %v0 2 blti_u out %v0 2
subi %v1 %v0 1 /* V1 = N-1 */ subi %v1 %v0 1 /* V1 = N-1 */
subi %v2 %v0 2 /* V1 = N-2 */ subi %v2 %v0 2 /* V1 = N-2 */
prepare 0 prepare
pushargr %v1 pushargr %v1
finishi rfibs finishi rfibs
retval %v1 /* V1 = rfibs(N-1) */ retval %v1 /* V1 = rfibs(N-1) */
prepare 0 prepare
pushargr %v2 pushargr %v2
finishi rfibs finishi rfibs
retval %v2 /* V2 = rfibs(N-2) */ retval %v2 /* V2 = rfibs(N-2) */
@ -31,12 +31,13 @@ out:
main: main:
prolog prolog
prepare 0 prepare
pushargi 32 pushargi 32
finishi rfibs finishi rfibs
retval %v0 retval %v0
prepare 1 prepare
pushargi fmt pushargi fmt
ellipsis
pushargi 32 pushargi 32
pushargr %v0 pushargr %v0
finishi @printf finishi @printf

View file

@ -554,8 +554,9 @@ unordi_f_0:
unordi_f_1: unordi_f_1:
// just to know did not crash or abort // just to know did not crash or abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret

View file

@ -371,8 +371,9 @@ xdf:
EXTDF(f0, f1, f2, f3, f4, f5) EXTDF(f0, f1, f2, f3, f4, f5)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret

View file

@ -34,7 +34,7 @@ test_divider_##divisor: \
loop_##divisor: \ loop_##divisor: \
bger done_##divisor %v0 %v1 \ bger done_##divisor %v0 %v1 \
ldr_i %v2 %v0 \ ldr_i %v2 %v0 \
prepare 0 \ prepare \
pushargr %v2 \ pushargr %v2 \
finishi divider_##divisor \ finishi divider_##divisor \
retval %v2 \ retval %v2 \
@ -42,8 +42,9 @@ loop_##divisor: \
divi %r0 %r2 divisor \ divi %r0 %r2 divisor \
/* save div result */ \ /* save div result */ \
stxi_i $loc %fp %r0 \ stxi_i $loc %fp %r0 \
prepare 1 \ prepare \
pushargi fmt \ pushargi fmt \
ellipsis \
pushargr %r2 \ pushargr %r2 \
pushargi divisor \ pushargi divisor \
pushargr %v2 \ pushargr %v2 \
@ -63,12 +64,12 @@ generate_test_divider(32768)
main: main:
prolog prolog
prepare 0 prepare
pushargi small_ops pushargi small_ops
pushargi 3 pushargi 3
finishi test_divider_8 finishi test_divider_8
bnei fail %ret 0 bnei fail %ret 0
prepare 0 prepare
pushargi large_ops pushargi large_ops
pushargi 3 pushargi 3
finishi test_divider_32768 finishi test_divider_32768

View file

@ -34,7 +34,7 @@ main:
getarg %r0 $argv getarg %r0 $argv
addi %r0 %r0 $(__WORDSIZE >> 3) addi %r0 %r0 $(__WORDSIZE >> 3)
ldr %r0 %r0 ldr %r0 %r0
prepare 0 prepare
pushargr %r0 pushargr %r0
finishi @atoi finishi @atoi
retval %r0 retval %r0
@ -45,12 +45,13 @@ default:
call: call:
movr %v0 %r0 movr %v0 %r0
prepare 0 prepare
pushargr %r0 pushargr %r0
finishi nfibs finishi nfibs
retval %r0 retval %r0
prepare 1 prepare
pushargi format pushargi format
ellipsis
pushargr %v0 pushargr %v0
pushargr %r0 pushargr %r0
finishi @printf finishi @printf

View file

@ -141,8 +141,9 @@ Ld:
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -150,8 +150,9 @@ Ll:
LDST(v0, v1, v2, r0, r1, r2) LDST(v0, v1, v2, r0, r1, r2)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -178,8 +178,9 @@ Ld:
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -153,8 +153,9 @@ Ll:
LDST(v0, v1, v2, r0, r1, r2) LDST(v0, v1, v2, r0, r1, r2)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -149,8 +149,9 @@ Ld:
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -214,8 +214,9 @@ Ll1:
LDST(v0, v1, v2, r0, r1, r2) LDST(v0, v1, v2, r0, r1, r2)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -204,8 +204,9 @@ Ld:
LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5) LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
// just to know did not abort // just to know did not abort
prepare 1 prepare
pushargi ok pushargi ok
ellipsis
finishi @printf finishi @printf
ret ret
epilog epilog

View file

@ -242,7 +242,7 @@ static void call_forward(void *value, label_t *label);
static void make_arg(long value); static void make_arg(long value);
static long get_arg(void); static long get_arg(void);
static long get_imm(void); static long get_imm(void);
static void prolog(void); static void prolog(void); static void ellipsis(void);
static void allocai(void); static void allocai(void);
static void arg(void); static void arg(void);
static void getarg_c(void); static void getarg_uc(void); static void getarg_c(void); static void getarg_uc(void);
@ -533,7 +533,7 @@ static char *data;
static size_t data_offset, data_length; static size_t data_offset, data_length;
static instr_t instr_vector[] = { static instr_t instr_vector[] = {
#define entry(value) { NULL, #value, value } #define entry(value) { NULL, #value, value }
entry(prolog), entry(prolog), entry(ellipsis),
entry(allocai), entry(allocai),
entry(arg), entry(arg),
entry(getarg_c), entry(getarg_uc), entry(getarg_c), entry(getarg_uc),
@ -1211,7 +1211,7 @@ name(void) \
jit_##name(value); \ jit_##name(value); \
} }
entry(prolog) entry(prolog) entry(ellipsis)
void void
allocai(void) { allocai(void) {
symbol_t *symbol; symbol_t *symbol;
@ -1360,7 +1360,7 @@ entry_lb_ir_ir(bxsubr) entry_lb_ir_im(bxsubi)
entry_lb_ir_ir(bxsubr_u) entry_lb_ir_im(bxsubi_u) entry_lb_ir_ir(bxsubr_u) entry_lb_ir_im(bxsubi_u)
entry_ir(jmpr) entry_lb(jmpi) entry_ir(jmpr) entry_lb(jmpi)
entry_ir(callr) entry_fn(calli) entry_ir(callr) entry_fn(calli)
entry_im(prepare) entry(prepare)
entry_ir(pushargr) entry_im(pushargi) entry_ir(pushargr) entry_im(pushargi)
entry_ir(finishr) entry_fn(finishi) entry_ir(finishr) entry_fn(finishi)
entry(ret) entry(ret)

View file

@ -106,64 +106,74 @@ f2c:
main: main:
prolog prolog
prepare 1 prepare
pushargi C pushargi C
ellipsis
finishi @printf finishi @printf
movi %v0 0 movi %v0 0
loopC: loopC:
prepare 1 prepare
pushargi format pushargi format
ellipsis
pushargr %v0 pushargr %v0
finishi @printf finishi @printf
addi %v0 %v0 10 addi %v0 %v0 10
blei loopC %v0 100 blei loopC %v0 100
prepare 1 prepare
pushargi F pushargi F
ellipsis
finishi @printf finishi @printf
movi %v0 0 movi %v0 0
loopC2F: loopC2F:
prepare 0 prepare
pushargr %v0 pushargr %v0
finishi c2f finishi c2f
retval %r0 retval %r0
prepare 2 prepare
pushargi format pushargi format
ellipsis
pushargr %r0 pushargr %r0
finishi @printf finishi @printf
addi %v0 %v0 10 addi %v0 %v0 10
blei loopC2F %v0 100 blei loopC2F %v0 100
prepare 1 prepare
pushargi newline pushargi newline
ellipsis
finishi @printf finishi @printf
prepare 1 prepare
pushargi F pushargi F
ellipsis
finishi @printf finishi @printf
movi %v0 32 movi %v0 32
loopF: loopF:
prepare 2 prepare
pushargi format pushargi format
ellipsis
pushargr %v0 pushargr %v0
finishi @printf finishi @printf
addi %v0 %v0 18 addi %v0 %v0 18
blei loopF %v0 212 blei loopF %v0 212
prepare 1 prepare
pushargi C pushargi C
ellipsis
finishi @printf finishi @printf
movi %v0 32 movi %v0 32
loopF2C: loopF2C:
prepare 0 prepare
pushargr %v0 pushargr %v0
finishi f2c finishi f2c
retval %r0 retval %r0
prepare 2 prepare
pushargi format pushargi format
ellipsis
pushargr %r0 pushargr %r0
finishi @printf finishi @printf
addi %v0 %v0 18 addi %v0 %v0 18
blei loopF2C %v0 212 blei loopF2C %v0 212
prepare 1 prepare
pushargi newline pushargi newline
ellipsis
finishi @printf finishi @printf
ret ret

View file

@ -114,6 +114,7 @@ typedef enum {
#define jit_prolog() _jit_prolog(_jit) #define jit_prolog() _jit_prolog(_jit)
jit_code_prolog, jit_code_prolog,
#define jit_ellipsis() _jit_ellipsis(_jit)
#define jit_allocai(u) _jit_allocai(_jit,u) #define jit_allocai(u) _jit_allocai(_jit,u)
#define jit_arg() _jit_arg(_jit) #define jit_arg() _jit_arg(_jit)
@ -406,7 +407,7 @@ typedef enum {
#define jit_calli(u) jit_new_node_p(jit_code_calli,u) #define jit_calli(u) jit_new_node_p(jit_code_calli,u)
jit_code_callr, jit_code_calli, jit_code_callr, jit_code_calli,
#define jit_prepare(u) _jit_prepare(_jit,u) #define jit_prepare() _jit_prepare(_jit)
#define jit_pushargr(u) _jit_pushargr(_jit,u) #define jit_pushargr(u) _jit_pushargr(_jit,u)
#define jit_pushargi(u) _jit_pushargi(_jit,u) #define jit_pushargi(u) _jit_pushargi(_jit,u)
#define jit_finishr(u) _jit_finishr(_jit,u) #define jit_finishr(u) _jit_finishr(_jit,u)
@ -739,6 +740,7 @@ extern void _jit_link(jit_state_t*, jit_node_t*);
extern void _jit_prolog(jit_state_t*); extern void _jit_prolog(jit_state_t*);
extern jit_int32_t _jit_allocai(jit_state_t*, jit_int32_t); extern jit_int32_t _jit_allocai(jit_state_t*, jit_int32_t);
extern void _jit_ellipsis(jit_state_t*);
extern jit_int32_t _jit_arg(jit_state_t*); extern jit_int32_t _jit_arg(jit_state_t*);
extern void _jit_getarg_c(jit_state_t*, jit_gpr_t, jit_int32_t); extern void _jit_getarg_c(jit_state_t*, jit_gpr_t, jit_int32_t);
@ -751,7 +753,8 @@ extern void _jit_getarg_ui(jit_state_t*, jit_gpr_t, jit_int32_t);
extern void _jit_getarg_l(jit_state_t*, jit_gpr_t, jit_int32_t); extern void _jit_getarg_l(jit_state_t*, jit_gpr_t, jit_int32_t);
#endif #endif
extern void _jit_prepare(jit_state_t*, jit_int32_t); extern void _jit_prepare(jit_state_t*);
extern void _jit_ellipsis(jit_state_t*);
extern void _jit_pushargr(jit_state_t*, jit_gpr_t); extern void _jit_pushargr(jit_state_t*, jit_gpr_t);
extern void _jit_pushargi(jit_state_t*, jit_word_t); extern void _jit_pushargi(jit_state_t*, jit_word_t);
extern void _jit_finishr(jit_state_t*, jit_gpr_t); extern void _jit_finishr(jit_state_t*, jit_gpr_t);

View file

@ -243,6 +243,12 @@ _jit_prolog(jit_state_t *_jit)
jit_regset_new(_jit->function->regset); jit_regset_new(_jit->function->regset);
} }
void
_jit_ellipsis(jit_state_t *_jit)
{
_jit->function->call.kind = jit_call_varargs;
}
jit_int32_t jit_int32_t
_jit_allocai(jit_state_t *_jit, jit_int32_t length) _jit_allocai(jit_state_t *_jit, jit_int32_t length)
{ {

View file

@ -150,6 +150,12 @@ _jit_prolog(jit_state_t *_jit)
jit_regset_new(_jit->function->regset); jit_regset_new(_jit->function->regset);
} }
void
_jit_ellipsis(jit_state_t *_jit)
{
_jit->function->call.kind = jit_call_varargs;
}
jit_int32_t jit_int32_t
_jit_allocai(jit_state_t *_jit, jit_int32_t length) _jit_allocai(jit_state_t *_jit, jit_int32_t length)
{ {

View file

@ -156,6 +156,12 @@ _jit_prolog(jit_state_t *_jit)
jit_regset_new(_jit->function->regset); jit_regset_new(_jit->function->regset);
} }
void
_jit_ellipsis(jit_state_t *_jit)
{
_jit->function->call.kind = jit_call_varargs;
}
jit_int32_t jit_int32_t
_jit_allocai(jit_state_t *_jit, jit_int32_t length) _jit_allocai(jit_state_t *_jit, jit_int32_t length)
{ {

View file

@ -320,6 +320,12 @@ _jit_prolog(jit_state_t *_jit)
jit_regset_new(_jit->function->regset); jit_regset_new(_jit->function->regset);
} }
void
_jit_ellipsis(jit_state_t *_jit)
{
_jit->function->call.kind = jit_call_varargs;
}
jit_int32_t jit_int32_t
_jit_allocai(jit_state_t *_jit, jit_int32_t length) _jit_allocai(jit_state_t *_jit, jit_int32_t length)
{ {

View file

@ -708,10 +708,10 @@ _jit_link(jit_state_t *_jit, jit_node_t *node)
} }
void void
_jit_prepare(jit_state_t *_jit, jit_int32_t kind) _jit_prepare(jit_state_t *_jit)
{ {
assert(_jit->function); assert(_jit->function);
_jit->function->call.kind = kind; _jit->function->call.kind = jit_call_default;
_jit->function->call.argi = _jit->function->call.argi =
_jit->function->call.argf = _jit->function->call.argf =
_jit->function->call.size = 0; _jit->function->call.size = 0;