wingo pushed a commit to branch lightning
in repository guile.
commit 07379b8a010bbba59a6916b3e0a4ab58e6d36295
Author: Paolo Bonzini <[email protected]>
Date: Sun Jan 13 10:22:29 2008 +0100
don't truncate function pointers on amd64
2008-01-13 Paolo Bonzini <[email protected]>
* lightning/i386/core-i386.h: Move jit_calli and jit_callr...
* lightning/i386/core-32.h: ... here.
* lightning/i386/core-64.h: Redefine them.
---
ChangeLog | 6 ++++++
lightning/i386/core-32.h | 3 +++
lightning/i386/core-64.h | 12 +++++++++---
lightning/i386/core-i386.h | 2 --
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a7e8841..cbe534d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-13 Paolo Bonzini <[email protected]>
+
+ * lightning/i386/core-i386.h: Move jit_calli and jit_callr...
+ * lightning/i386/core-32.h: ... here.
+ * lightning/i386/core-64.h: Redefine them.
+
2008-01-05 Paolo Bonzini <[email protected]>
* lightning/i386/fp-32.h: Fix sub(a,0,a).
diff --git a/lightning/i386/core-32.h b/lightning/i386/core-32.h
index c48c44a..48153e6 100644
--- a/lightning/i386/core-32.h
+++ b/lightning/i386/core-32.h
@@ -85,6 +85,9 @@ struct jit_local_state {
jit_allocai_internal ((n), 0)
#endif
+#define jit_calli(label) (CALLm( ((unsigned long) (label))), _jit.x.pc)
+#define jit_callr(reg) CALLsr(reg)
+
#define jit_pusharg_i(rs) PUSHLr(rs)
#define jit_finish(sub) ((void)jit_calli((sub)), ADDLir(sizeof(long) *
_jitl.argssize, JIT_SP), _jitl.argssize = 0)
#define jit_finishr(reg) (jit_callr((reg)), ADDLir(sizeof(long) *
_jitl.argssize, JIT_SP), _jitl.argssize = 0)
diff --git a/lightning/i386/core-64.h b/lightning/i386/core-64.h
index 03d1053..917a212 100644
--- a/lightning/i386/core-64.h
+++ b/lightning/i386/core-64.h
@@ -120,15 +120,21 @@ struct jit_local_state {
#define jit_base_prolog() (PUSHQr(_EBX), PUSHQr(_R12), PUSHQr(_R13),
PUSHQr(_EBP), MOVQrr(_ESP, _EBP))
#define jit_prolog(n) (_jitl.nextarg_getfp = _jitl.nextarg_geti = 0,
_jitl.alloca_offset = 0, jit_base_prolog())
+#define jit_calli(sub) (MOVQir((long) (sub), JIT_REXTMP),
CALLLsr(JIT_REXTMP))
+#define jit_callr(reg) CALLLsr((reg))
+
/* Stack isn't used for arguments: */
#define jit_prepare_i(ni) (_jitl.argssize = 0)
#define jit_pusharg_i(rs) (_jitl.argssize++, MOVQrr(rs, JIT_CALLTMPSTART
+ _jitl.argssize - 1))
-#define jit_finish(sub) (jit_shift_args(), (void)jit_calli((sub)),
jit_restore_locals())
-#define jit_reg_is_arg(reg) ((reg == _EDI) || (reg ==_ESI) || (reg == _EDX))
+#define jit_finish(sub) (MOVQir((long) (sub), JIT_REXTMP), \
+ jit_shift_args(), \
+ CALLLsr(JIT_REXTMP), \
+ jit_restore_locals())
+#define jit_reg_is_arg(reg) ((reg == _EDI) || (reg ==_ESI) || (reg ==
_EDX))
#define jit_finishr(reg) ((jit_reg_is_arg((reg)) ? MOVQrr(reg,
JIT_REXTMP) : (void)0), \
jit_shift_args(), \
- jit_reg_is_arg((reg)) ? CALLsr((JIT_REXTMP))
: jit_callr((reg)), \
+ CALLLsr(jit_reg_is_arg((reg)) ? JIT_REXTMP :
(reg)), \
jit_restore_locals())
/* R12 and R13 are callee-save, instead of EDI and ESI. Can be improved. */
diff --git a/lightning/i386/core-i386.h b/lightning/i386/core-i386.h
index 754cdff..f8df54b 100644
--- a/lightning/i386/core-i386.h
+++ b/lightning/i386/core-i386.h
@@ -316,8 +316,6 @@
#define jit_bmci_i(label, rs, is) (jit_reduce(TEST, (is), (rs)),
JZm(label), _jit.x.pc)
#define jit_jmpi(label) (JMPm( ((unsigned long)
(label))), _jit.x.pc)
-#define jit_calli(label) (CALLm( ((unsigned long) (label))),
_jit.x.pc)
-#define jit_callr(reg) CALLsr(reg)
#define jit_jmpr(reg) JMPsr(reg)
/* Memory */