mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-27 15:30:19 +02:00
don't truncate function pointers on amd64
2008-01-13 Paolo Bonzini <bonzini@gnu.org> * lightning/i386/core-i386.h: Move jit_calli and jit_callr... * lightning/i386/core-32.h: ... here. * lightning/i386/core-64.h: Redefine them.
This commit is contained in:
parent
950b2cefe9
commit
07379b8a01
4 changed files with 18 additions and 5 deletions
|
@ -1,3 +1,9 @@
|
|||
2008-01-13 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* 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 <bonzini@gnu.org>
|
||||
|
||||
* lightning/i386/fp-32.h: Fix sub(a,0,a).
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue