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:
parent
a04df966c0
commit
0b89a17ca2
39 changed files with 165 additions and 70 deletions
24
ChangeLog
24
ChangeLog
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue