guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 210/437: Correct all ldst test cases.


From: Andy Wingo
Subject: [Guile-commits] 210/437: Correct all ldst test cases.
Date: Mon, 2 Jul 2018 05:14:22 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit f52b976390fada608126b49499f291cbe1d88017
Author: pcpa <address@hidden>
Date:   Sat Apr 27 16:13:44 2013 -0300

    Correct all ldst test cases.
    
        * lib/jit_ia64-cpu.c: Correct bogus implementation of ldr_T
        for signed integers, that was using ld1.s, ld2.s and ld4.s.
        The ".s" stands for speculative load, not sign extend.
    
        * lib/jit_ia64-fpu.c: Correct bogus implementation of ldxr_T
        for float and double. The third (actually, second) argument
        is indeed added to the base register, but the base register
        is modified. The actual M7 implementation was already correct,
        just the ldxr_f and ldxr_d implementation that was kept in
        a prototype state, misinterpreting what M7 does.
---
 ChangeLog          |  13 ++++++
 lib/jit_ia64-cpu.c |  30 ++++++++++++--
 lib/jit_ia64-fpu.c | 118 +++++++++++++++++++++++++++++++----------------------
 3 files changed, 110 insertions(+), 51 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4053b9f..47ffd90 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,18 @@
 2013-04-27 Paulo Andrade <address@hidden>
 
+       * lib/jit_ia64-cpu.c: Correct bogus implementation of ldr_T
+       for signed integers, that was using ld1.s, ld2.s and ld4.s.
+       The ".s" stands for speculative load, not sign extend.
+
+       * lib/jit_ia64-fpu.c: Correct bogus implementation of ldxr_T
+       for float and double. The third (actually, second) argument
+       is indeed added to the base register, but the base register
+       is modified. The actual M7 implementation was already correct,
+       just the ldxr_f and ldxr_d implementation that was kept in
+       a prototype state, misinterpreting what M7 does.
+
+2013-04-27 Paulo Andrade <address@hidden>
+
        * lib/jit_ia64-cpu.c: Correct X2 pattern matching by preventing
        it to attempt to require a stop between the L and the X
        instruction; that is, check the registers and predicates
diff --git a/lib/jit_ia64-cpu.c b/lib/jit_ia64-cpu.c
index d817fbf..8ae73f4 100644
--- a/lib/jit_ia64-cpu.c
+++ b/lib/jit_ia64-cpu.c
@@ -1328,19 +1328,22 @@ static jit_word_t _bsubi_u(jit_state_t*,jit_word_t,
 #define bxsubi(i0,r0,i1)               bsubi(i0,r0,i1,0)
 #define bxsubr_u(i0,r0,r1)             bsubr_u(i0,r0,r1,0)
 #define bxsubi_u(i0,r0,i1)             bsubi_u(i0,r0,i1,0)
-#define ldr_c(r0,r1)                   LD1_S(r0,r1)
+#define ldr_c(r0,r1)                   _ldr_c(_jit,r0,r1)
+static void _ldr_c(jit_state_t*,jit_int32_t,jit_int32_t);
 #define ldi_c(r0,i0)                   _ldi_c(_jit,r0,i0)
 static void _ldi_c(jit_state_t*,jit_int32_t,jit_word_t);
 #define ldr_uc(r0,r1)                  LD1(r0,r1)
 #define ldi_uc(r0,i0)                  _ldi_uc(_jit,r0,i0)
 static void _ldi_uc(jit_state_t*,jit_int32_t,jit_word_t);
-#define ldr_s(r0,r1)                   LD2_S(r0,r1)
+#define ldr_s(r0,r1)                   _ldr_s(_jit,r0,r1)
+static void _ldr_s(jit_state_t*,jit_int32_t,jit_int32_t);
 #define ldi_s(r0,i0)                   _ldi_s(_jit,r0,i0)
 static void _ldi_s(jit_state_t*,jit_int32_t,jit_word_t);
 #define ldr_us(r0,r1)                  LD2(r0,r1)
 #define ldi_us(r0,i0)                  _ldi_us(_jit,r0,i0)
 static void _ldi_us(jit_state_t*,jit_int32_t,jit_word_t);
-#define ldr_i(r0,r1)                   LD4_S(r0,r1)
+#define ldr_i(r0,r1)                   _ldr_i(_jit,r0,r1)
+static void _ldr_i(jit_state_t*,jit_int32_t,jit_int32_t);
 #define ldi_i(r0,i0)                   _ldi_i(_jit,r0,i0)
 static void _ldi_i(jit_state_t*,jit_int32_t,jit_word_t);
 #define ldr_ui(r0,r1)                  LD4(r0,r1)
@@ -4046,6 +4049,13 @@ _nei(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, 
jit_word_t i0)
 }
 
 static void
+_ldr_c(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+    ldr_uc(r0, r1);
+    extr_c(r0, r0);
+}
+
+static void
 _ldi_c(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 {
     jit_int32_t                reg;
@@ -4066,6 +4076,13 @@ _ldi_uc(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 }
 
 static void
+_ldr_s(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+    ldr_us(r0, r1);
+    extr_s(r0, r0);
+}
+
+static void
 _ldi_s(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 {
     jit_int32_t                reg;
@@ -4086,6 +4103,13 @@ _ldi_us(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 }
 
 static void
+_ldr_i(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1)
+{
+    ldr_ui(r0, r1);
+    extr_i(r0, r0);
+}
+
+static void
 _ldi_i(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 {
     jit_int32_t                reg;
diff --git a/lib/jit_ia64-fpu.c b/lib/jit_ia64-fpu.c
index 907afa9..0479bf6 100644
--- a/lib/jit_ia64-fpu.c
+++ b/lib/jit_ia64-fpu.c
@@ -304,52 +304,52 @@ static void F16_(jit_state_t*,jit_word_t,
 #define LDFD_C_NC(f1,r3)               M9(0x27,LD_NONE,r3,f1)
 #define LDF8_C_NC(f1,r3)               M9(0x25,LD_NONE,r3,f1)
 #define LDFE_C_NC(f1,r3)               M9(0x24,LD_NONE,r3,f1)
-#define LDXFS(f1,r3,r2)                        M7(0x02,LD_NONE,r3,r2,f1)
-#define LDXFD(f1,r3,r2)                        M7(0x03,LD_NONE,r3,r2,f1)
-#define LDXF8(f1,r3,r2)                        M7(0x01,LD_NONE,r3,r2,f1)
-#define LDXFE(f1,r3,r2)                        M7(0x00,LD_NONE,r3,r2,f1)
-#define LDXFS_S(f1,r3,r2)              M7(0x06,LD_NONE,r3,r2,f1)
-#define LDXFD_S(f1,r3,r2)              M7(0x07,LD_NONE,r3,r2,f1)
-#define LDXF8_S(f1,r3,r2)              M7(0x05,LD_NONE,r3,r2,f1)
-#define LDXFE_S(f1,r3,r2)              M7(0x04,LD_NONE,r3,r2,f1)
-#define LDXFS_A(f1,r3,r2)              M7(0x0a,LD_NONE,r3,r2,f1)
-#define LDXFD_A(f1,r3,r2)              M7(0x0b,LD_NONE,r3,r2,f1)
-#define LDXF8_A(f1,r3,r2)              M7(0x09,LD_NONE,r3,r2,f1)
-#define LDXFE_A(f1,r3,r2)              M7(0x08,LD_NONE,r3,r2,f1)
-#define LDXFS_SA(f1,r3,r2)             M7(0x0e,LD_NONE,r3,r2,f1)
-#define LDXFD_SA(f1,r3,r2)             M7(0x0f,LD_NONE,r3,r2,f1)
-#define LDXF8_SA(f1,r3,r2)             M7(0x0d,LD_NONE,r3,r2,f1)
-#define LDXFE_SA(f1,r3,r2)             M7(0x0c,LD_NONE,r3,r2,f1)
-#define LDXFS_FILL(f1,r3,r2)           M7(0x1b,LD_NONE,r3,r2,f1)
-#define LDXFS_C_CLR(f1,r3,r2)          M7(0x22,LD_NONE,r3,r2,f1)
-#define LDXFD_C_CLR(f1,r3,r2)          M7(0x23,LD_NONE,r3,r2,f1)
-#define LDXF8_C_CLR(f1,r3,r2)          M7(0x21,LD_NONE,r3,r2,f1)
-#define LDXFE_C_CLR(f1,r3,r2)          M7(0x20,LD_NONE,r3,r2,f1)
-#define LDXFS_C_NC(f1,r3,r2)           M7(0x26,LD_NONE,r3,r2,f1)
-#define LDXFD_C_NC(f1,r3,r2)           M7(0x27,LD_NONE,r3,r2,f1)
-#define LDXF8_C_NC(f1,r3,r2)           M7(0x25,LD_NONE,r3,r2,f1)
-#define LDXFE_C_NC(f1,r3,r2)           M7(0x24,LD_NONE,r3,r2,f1)
-#define LDFS_inc(f1,f3,im)             M8(0x02,LD_NONE,f3,im,f1)
-#define LDFD_inc(f1,f3,im)             M8(0x03,LD_NONE,f3,im,f1)
-#define LDF8_inc(f1,f3,im)             M8(0x01,LD_NONE,f3,im,f1)
-#define LDFE_inc(f1,f3,im)             M8(0x00,LD_NONE,f3,im,f1)
-#define LDFS_S_inc(f1,f3,im)           M8(0x06,LD_NONE,f3,im,f1)
-#define LDFD_S_inc(f1,f3,im)           M8(0x07,LD_NONE,f3,im,f1)
-#define LDF8_S_inc(f1,f3,im)           M8(0x05,LD_NONE,f3,im,f1)
-#define LDFE_S_inc(f1,f3,im)           M8(0x04,LD_NONE,f3,im,f1)
-#define LDFS_A_inc(f1,f3,im)           M8(0x0a,LD_NONE,f3,im,f1)
-#define LDFD_A_inc(f1,f3,im)           M8(0x0b,LD_NONE,f3,im,f1)
-#define LDF8_A_inc(f1,f3,im)           M8(0x09,LD_NONE,f3,im,f1)
-#define LDFE_A_inc(f1,f3,im)           M8(0x08,LD_NONE,f3,im,f1)
-#define LDF_FILL_inc(f1,f3,im)         M8(0x1b,LD_NONE,f3,im,f1)
-#define LDFS_C_CLR_inc(f1,f3,im)       M8(0x22,LD_NONE,f3,im,f1)
-#define LDFD_C_CLR_inc(f1,f3,im)       M8(0x23,LD_NONE,f3,im,f1)
-#define LDF8_C_CLR_inc(f1,f3,im)       M8(0x21,LD_NONE,f3,im,f1)
-#define LDFE_C_CLR_inc(f1,f3,im)       M8(0x20,LD_NONE,f3,im,f1)
-#define LDFS_C_NC_inc(f1,f3,im)                M8(0x26,LD_NONE,f3,im,f1)
-#define LDFD_C_NC_inc(f1,f3,im)                M8(0x27,LD_NONE,f3,im,f1)
-#define LDF8_C_NC_inc(f1,f3,im)                M8(0x25,LD_NONE,f3,im,f1)
-#define LDFE_C_NC_inc(f1,f3,im)                M8(0x24,LD_NONE,f3,im,f1)
+#define LDFS_inc(f1,r3,r2)             M7(0x02,LD_NONE,r3,r2,f1)
+#define LDFD_inc(f1,r3,r2)             M7(0x03,LD_NONE,r3,r2,f1)
+#define LDF8_inc(f1,r3,r2)             M7(0x01,LD_NONE,r3,r2,f1)
+#define LDFE_inc(f1,r3,r2)             M7(0x00,LD_NONE,r3,r2,f1)
+#define LDFS_S_inc(f1,r3,r2)           M7(0x06,LD_NONE,r3,r2,f1)
+#define LDFD_S_inc(f1,r3,r2)           M7(0x07,LD_NONE,r3,r2,f1)
+#define LDF8_S_inc(f1,r3,r2)           M7(0x05,LD_NONE,r3,r2,f1)
+#define LDFE_S_inc(f1,r3,r2)           M7(0x04,LD_NONE,r3,r2,f1)
+#define LDFS_A_inc(f1,r3,r2)           M7(0x0a,LD_NONE,r3,r2,f1)
+#define LDXFD_A_inc(f1,r3,r2)          M7(0x0b,LD_NONE,r3,r2,f1)
+#define LDXF8_A_inc(f1,r3,r2)          M7(0x09,LD_NONE,r3,r2,f1)
+#define LDXFE_A_inc(f1,r3,r2)          M7(0x08,LD_NONE,r3,r2,f1)
+#define LDXFS_SA_inc(f1,r3,r2)         M7(0x0e,LD_NONE,r3,r2,f1)
+#define LDXFD_SA_inc(f1,r3,r2)         M7(0x0f,LD_NONE,r3,r2,f1)
+#define LDXF8_SA_inc(f1,r3,r2)         M7(0x0d,LD_NONE,r3,r2,f1)
+#define LDXFE_SA_inc(f1,r3,r2)         M7(0x0c,LD_NONE,r3,r2,f1)
+#define LDXFS_FILL_inc(f1,r3,r2)       M7(0x1b,LD_NONE,r3,r2,f1)
+#define LDXFS_C_CLR_inc(f1,r3,r2)      M7(0x22,LD_NONE,r3,r2,f1)
+#define LDXFD_C_CLR_inc(f1,r3,r2)      M7(0x23,LD_NONE,r3,r2,f1)
+#define LDXF8_C_CLR_inc(f1,r3,r2)      M7(0x21,LD_NONE,r3,r2,f1)
+#define LDXFE_C_CLR_inc(f1,r3,r2)      M7(0x20,LD_NONE,r3,r2,f1)
+#define LDXFS_C_NC_inc(f1,r3,r2)       M7(0x26,LD_NONE,r3,r2,f1)
+#define LDXFD_C_NC_inc(f1,r3,r2)       M7(0x27,LD_NONE,r3,r2,f1)
+#define LDXF8_C_NC_inc(f1,r3,r2)       M7(0x25,LD_NONE,r3,r2,f1)
+#define LDXFE_C_NC_inc(f1,r3,r2)       M7(0x24,LD_NONE,r3,r2,f1)
+#define LDIFS_inc(f1,f3,im)            M8(0x02,LD_NONE,f3,im,f1)
+#define LDIFD_inc(f1,f3,im)            M8(0x03,LD_NONE,f3,im,f1)
+#define LDIF8_inc(f1,f3,im)            M8(0x01,LD_NONE,f3,im,f1)
+#define LDIFE_inc(f1,f3,im)            M8(0x00,LD_NONE,f3,im,f1)
+#define LDIFS_S_inc(f1,f3,im)          M8(0x06,LD_NONE,f3,im,f1)
+#define LDIFD_S_inc(f1,f3,im)          M8(0x07,LD_NONE,f3,im,f1)
+#define LDIF8_S_inc(f1,f3,im)          M8(0x05,LD_NONE,f3,im,f1)
+#define LDIFE_S_inc(f1,f3,im)          M8(0x04,LD_NONE,f3,im,f1)
+#define LDIFS_A_inc(f1,f3,im)          M8(0x0a,LD_NONE,f3,im,f1)
+#define LDIFD_A_inc(f1,f3,im)          M8(0x0b,LD_NONE,f3,im,f1)
+#define LDIF8_A_inc(f1,f3,im)          M8(0x09,LD_NONE,f3,im,f1)
+#define LDIFE_A_inc(f1,f3,im)          M8(0x08,LD_NONE,f3,im,f1)
+#define LDIF_FILL_inc(f1,f3,im)                M8(0x1b,LD_NONE,f3,im,f1)
+#define LDIFS_C_CLR_inc(f1,f3,im)      M8(0x22,LD_NONE,f3,im,f1)
+#define LDIFD_C_CLR_inc(f1,f3,im)      M8(0x23,LD_NONE,f3,im,f1)
+#define LDIF8_C_CLR_inc(f1,f3,im)      M8(0x21,LD_NONE,f3,im,f1)
+#define LDIFE_C_CLR_inc(f1,f3,im)      M8(0x20,LD_NONE,f3,im,f1)
+#define LDIFS_C_NC_inc(f1,f3,im)       M8(0x26,LD_NONE,f3,im,f1)
+#define LDIFD_C_NC_inc(f1,f3,im)       M8(0x27,LD_NONE,f3,im,f1)
+#define LDIF8_C_NC_inc(f1,f3,im)       M8(0x25,LD_NONE,f3,im,f1)
+#define LDIFE_C_NC_inc(f1,f3,im)       M8(0x24,LD_NONE,f3,im,f1)
 /* ldpf */
 #define LDFPS(f1,f2,r3)                        M11(0x02,LD_NONE,r3,f2,f1)
 #define LDFPD(f1,f2,r3)                        M11(0x03,LD_NONE,r3,f2,f1)
@@ -577,15 +577,17 @@ static void 
_unordi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_float64_t*);
 #define ldr_f(r0,r1)                   LDFS(r0,r1)
 #define ldi_f(r0,i0)                   _ldi_f(_jit,r0,i0)
 static void _ldi_f(jit_state_t*,jit_int32_t,jit_word_t);
-#define ldxr_f(r0,r1,r2)               LDXFS(r0,r1,r2)
+#define ldxr_f(r0,r1,r2)               _ldxr_f(_jit,r0,r1,r2)
+static void _ldxr_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
 #define ldxi_f(r0,r1,i0)               _ldxi_f(_jit,r0,r1,i0)
 static void _ldxi_f(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
 #define ldr_d(r0,r1)                   LDFD(r0,r1)
 #define ldi_d(r0,i0)                   _ldi_d(_jit,r0,i0)
 static void _ldi_d(jit_state_t*,jit_int32_t,jit_word_t);
+#define ldxr_d(r0,r1,r2)               _ldxr_d(_jit,r0,r1,r2)
+static void _ldxr_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_int32_t);
 #define ldxi_d(r0,r1,i0)               _ldxi_d(_jit,r0,r1,i0)
 static void _ldxi_d(jit_state_t*,jit_int32_t,jit_int32_t,jit_word_t);
-#define ldxr_d(r0,r1,r2)               LDXFD(r0,r1,r2)
 #define str_f(r0,r1)                   STFS(r0,r1)
 #define sti_f(i0,r0)                   _sti_f(_jit,i0,r0)
 static void _sti_f(jit_state_t*,jit_word_t,jit_int32_t);
@@ -1282,6 +1284,16 @@ _ldi_f(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 }
 
 static void
+_ldxr_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
+{
+    jit_int32_t                reg;
+    reg = jit_get_reg(jit_class_gpr);
+    addr(rn(reg), r1, r2);
+    ldr_f(r0, rn(reg));
+    jit_unget_reg(reg);
+}
+
+static void
 _ldxi_f(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
 {
     jit_int32_t                reg;
@@ -1302,6 +1314,16 @@ _ldi_d(jit_state_t *_jit, jit_int32_t r0, jit_word_t i0)
 }
 
 static void
+_ldxr_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_int32_t r2)
+{
+    jit_int32_t                reg;
+    reg = jit_get_reg(jit_class_gpr);
+    addr(rn(reg), r1, r2);
+    ldr_d(r0, rn(reg));
+    jit_unget_reg(reg);
+}
+
+static void
 _ldxi_d(jit_state_t *_jit, jit_int32_t r0, jit_int32_t r1, jit_word_t i0)
 {
     jit_int32_t                reg;



reply via email to

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