guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 139/437: Implement sqrt codes in mips.


From: Andy Wingo
Subject: [Guile-commits] 139/437: Implement sqrt codes in mips.
Date: Mon, 2 Jul 2018 05:14:03 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit aa7c8230c1213273209e30091b6ae3dc177557d0
Author: pcpa <address@hidden>
Date:   Tue Dec 4 13:30:46 2012 -0200

    Implement sqrt codes in mips.
    
        * lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips
        jit_sqrtr_{f,d} codes.
    
        * check/all.tst, include/lightning.h, lib/jit_print.c: Change
        declaration order and call order in all.tst of {add,sub}c and
        {add,sub}x. *c must be called before to set the carry and *x
        second to use the carry and keep it set. The wrong call order
        was causing all.tst to fail in mips, where a register is
        allocated to keep a global carry state.
---
 ChangeLog           | 12 ++++++++++++
 check/all.tst       |  8 ++++----
 include/lightning.h | 12 ++++++------
 lib/jit_mips-fpu.c  |  8 ++++++--
 lib/jit_mips.c      |  2 ++
 lib/jit_print.c     |  4 ++--
 6 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 8611bda..b5a7a75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2012-12-04 Paulo Andrade <address@hidden>
 
+       * lib/jit_mips-fpu.c, lib/jit_mips.c: Implement missing mips
+       jit_sqrtr_{f,d} codes.
+
+       * check/all.tst, include/lightning.h, lib/jit_print.c: Change
+       declaration order and call order in all.tst of {add,sub}c and
+       {add,sub}x. *c must be called before to set the carry and *x
+       second to use the carry and keep it set. The wrong call order
+       was causing all.tst to fail in mips, where a register is
+       allocated to keep a global carry state.
+
+2012-12-04 Paulo Andrade <address@hidden>
+
        * include/lightning/jit_mips.h, lib/jit_mips-cpu.c,
        lib/jit_mips-fpu.c, lib/jit_mips.c: Correct float/double
        argument handling and make the mips backend pass the initial
diff --git a/check/all.tst b/check/all.tst
index 055da44..aa8856c 100644
--- a/check/all.tst
+++ b/check/all.tst
@@ -22,16 +22,16 @@
 #endif
        addr %r0 %r1 %r2
        addi %r0 %r1 2
-       addxr %r0 %r1 %r2
-       addxi %r0 %r1 2
        addcr %r0 %r1 %r2
        addci %r0 %r1 2
+       addxr %r0 %r1 %r2
+       addxi %r0 %r1 2
        subr %r0 %r1 %r2
        subi %r0 %r1 2
-       subxr %r0 %r1 %r2
-       subxi %r0 %r1 2
        subcr %r0 %r1 %r2
        subci %r0 %r1 2
+       subxr %r0 %r1 %r2
+       subxi %r0 %r1 2
        mulr %r0 %r1 %r2
        muli %r0 %r1 2
        divr %r0 %r1 %r2
diff --git a/include/lightning.h b/include/lightning.h
index 4209005..8af86e1 100644
--- a/include/lightning.h
+++ b/include/lightning.h
@@ -133,21 +133,21 @@ typedef enum {
 #define jit_addr(u,v,w)                jit_new_node_www(jit_code_addr,u,v,w)
 #define jit_addi(u,v,w)                jit_new_node_www(jit_code_addi,u,v,w)
     jit_code_addr,             jit_code_addi,
-#define jit_addxr(u,v,w)       jit_new_node_www(jit_code_addxr,u,v,w)
-#define jit_addxi(u,v,w)       jit_new_node_www(jit_code_addxi,u,v,w)
-    jit_code_addxr,            jit_code_addxi,
 #define jit_addcr(u,v,w)       jit_new_node_www(jit_code_addcr,u,v,w)
 #define jit_addci(u,v,w)       jit_new_node_www(jit_code_addci,u,v,w)
     jit_code_addcr,            jit_code_addci,
+#define jit_addxr(u,v,w)       jit_new_node_www(jit_code_addxr,u,v,w)
+#define jit_addxi(u,v,w)       jit_new_node_www(jit_code_addxi,u,v,w)
+    jit_code_addxr,            jit_code_addxi,
 #define jit_subr(u,v,w)                jit_new_node_www(jit_code_subr,u,v,w)
 #define jit_subi(u,v,w)                jit_new_node_www(jit_code_subi,u,v,w)
     jit_code_subr,             jit_code_subi,
-#define jit_subxr(u,v,w)       jit_new_node_www(jit_code_subxr,u,v,w)
-#define jit_subxi(u,v,w)       jit_new_node_www(jit_code_subxi,u,v,w)
-    jit_code_subxr,            jit_code_subxi,
 #define jit_subcr(u,v,w)       jit_new_node_www(jit_code_subcr,u,v,w)
 #define jit_subci(u,v,w)       jit_new_node_www(jit_code_subci,u,v,w)
     jit_code_subcr,            jit_code_subci,
+#define jit_subxr(u,v,w)       jit_new_node_www(jit_code_subxr,u,v,w)
+#define jit_subxi(u,v,w)       jit_new_node_www(jit_code_subxi,u,v,w)
+    jit_code_subxr,            jit_code_subxi,
 
 #define jit_mulr(u,v,w)                jit_new_node_www(jit_code_mulr,u,v,w)
 #define jit_muli(u,v,w)                jit_new_node_www(jit_code_muli,u,v,w)
diff --git a/lib/jit_mips-fpu.c b/lib/jit_mips-fpu.c
index bddbc4a..702a703 100644
--- a/lib/jit_mips-fpu.c
+++ b/lib/jit_mips-fpu.c
@@ -96,9 +96,11 @@
 #  define DIV_S(fd,fs,ft)              
hrrrit(MIPS_COP1,MIPS_fmt_S,ft,fs,fd,MIPS_DIV_fmt)
 #  define DIV_D(fd,fs,ft)              
hrrrit(MIPS_COP1,MIPS_fmt_D,ft,fs,fd,MIPS_DIV_fmt)
 #  define ABS_S(fd,fs)                 
hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_ABS_fmt)
-#  define ABS_D(fd, fs)                        
hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
+#  define ABS_D(fd,fs)                 
hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_ABS_fmt)
 #  define NEG_S(fd,fs)                 
hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_NEG_fmt)
-#  define NEG_D(fd, fs)                        
hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
+#  define NEG_D(fd,fs)                 
hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_NEG_fmt)
+#  define SQRT_S(fd,fs)                        
hrrrit(MIPS_COP1,MIPS_fmt_S,0,fs,fd,MIPS_SQRT_fmt)
+#  define SQRT_D(fd,fs)                        
hrrrit(MIPS_COP1,MIPS_fmt_D,0,fs,fd,MIPS_SQRT_fmt)
 #  define MFC1(rt, fs)                 hrrrit(MIPS_COP1,MIPS_MF,rt,fs,0,0)
 #  define MTC1(rt, fs)                 hrrrit(MIPS_COP1,MIPS_MT,rt,fs,0,0)
 #  define DMFC1(rt, fs)                        
hrrrit(MIPS_COP1,MIPS_DMF,rt,fs,0,0)
@@ -208,6 +210,8 @@ static void 
_divi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
 #  define absr_d(r0,r1)                        ABS_D(r0,r1)
 #  define negr_f(r0,r1)                        NEG_S(r0,r1)
 #  define negr_d(r0,r1)                        NEG_D(r0,r1)
+#  define sqrtr_f(r0,r1)               SQRT_S(r0,r1)
+#  define sqrtr_d(r0,r1)               SQRT_D(r0,r1)
 #  define getarg_f(r0, r1)             MTC1(r1, r0)
 #  define pushargr_f(r0, r1)           MFC1(r1, r0)
 #  define pushargi_f(r0, i0)           _pushargi_f(_jit, r0, i0)
diff --git a/lib/jit_mips.c b/lib/jit_mips.c
index 2e220b2..f365e3c 100644
--- a/lib/jit_mips.c
+++ b/lib/jit_mips.c
@@ -973,6 +973,7 @@ _jit_emit(jit_state_t *_jit)
                case_rrf(div, _f, 32);
                case_rr(abs, _f);
                case_rr(neg, _f);
+               case_rr(sqrt, _f);
                case_rr(ext, _f);
                case_rr(ld, _f);
                case_rw(ld, _f);
@@ -1054,6 +1055,7 @@ _jit_emit(jit_state_t *_jit)
                case_rrf(div, _d, 64);
                case_rr(abs, _d);
                case_rr(neg, _d);
+               case_rr(sqrt, _d);
                case_rr(ext, _d);
                case_rr(ld, _d);
                case_rw(ld, _d);
diff --git a/lib/jit_print.c b/lib/jit_print.c
index 151ddba..e05e353 100644
--- a/lib/jit_print.c
+++ b/lib/jit_print.c
@@ -41,11 +41,11 @@ static char *code_name[] = {
     "label",
     "prolog",
     "addr",            "addi",
-    "addxr",           "addxi",
     "addcr",           "addci",
+    "addxr",           "addxi",
     "subr",            "subi",
-    "subxr",           "subxi",
     "subcr",           "subci",
+    "subxr",           "subxi",
     "mulr",            "muli",
     "divr",            "divi",
     "divr_u",          "divi_u",



reply via email to

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