guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 150/437: Add jit_ellipis and remove jit_prepare argument


From: Andy Wingo
Subject: [Guile-commits] 150/437: Add jit_ellipis and remove jit_prepare argument.
Date: Mon, 2 Jul 2018 05:14:07 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit 0b89a17ca2709fbd4765a9758b73e07b6b5d9a52
Author: pcpa <address@hidden>
Date:   Wed Dec 12 22:59:52 2012 -0200

    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.
---
 ChangeLog           | 24 ++++++++++++++++++++++++
 check/3to2.tst      | 10 ++++++----
 check/add.tst       |  5 +++--
 check/all.tst       |  9 +++++----
 check/allocai.tst   | 16 ++++++++++------
 check/alu_add.tst   |  3 ++-
 check/alu_and.tst   |  3 ++-
 check/alu_com.tst   |  3 ++-
 check/alu_div.tst   |  3 ++-
 check/alu_lsh.tst   |  3 ++-
 check/alu_mul.tst   |  3 ++-
 check/alu_neg.tst   |  3 ++-
 check/alu_or.tst    |  3 ++-
 check/alu_rem.tst   |  3 ++-
 check/alu_rsh.tst   |  3 ++-
 check/alu_sub.tst   |  3 ++-
 check/alu_xor.tst   |  3 ++-
 check/alux_add.tst  |  3 ++-
 check/alux_sub.tst  |  3 ++-
 check/bp.tst        |  9 +++++----
 check/branch.tst    |  3 ++-
 check/cvt.tst       |  3 ++-
 check/divi.tst      |  9 +++++----
 check/fib.tst       |  7 ++++---
 check/ldsti.tst     |  3 ++-
 check/ldstr-c.tst   |  3 ++-
 check/ldstr.tst     |  3 ++-
 check/ldstxi-c.tst  |  3 ++-
 check/ldstxi.tst    |  3 ++-
 check/ldstxr-c.tst  |  3 ++-
 check/ldstxr.tst    |  3 ++-
 check/lightning.c   |  8 ++++----
 check/rpn.tst       | 34 ++++++++++++++++++++++------------
 include/lightning.h |  7 +++++--
 lib/jit_arm.c       |  6 ++++++
 lib/jit_mips.c      |  6 ++++++
 lib/jit_ppc.c       |  6 ++++++
 lib/jit_x86.c       |  6 ++++++
 lib/lightning.c     |  4 ++--
 39 files changed, 165 insertions(+), 70 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2415689..2fe54b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+2012-12-12 Paulo Andrade <address@hidden>
+
+       * 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 <address@hidden>
 
        * lib/jit_ppc-cpu.c: Make movr a function that checks arguments
diff --git a/check/3to2.tst b/check/3to2.tst
index 10de7f8..1e4a30e 100644
--- a/check/3to2.tst
+++ b/check/3to2.tst
@@ -18,13 +18,14 @@ test_double_##a##_##b##_##c:                        \
        retr_d %a                               \
        epilog
 #define test_double(a, b, c, x, y)             \
-       prepare 0                               \
+       prepare                                 \
                pushargi_d x                    \
                pushargi_d y                    \
        finishi test_double_##a##_##b##_##c     \
        retval_d %f0                            \
-       prepare 1                               \
+       prepare                                 \
                pushargi dfmt                   \
+               ellipsis                        \
                pushargr_d %f0                  \
        finishi @printf
 
@@ -39,13 +40,14 @@ test_int_##a##_##b##_##c:                   \
        retr %a                                 \
        epilog
 #define test_int(a, b, c, x, y)                        \
-       prepare 0                               \
+       prepare                                 \
                pushargi x                      \
                pushargi y                      \
        finishi test_int_##a##_##b##_##c        \
        retval %r0                              \
-       prepare 1                               \
+       prepare                                 \
                pushargi ifmt                   \
+               ellipsis                        \
                pushargr %r0                    \
        finishi @printf
 
diff --git a/check/add.tst b/check/add.tst
index 03a6962..d849fce 100644
--- a/check/add.tst
+++ b/check/add.tst
@@ -17,13 +17,14 @@ test:
 
 main:
        prolog
-       prepare 0
+       prepare
                pushargi 5
                pushargi 4
        finishi test
        retval %r0
-       prepare 1
+       prepare
                pushargi fmt
+               ellipsis
                pushargi 5
                pushargi 4
                pushargr %r0
diff --git a/check/all.tst b/check/all.tst
index aa8856c..d8d4769 100644
--- a/check/all.tst
+++ b/check/all.tst
@@ -196,11 +196,12 @@ label:
        jmpi label
        callr %r0
        calli label
-       prepare 0
+       prepare
        pushargr %r0
        finishr %r0
-       prepare 1
+       prepare
        pushargi 1
+       ellipsis
        finishi 0x80000000
        ret
        retr %r1
@@ -303,7 +304,7 @@ unordi:
        bordi_f unordi %f0 0.5
        bunordr_f unord %f0 %f1
        bunordi_f unordi %f0 0.5
-       prepare 0
+       prepare
        pushargr_f %f1
        pushargi_f 0.5
        finishi 0x80000000
@@ -395,7 +396,7 @@ unordi:
        bordi_d unordi %f0 0.5
        bunordr_d unord %f0 %f1
        bunordi_d unordi %f0 0.5
-       prepare 0
+       prepare
        pushargr_d %f1
        pushargi_d 0.5
        finishi 0x80000000
diff --git a/check/allocai.tst b/check/allocai.tst
index b613a41..9bb6cbe 100644
--- a/check/allocai.tst
+++ b/check/allocai.tst
@@ -23,8 +23,9 @@ identify:
        prolog
        arg $i
        getarg %v0 $i
-       prepare 1
+       prepare
                pushargi idfmt
+               ellipsis
                pushargr %v0
        finishi @printf
        retr %v0
@@ -45,7 +46,7 @@ identity_func:
        stxi $neg %fp %r2
 
        /* Invoke FUNC.  */
-       prepare 0
+       prepare
                pushargr %r1
        finishi identify
 
@@ -64,8 +65,9 @@ identity_func:
 
        /* Display a failure message.  */
 branch:
-       prepare 1
+       prepare
                pushargi failure_message
+               ellipsis
        finishi @printf
 
        /* Leave.  */
@@ -74,19 +76,21 @@ branch:
 
 main:
        prolog
-       prepare 0
+       prepare
                pushargi 7777
        finishi identity_func
        beqi succeeded %ret 7777
-       prepare 1
+       prepare
                pushargi report_message
+               ellipsis
                pushargr %ret
                pushargi 7777
        finishi @printf
        reti 1
 succeeded:
-       prepare 1
+       prepare
                pushargi succeeded_message
+               ellipsis
        finishi @printf
        reti 0
        epilog
diff --git a/check/alu_add.tst b/check/alu_add.tst
index 221b6ac..16cdf38 100644
--- a/check/alu_add.tst
+++ b/check/alu_add.tst
@@ -39,8 +39,9 @@
        ADD(0, _d,      -0.5,       0.5,        0.0)
        ADD(1, _d,       0.25,      0.75,       1.0)
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_and.tst b/check/alu_and.tst
index 2f0da9a..7474271 100644
--- a/check/alu_and.tst
+++ b/check/alu_and.tst
@@ -28,8 +28,9 @@
        AND(19, 0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_com.tst b/check/alu_com.tst
index 4722813..581c940 100644
--- a/check/alu_com.tst
+++ b/check/alu_com.tst
@@ -25,8 +25,9 @@
        COM(9,  0x8000000000000001,     0x7ffffffffffffffe)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_div.tst b/check/alu_div.tst
index 37c1a2b..97e024d 100644
--- a/check/alu_div.tst
+++ b/check/alu_div.tst
@@ -75,8 +75,9 @@
        DIV(0, _d,      -0.5,       0.5,        -1.0)
        DIV(1, _d,       1.25,      0.5,         2.5)
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_lsh.tst b/check/alu_lsh.tst
index 1b3118f..c05fda0 100644
--- a/check/alu_lsh.tst
+++ b/check/alu_lsh.tst
@@ -49,8 +49,9 @@
        LSH(30,  0xffffffffff,  47,     0xffff800000000000)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_mul.tst b/check/alu_mul.tst
index edf9777..748417c 100644
--- a/check/alu_mul.tst
+++ b/check/alu_mul.tst
@@ -51,8 +51,9 @@
        MUL(0, _d,      -0.5,       0.5,        -0.25)
        MUL(1, _d,       0.25,      0.75,        0.1875)
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_neg.tst b/check/alu_neg.tst
index 73b1b30..3264d13 100644
--- a/check/alu_neg.tst
+++ b/check/alu_neg.tst
@@ -34,8 +34,9 @@
        NEG(2, _d,       $(1.0 / 0),    $(-1 / 0.0))
        NEG(3, _d,      -1.25,           1.25)
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_or.tst b/check/alu_or.tst
index 31aa0c6..1e55a86 100644
--- a/check/alu_or.tst
+++ b/check/alu_or.tst
@@ -28,8 +28,9 @@
        OR(19,  0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_rem.tst b/check/alu_rem.tst
index f6c6074..5aea7cf 100644
--- a/check/alu_rem.tst
+++ b/check/alu_rem.tst
@@ -68,8 +68,9 @@
        UREM(26,0xffffffffffffffff, 0xffffffffffffffff, 0)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_rsh.tst b/check/alu_rsh.tst
index f32c3c9..93f8c7b 100644
--- a/check/alu_rsh.tst
+++ b/check/alu_rsh.tst
@@ -77,8 +77,9 @@
        URSH(31,0xffff800000000000, 47,         0x1ffff)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_sub.tst b/check/alu_sub.tst
index 4e8fd3c..8f07b62 100644
--- a/check/alu_sub.tst
+++ b/check/alu_sub.tst
@@ -41,8 +41,9 @@
        SUB(0, _d,      -0.5,       0.5,        -1.0)
        SUB(1, _d,       0.25,      0.75,       -0.5)
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alu_xor.tst b/check/alu_xor.tst
index 5c98e27..d1976ab 100644
--- a/check/alu_xor.tst
+++ b/check/alu_xor.tst
@@ -28,8 +28,9 @@
        XOR(20, 0xffffffffffffffff, 0xffffffffffffffff, 0)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alux_add.tst b/check/alux_add.tst
index 68cf8e5..ddc4e57 100644
--- a/check/alux_add.tst
+++ b/check/alux_add.tst
@@ -41,8 +41,9 @@
        ADDX(10,0x8000000000000000,     0x8000000000000000,     1)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/alux_sub.tst b/check/alux_sub.tst
index edef15f..8a2838d 100644
--- a/check/alux_sub.tst
+++ b/check/alux_sub.tst
@@ -41,8 +41,9 @@
        SUBX(10,1,                      0x8000000000000000,     -1)
 #endif
 
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/bp.tst b/check/bp.tst
index a331244..487217b 100644
--- a/check/bp.tst
+++ b/check/bp.tst
@@ -13,11 +13,11 @@ rfibs:
        blti_u out %v0 2
        subi %v1 %v0 1          /* V1 = N-1 */
        subi %v2 %v0 2          /* V1 = N-2 */
-       prepare 0
+       prepare
                pushargr %v1
        finishi rfibs
        retval %v1              /* V1 = rfibs(N-1) */
-       prepare 0
+       prepare
                pushargr %v2
        finishi rfibs
        retval %v2              /* V2 = rfibs(N-2) */
@@ -31,12 +31,13 @@ out:
 
 main:
        prolog
-       prepare 0
+       prepare
                pushargi 32
        finishi rfibs
        retval %v0
-       prepare 1
+       prepare
                pushargi fmt
+               ellipsis
                pushargi 32
                pushargr %v0
        finishi @printf
diff --git a/check/branch.tst b/check/branch.tst
index 5fd54d5..b8ec071 100644
--- a/check/branch.tst
+++ b/check/branch.tst
@@ -554,8 +554,9 @@ unordi_f_0:
 unordi_f_1:
 
        // just to know did not crash or abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
 
        ret
diff --git a/check/cvt.tst b/check/cvt.tst
index e645cc2..1828259 100644
--- a/check/cvt.tst
+++ b/check/cvt.tst
@@ -371,8 +371,9 @@ xdf:
        EXTDF(f0, f1, f2, f3, f4, f5)
 
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
 
        ret
diff --git a/check/divi.tst b/check/divi.tst
index 6a21152..94bd3d6 100644
--- a/check/divi.tst
+++ b/check/divi.tst
@@ -34,7 +34,7 @@ test_divider_##divisor:                       \
 loop_##divisor:                                \
        bger done_##divisor %v0 %v1     \
        ldr_i %v2 %v0                   \
-       prepare 0                       \
+       prepare                         \
                pushargr %v2            \
        finishi divider_##divisor       \
        retval %v2                      \
@@ -42,8 +42,9 @@ loop_##divisor:                               \
        divi %r0 %r2 divisor            \
        /* save div result */           \
        stxi_i $loc %fp %r0             \
-       prepare 1                       \
+       prepare                         \
                pushargi fmt            \
+               ellipsis                \
                pushargr %r2            \
                pushargi divisor        \
                pushargr %v2            \
@@ -63,12 +64,12 @@ generate_test_divider(32768)
 
 main:
        prolog
-       prepare 0
+       prepare
                pushargi small_ops
                pushargi 3
        finishi test_divider_8
        bnei fail %ret 0        
-       prepare 0
+       prepare
                pushargi large_ops
                pushargi 3
        finishi test_divider_32768
diff --git a/check/fib.tst b/check/fib.tst
index 2df7b23..6891de0 100644
--- a/check/fib.tst
+++ b/check/fib.tst
@@ -34,7 +34,7 @@ main:
        getarg %r0 $argv
        addi %r0 %r0 $(__WORDSIZE >> 3)
        ldr %r0 %r0
-       prepare 0
+       prepare
                pushargr %r0
        finishi @atoi
        retval %r0
@@ -45,12 +45,13 @@ default:
 
 call:
        movr %v0 %r0
-       prepare 0
+       prepare
                pushargr %r0
        finishi nfibs
        retval %r0
-       prepare 1
+       prepare
                pushargi format
+               ellipsis
                pushargr %v0
                pushargr %r0
        finishi @printf
diff --git a/check/ldsti.tst b/check/ldsti.tst
index 3fd7f31..59d598b 100644
--- a/check/ldsti.tst
+++ b/check/ldsti.tst
@@ -141,8 +141,9 @@ Ld:
 
        LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstr-c.tst b/check/ldstr-c.tst
index 6644f98..7f85cda 100644
--- a/check/ldstr-c.tst
+++ b/check/ldstr-c.tst
@@ -150,8 +150,9 @@ Ll:
 
        LDST(v0, v1, v2, r0, r1, r2)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstr.tst b/check/ldstr.tst
index 2b9fd0d..1eb03d6 100644
--- a/check/ldstr.tst
+++ b/check/ldstr.tst
@@ -178,8 +178,9 @@ Ld:
 
        LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstxi-c.tst b/check/ldstxi-c.tst
index 7951a60..9491bf1 100644
--- a/check/ldstxi-c.tst
+++ b/check/ldstxi-c.tst
@@ -153,8 +153,9 @@ Ll:
 
        LDST(v0, v1, v2, r0, r1, r2)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstxi.tst b/check/ldstxi.tst
index 5dc224f..4aa0cc7 100644
--- a/check/ldstxi.tst
+++ b/check/ldstxi.tst
@@ -149,8 +149,9 @@ Ld:
 
        LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstxr-c.tst b/check/ldstxr-c.tst
index bf85416..13056bc 100644
--- a/check/ldstxr-c.tst
+++ b/check/ldstxr-c.tst
@@ -214,8 +214,9 @@ Ll1:
 
        LDST(v0, v1, v2, r0, r1, r2)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/ldstxr.tst b/check/ldstxr.tst
index 32ddd24..95c1891 100644
--- a/check/ldstxr.tst
+++ b/check/ldstxr.tst
@@ -204,8 +204,9 @@ Ld:
 
        LDST(v0, v1, v2, r0, r1, r2, f0, f1, f2, f3, f4, f5)
        // just to know did not abort
-       prepare 1
+       prepare
                pushargi ok
+               ellipsis
        finishi @printf
        ret
        epilog
diff --git a/check/lightning.c b/check/lightning.c
index cf5dff1..2226da9 100644
--- a/check/lightning.c
+++ b/check/lightning.c
@@ -242,7 +242,7 @@ static void call_forward(void *value, label_t *label);
 static void make_arg(long value);
 static long get_arg(void);
 static long get_imm(void);
-static void prolog(void);
+static void prolog(void);      static void ellipsis(void);
 static void allocai(void);
 static void arg(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 instr_t           instr_vector[] = {
 #define entry(value)   { NULL, #value, value }
-    entry(prolog),
+    entry(prolog),     entry(ellipsis),
     entry(allocai),
     entry(arg),
     entry(getarg_c),   entry(getarg_uc),
@@ -1211,7 +1211,7 @@ name(void)                                                
                \
     jit_##name(value);                                                 \
 }
 
-entry(prolog)
+entry(prolog)                  entry(ellipsis)
 void
 allocai(void) {
     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_ir(jmpr)                 entry_lb(jmpi)
 entry_ir(callr)                        entry_fn(calli)
-entry_im(prepare)
+entry(prepare)
 entry_ir(pushargr)             entry_im(pushargi)
 entry_ir(finishr)              entry_fn(finishi)
 entry(ret)
diff --git a/check/rpn.tst b/check/rpn.tst
index fe12557..939e0a5 100644
--- a/check/rpn.tst
+++ b/check/rpn.tst
@@ -106,64 +106,74 @@ f2c:
 main:
        prolog
 
-       prepare 1
+       prepare
                pushargi C
+               ellipsis
        finishi @printf
        movi %v0 0
 loopC:
-       prepare 1
+       prepare
                pushargi format
+               ellipsis
                pushargr %v0
        finishi @printf
        addi %v0 %v0 10
        blei loopC %v0 100
-       prepare 1
+       prepare
                pushargi F
+               ellipsis
        finishi @printf
        movi %v0 0
 loopC2F:
-       prepare 0
+       prepare
                pushargr %v0
        finishi c2f
        retval %r0
-       prepare 2
+       prepare
                pushargi format
+               ellipsis
                pushargr %r0
        finishi @printf
        addi %v0 %v0 10
        blei loopC2F %v0 100
-       prepare 1
+       prepare
                pushargi newline
+               ellipsis
        finishi @printf
 
-       prepare 1
+       prepare
                pushargi F
+               ellipsis
        finishi @printf
        movi %v0 32
 loopF:
-       prepare 2
+       prepare
                pushargi format
+               ellipsis
                pushargr %v0
        finishi @printf
        addi %v0 %v0 18
        blei loopF %v0 212
-       prepare 1
+       prepare
                pushargi C
+               ellipsis
        finishi @printf
        movi %v0 32
 loopF2C:
-       prepare 0
+       prepare
                pushargr %v0
        finishi f2c
        retval %r0
-       prepare 2
+       prepare
                pushargi format
+               ellipsis
                pushargr %r0
        finishi @printf
        addi %v0 %v0 18
        blei loopF2C %v0 212
-       prepare 1
+       prepare
                pushargi newline
+               ellipsis
        finishi @printf
 
        ret
diff --git a/include/lightning.h b/include/lightning.h
index 997a936..56cefe5 100644
--- a/include/lightning.h
+++ b/include/lightning.h
@@ -114,6 +114,7 @@ typedef enum {
 #define jit_prolog()           _jit_prolog(_jit)
     jit_code_prolog,
 
+#define jit_ellipsis()         _jit_ellipsis(_jit)
 #define jit_allocai(u)         _jit_allocai(_jit,u)
 
 #define jit_arg()              _jit_arg(_jit)
@@ -406,7 +407,7 @@ typedef enum {
 #define jit_calli(u)           jit_new_node_p(jit_code_calli,u)
     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_pushargi(u)                _jit_pushargi(_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 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 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);
 #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_pushargi(jit_state_t*, jit_word_t);
 extern void _jit_finishr(jit_state_t*, jit_gpr_t);
diff --git a/lib/jit_arm.c b/lib/jit_arm.c
index b706440..adafcb2 100644
--- a/lib/jit_arm.c
+++ b/lib/jit_arm.c
@@ -243,6 +243,12 @@ _jit_prolog(jit_state_t *_jit)
     jit_regset_new(_jit->function->regset);
 }
 
+void
+_jit_ellipsis(jit_state_t *_jit)
+{
+    _jit->function->call.kind = jit_call_varargs;
+}
+
 jit_int32_t
 _jit_allocai(jit_state_t *_jit, jit_int32_t length)
 {
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index f365e3c..7b6f99d 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -150,6 +150,12 @@ _jit_prolog(jit_state_t *_jit)
     jit_regset_new(_jit->function->regset);
 }
 
+void
+_jit_ellipsis(jit_state_t *_jit)
+{
+    _jit->function->call.kind = jit_call_varargs;
+}
+
 jit_int32_t
 _jit_allocai(jit_state_t *_jit, jit_int32_t length)
 {
diff --git a/lib/jit_ppc.c b/lib/jit_ppc.c
index 19eeca6..618adef 100644
--- a/lib/jit_ppc.c
+++ b/lib/jit_ppc.c
@@ -156,6 +156,12 @@ _jit_prolog(jit_state_t *_jit)
     jit_regset_new(_jit->function->regset);
 }
 
+void
+_jit_ellipsis(jit_state_t *_jit)
+{
+    _jit->function->call.kind = jit_call_varargs;
+}
+
 jit_int32_t
 _jit_allocai(jit_state_t *_jit, jit_int32_t length)
 {
diff --git a/lib/jit_x86.c b/lib/jit_x86.c
index 416e72a..918af41 100644
--- a/lib/jit_x86.c
+++ b/lib/jit_x86.c
@@ -320,6 +320,12 @@ _jit_prolog(jit_state_t *_jit)
     jit_regset_new(_jit->function->regset);
 }
 
+void
+_jit_ellipsis(jit_state_t *_jit)
+{
+    _jit->function->call.kind = jit_call_varargs;
+}
+
 jit_int32_t
 _jit_allocai(jit_state_t *_jit, jit_int32_t length)
 {
diff --git a/lib/lightning.c b/lib/lightning.c
index a416872..1a49ffe 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -708,10 +708,10 @@ _jit_link(jit_state_t *_jit, jit_node_t *node)
 }
 
 void
-_jit_prepare(jit_state_t *_jit, jit_int32_t kind)
+_jit_prepare(jit_state_t *_jit)
 {
     assert(_jit->function);
-    _jit->function->call.kind = kind;
+    _jit->function->call.kind = jit_call_default;
     _jit->function->call.argi =
        _jit->function->call.argf =
        _jit->function->call.size = 0;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]