[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 87/437: rewrite x86-64 argument passing to support up to
From: |
Andy Wingo |
Subject: |
[Guile-commits] 87/437: rewrite x86-64 argument passing to support up to 6 arguments |
Date: |
Mon, 2 Jul 2018 05:13:51 -0400 (EDT) |
wingo pushed a commit to branch lightning
in repository guile.
commit 6ee7c1234998168a73f6346ce79be1d59f10beee
Author: Paolo Bonzini <address@hidden>
Date: Mon Jun 16 14:09:10 2008 +0200
rewrite x86-64 argument passing to support up to 6 arguments
2008-06-15 Paolo Bonzini <address@hidden>
* lightning/i386/core-64.h: Rewrite argument passing to
support up to 6 arguments and generate less code.
---
ChangeLog | 5 +++++
lightning/i386/core-64.h | 29 +++++++++++------------------
2 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index fb33f50..1e05fe1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-06-15 Paolo Bonzini <address@hidden>
+
+ * lightning/i386/core-64.h: Rewrite argument passing to
+ support up to 6 arguments and generate less code.
+
2008-06-14 Laurent Michel <address@hidden>
* lightning/i386/core-64.h (jit_movi_l): When the operand is 0,
diff --git a/lightning/i386/core-64.h b/lightning/i386/core-64.h
index 53af5e7..173a229 100644
--- a/lightning/i386/core-64.h
+++ b/lightning/i386/core-64.h
@@ -36,8 +36,7 @@
/* Used to implement ldc, stc, ... */
#define JIT_CAN_16 0
-#define JIT_CALLTMPSTART 0x48
-#define JIT_REXTMP 0x4B
+#define JIT_REXTMP _R9D
#define JIT_V_NUM 3
#define JIT_V(i) ((i) == 0 ? _EBX : _R11D + (i))
@@ -127,27 +126,20 @@ struct jit_local_state {
#define jit_callr(reg) CALLsr((reg))
/* Stack isn't used for arguments: */
-#define jit_prepare_i(ni) (_jitl.argssize = 0)
+#define jit_prepare_i(ni) (_jitl.argssize = (ni))
-#define jit_pusharg_i(rs) (_jitl.argssize++, MOVQrr(rs, JIT_CALLTMPSTART
+ _jitl.argssize - 1))
-#define jit_finish(sub) (MOVQir((long) (sub), JIT_REXTMP), \
- jit_shift_args(), \
+#define jit_pusharg_i(rs) (--_jitl.argssize, MOVQrr(rs,
jit_arg_reg_temp[_jitl.argssize]))
+#define jit_finish(sub) (jit_shift_args(), \
+ MOVQir((long) (sub), JIT_REXTMP), \
CALLsr(JIT_REXTMP))
-#define jit_reg_is_arg(reg) ((reg == _EDI) || (reg ==_ESI) || (reg ==
_EDX))
+#define jit_reg_is_arg(reg) ((reg) == _ECX || (reg) == _EDX)
#define jit_finishr(reg) ((jit_reg_is_arg((reg)) ? MOVQrr(reg,
JIT_REXTMP) : (void)0), \
jit_shift_args(), \
CALLsr(jit_reg_is_arg((reg)) ? JIT_REXTMP :
(reg)))
#define jit_shift_args() \
- (_jitl.argssize-- \
- ? ((void)MOVQrr(JIT_CALLTMPSTART + _jitl.argssize, jit_arg_reg_order[0]), \
- (_jitl.argssize-- \
- ? ((void)MOVQrr(JIT_CALLTMPSTART + _jitl.argssize,
jit_arg_reg_order[1]), \
- (_jitl.argssize-- \
- ? (void)MOVQrr(JIT_CALLTMPSTART, jit_arg_reg_order[2]) \
- : (void)0)) \
- : (void)0)) \
- : (void)0)
+ ((_jitl.argssize >= 3 ? (void) (MOVQrr(_R10D, _RDX)) : (void) 0), \
+ (_jitl.argssize >= 4 ? (void) (MOVQrr(_R11D, _RCX)) : (void) 0))
#define jit_retval_l(rd) ((void)jit_movr_l ((rd), _EAX))
#define jit_arg_c()
(jit_arg_reg_order[_jitl.nextarg_geti++])
@@ -159,8 +151,9 @@ struct jit_local_state {
#define jit_arg_l()
(jit_arg_reg_order[_jitl.nextarg_geti++])
#define jit_arg_ul()
(jit_arg_reg_order[_jitl.nextarg_geti++])
#define jit_arg_p()
(jit_arg_reg_order[_jitl.nextarg_geti++])
-#define jit_arg_up()
(jit_arg_reg_order[_jitl.nextarg_geti++])
-static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX };
+
+static int jit_arg_reg_temp[] = { _EDI, _ESI, _R10D, _R11D, _R8D, _R9D };
+static int jit_arg_reg_order[] = { _EDI, _ESI, _EDX, _ECX, _R8D, _R9D };
#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))))
- [Guile-commits] 72/437: misc. x86-64 bugfixes, (continued)
- [Guile-commits] 72/437: misc. x86-64 bugfixes, Andy Wingo, 2018/07/02
- [Guile-commits] 78/437: avoid CRLF issues on mingw, Andy Wingo, 2018/07/02
- [Guile-commits] 62/437: commit source files for separate using/porting manuals, Andy Wingo, 2018/07/02
- [Guile-commits] 80/437: fix C++ incompatibility in i386 back-end, Andy Wingo, 2018/07/02
- [Guile-commits] 45/437: add floating-point for x86-64, Andy Wingo, 2018/07/02
- [Guile-commits] 28/437: first merge of x86-64 backend and related configury changes, Andy Wingo, 2018/07/02
- [Guile-commits] 74/437: add long boolean operations for x86-64, Andy Wingo, 2018/07/02
- [Guile-commits] 89/437: fix _rN vs. _rR, Andy Wingo, 2018/07/02
- [Guile-commits] 90/437: fix IMULQir and IMULQirr, Andy Wingo, 2018/07/02
- [Guile-commits] 79/437: fix jit_replace8 for case when one of the operands is _EAX., Andy Wingo, 2018/07/02
- [Guile-commits] 87/437: rewrite x86-64 argument passing to support up to 6 arguments,
Andy Wingo <=
- [Guile-commits] 92/437: fix installation bug, Andy Wingo, 2018/07/02
- [Guile-commits] 71/437: add missing x86-64 memory operations, Andy Wingo, 2018/07/02
- [Guile-commits] 84/437: move x86-64 JIT_V1/JIT_V2 in R12/R13, Andy Wingo, 2018/07/02
- [Guile-commits] 83/437: detect 32-/64-bit variant of i386 back-end at include time (not configure time), Andy Wingo, 2018/07/02
- [Guile-commits] 86/437: fix x86-64 jit_movi_l (x, 0) and 16-byte stack alignment in the prolog, Andy Wingo, 2018/07/02
- [Guile-commits] 91/437: fix miscellaneous PPC-32 back-end bugs, Andy Wingo, 2018/07/02
- [Guile-commits] 103/437: fix two bugs in load/store for i386, Andy Wingo, 2018/07/02
- [Guile-commits] 100/437: fix jit_movbrm in the i386 backend, Andy Wingo, 2018/07/02
- [Guile-commits] 58/437: use CALLsr, not CALLLsr, Andy Wingo, 2018/07/02
- [Guile-commits] 60/437: don't use _VOID symbol, reserved by newlib (cygwin), Andy Wingo, 2018/07/02