guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 41/437: x86-64 now passes test suite


From: Andy Wingo
Subject: [Guile-commits] 41/437: x86-64 now passes test suite
Date: Mon, 2 Jul 2018 05:13:41 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit c1725c932091c1daec30550e7387948de7272fa6
Author: Paolo Bonzini <address@hidden>
Date:   Mon Nov 20 16:14:20 2006 +0000

    x86-64 now passes test suite
    
    2006-11-20  Paolo Bonzini  <address@hidden>
    
        * lightning/i386/core-i386.h: Move jit_movip, jit_check8, jit_reg8,
        jit_reg16, jit_movbrm...
        * lightning/i386/core-32.h: ... here.
        * lightning/i386/core-64.h: Redefine them.  Fix other bugs.
    
        * tests/printf.c: Do not do a varargs call.
    
    git-archimport-id: address@hidden/lightning--stable--1.2--patch-44
---
 ChangeLog                  |  9 +++++++++
 lightning/i386/core-32.h   | 11 +++++++++++
 lightning/i386/core-64.h   | 14 +++++++++++---
 lightning/i386/core-i386.h | 12 ------------
 tests/printf.c             |  7 ++++++-
 5 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index aa98807..8f7dc8d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2006-11-20  Paolo Bonzini  <address@hidden>
 
+       * lightning/i386/core-i386.h: Move jit_movip, jit_check8, jit_reg8,
+       jit_reg16, jit_movbrm...
+       * lightning/i386/core-32.h: ... here.
+       * lightning/i386/core-64.h: Redefine them.  Fix other bugs.
+
+       * tests/printf.c: Do not do a varargs call.
+
+2006-11-20  Paolo Bonzini  <address@hidden>
+
        * lightning/i386/asm-i386.h: Check in rewrite from aranym.
        * lightning/i386/asm-32.h: Adjust.
        * lightning/i386/asm-64.h: Adjust.
diff --git a/lightning/i386/core-32.h b/lightning/i386/core-32.h
index 25594d5..d58554b 100644
--- a/lightning/i386/core-32.h
+++ b/lightning/i386/core-32.h
@@ -99,12 +99,23 @@ struct jit_local_state {
 #define        jit_arg_ul()            ((_jitl.framesize += sizeof(long)) - 
sizeof(long))
 #define        jit_arg_p()             ((_jitl.framesize += sizeof(long)) - 
sizeof(long))
 
+#define jit_movi_p(d, is)       (jit_movi_l(d, ((long)(is))), _jit.x.pc)
 #define jit_patch_long_at(jump_pc,v)  (*_PSL((jump_pc) - sizeof(long)) = 
_jit_SL((jit_insn *)(v) - (jump_pc)))
 #define jit_patch_at(jump_pc,v)  jit_patch_long_at(jump_pc, v)
 #define jit_ret()              ((_jitl.alloca_offset < 0 ? LEAVE_() : 
POPLr(_EBP)), POPLr(_EDI), POPLr(_ESI), POPLr(_EBX), RET_())
 
 /* Memory */
 
+#define jit_check8(rs)          ( (rs) <= _EBX )
+#define jit_reg8(rs)            ( ((rs) == _SI || (rs) == _DI) ? _AL : 
(_rN(rs) | _AL ))
+#define jit_reg16(rs)           ( _rN(rs) | _AX )
+
+/* In jit_replace below, _EBX is dummy */
+#define jit_movbrm(rs, dd, db, di, ds)                                         
       \
+        (jit_check8(rs)                                                        
 \
+                ? MOVBrm(jit_reg8(rs), dd, db, di, ds)                         
 \
+                : jit_replace(_EBX, rs, _EAX, MOVBrm(_AL, dd, db, di, ds)))
+
 #define jit_ldi_c(d, is)                MOVSBLmr((is), 0,    0,    0, (d))
 #define jit_ldxi_c(d, rs, is)           MOVSBLmr((is), (rs), 0,    0, (d))
 
diff --git a/lightning/i386/core-64.h b/lightning/i386/core-64.h
index fefa421..cb15265 100644
--- a/lightning/i386/core-64.h
+++ b/lightning/i386/core-64.h
@@ -156,6 +156,7 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX };
 
 #define jit_negr_l(d, rs)      jit_opi_((d), (rs), NEGQr(d), (XORQrr((d), 
(d)), SUBQrr((rs), (d))) )
 #define jit_movr_l(d, rs)      ((void)((rs) == (d) ? 0 : MOVQrr((rs), (d))))
+#define jit_movi_p(d, is)       (MOVQir(((long)(is)), (d)), _jit.x.pc)
 #define jit_movi_l(d, is)      ((is) \
                                  ? (_u32P((long)(is)) \
                                     ? MOVLir((is), (d)) \
@@ -177,7 +178,7 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX };
 #define jit_patch_long_at(jump_pc,v)  (*_PSL((jump_pc) - sizeof(long)) = 
_jit_SL((jit_insn *)(v)))
 #define jit_patch_short_at(jump_pc,v)  (*_PSI((jump_pc) - sizeof(int)) = 
_jit_SI((jit_insn *)(v) - (jump_pc)))
 #define jit_patch_at(jump_pc,v) (_jitl.long_jumps ? 
jit_patch_long_at((jump_pc)-3, v) : jit_patch_short_at(jump_pc, v))
-#define jit_ret() ((_jitl.alloca_offset < -24 ? LEAVE_() : POPQr(_EBP)), 
POPQr(_R13), POPQr(_R12), POPQr(_EBX), RET_())
+#define jit_ret() ((_jitl.alloca_offset < 0 ? LEAVE_() : POPQr(_EBP)), 
POPQr(_R13), POPQr(_R12), POPQr(_EBX), RET_())
 
 #define _jit_ldi_l(d, is)              MOVQmr((is), 0,    0,    0,  (d))
 #define jit_ldr_l(d, rs)               MOVQmr(0,    (rs), 0,    0,  (d))
@@ -193,14 +194,21 @@ static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX 
};
 #define jit_sti_l(id, rs)              (_u32P((long)(id)) ? _jit_sti_l(id, rs) 
: (jit_movi_l(JIT_REXTMP, id), jit_str_l (JIT_REXTMP, (rs))))
 
 /* Memory */
+
+/* Used to implement ldc, stc, ... We have SIL and friends which simplify it 
all.  */
+#define jit_check8(rs)          1
+#define jit_reg8(rs)            (_rN(rs) | _AL )
+#define jit_reg16(rs)           (_rN(rs) | _AX )
+#define jit_movbrm(rs, dd, db, di, ds)         MOVBrm(jit_reg8(rs), dd, db, 
di, ds)
+
 #define jit_ldi_c(d, is)                (_u32P((long)(is)) ? MOVSBLmr((is), 0, 
   0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldr_c(d, JIT_REXTMP)))
 #define jit_ldxi_c(d, rs, is)           (_u32P((long)(is)) ? MOVSBLmr((is), 
(rs), 0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldxr_c(d, rs, 
JIT_REXTMP)))
 
 #define jit_ldi_uc(d, is)               (_u32P((long)(is)) ? MOVZBLmr((is), 0, 
   0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldr_uc(d, JIT_REXTMP)))
 #define jit_ldxi_uc(d, rs, is)          (_u32P((long)(is)) ? MOVZBLmr((is), 
(rs), 0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldxr_uc(d, rs, 
JIT_REXTMP)))
 
-#define jit_sti_c(id, rs)               (_u32P((long)(id)) ? jit_movbrm((rs), 
(id), 0,    0,    0) : (jit_movi_l(JIT_REXTMP, id), jit_str_c(JIT_REXTMP, rs)))
-#define jit_stxi_c(id, rd, rs)          (_u32P((long)(id)) ? jit_movbrm((rs), 
(id), (rd), 0,    0) : (jit_movi_l(JIT_REXTMP, id), jit_stxr_c(JIT_REXTMP, rd, 
rs)))
+#define jit_sti_c(id, rs)               (_u32P((long)(id)) ? 
MOVBrm(jit_reg8(rs), (id), 0,    0,    0) : (jit_movi_l(JIT_REXTMP, id), 
jit_str_c(JIT_REXTMP, rs)))
+#define jit_stxi_c(id, rd, rs)          (_u32P((long)(id)) ? 
MOVBrm(jit_reg8(rs), (id), (rd), 0,    0) : (jit_movi_l(JIT_REXTMP, id), 
jit_stxr_c(JIT_REXTMP, rd, rs)))
 
 #define jit_ldi_s(d, is)                (_u32P((long)(is)) ? MOVSWLmr((is), 0, 
   0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldr_s(d, JIT_REXTMP)))
 #define jit_ldxi_s(d, rs, is)           (_u32P((long)(is)) ? MOVSWLmr((is), 
(rs), 0,    0, (d)) :  (jit_movi_l(JIT_REXTMP, is), jit_ldxr_s(d, rs, 
JIT_REXTMP)))
diff --git a/lightning/i386/core-i386.h b/lightning/i386/core-i386.h
index 7820972..91d6cef 100644
--- a/lightning/i386/core-i386.h
+++ b/lightning/i386/core-i386.h
@@ -94,17 +94,6 @@
 #define jit_bra_i0(rs, is, op, op0)                                    \
        ( (is) == 0 ? (TESTLrr(rs, rs), op0, _jit.x.pc) : (CMPLir(is, rs), op, 
_jit.x.pc))
 
-/* Used to implement ldc, stc, ... */
-#define jit_check8(rs)         ( (rs) <= _EBX )
-#define jit_reg8(rs)           ( ((rs) == _SI || (rs) == _DI) ? _AL : (_rN(rs) 
| _AL ))
-#define jit_reg16(rs)          ( _rN(rs) | _AX )
-
-/* In jit_replace below, _EBX is dummy */
-#define jit_movbrm(rs, dd, db, di, ds)                                         
       \
-       (jit_check8(rs)                                                         
\
-               ? MOVBrm(jit_reg8(rs), dd, db, di, ds)                          
\
-               : jit_replace(_EBX, rs, _EAX, MOVBrm(_AL, dd, db, di, ds)))
-
 /* Reduce arguments of XOR/OR/TEST */
 #define jit_reduce_(op)        op
 #define jit_reduce(op, is, rs)                                                 
\
@@ -267,7 +256,6 @@
 
 #define jit_movr_i(d, rs)      ((void)((rs) == (d) ? 0 : MOVLrr((rs), (d))))
 #define jit_movi_i(d, is)      ((is) ? MOVLir((is), (d)) : XORLrr ((d), (d)) )
-#define jit_movi_p(d, is)       (jit_movi_l(d, ((long)(is))), _jit.x.pc)
 #define jit_patch_movi(pa,pv)   (*_PSL((pa) - sizeof(long)) = _jit_SL((pv)))
 
 #define jit_ntoh_ui(d, rs)     jit_op_((d), (rs), BSWAPLr(d))
diff --git a/tests/printf.c b/tests/printf.c
index 6a860a3..9ce0324 100644
--- a/tests/printf.c
+++ b/tests/printf.c
@@ -40,6 +40,11 @@ static char codeBuffer[1024];
 
 typedef void (*pvfi)(int);     /* Pointer to Void Function of Int */
 
+static void display_message (char *msg, int value)
+{
+  printf (msg, value);
+}
+
 int main()
 {
   pvfi         myFunction;             /* ptr to generated code */
@@ -55,7 +60,7 @@ int main()
   jit_prepare_i(2);
     jit_pusharg_i(JIT_R1);             /* push in reverse order */
     jit_pusharg_p(JIT_R0);
-  jit_finish(printf);
+  jit_finish(display_message);
   jit_ret();
   end = jit_get_ip().ptr;
 



reply via email to

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