[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 06/34: Allow a backend to have multiple temporary regist
From: |
Andy Wingo |
Subject: |
[Guile-commits] 06/34: Allow a backend to have multiple temporary registers |
Date: |
Mon, 20 May 2019 09:55:51 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 09e71475f4d86106708e8d5e77684e59c47cca48
Author: Andy Wingo <address@hidden>
Date: Wed May 15 16:19:33 2019 +0200
Allow a backend to have multiple temporary registers
---
lightening/aarch64.h | 4 ++--
lightening/lightening.c | 30 +++++++++++++++++++-----------
lightening/x86.h | 8 ++++----
3 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/lightening/aarch64.h b/lightening/aarch64.h
index fe1b181..13a0f1c 100644
--- a/lightening/aarch64.h
+++ b/lightening/aarch64.h
@@ -121,8 +121,8 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
#define JIT_R14 _X14
#define JIT_R15 _X15
#define JIT_R16 _X16
-#define JIT_R17 _X17
-#define JIT_RTMP _X18
+#define JIT_TMP0 _X17
+#define JIT_TMP1 _X18
#define JIT_V0 _X19
#define JIT_V1 _X20
#define JIT_V2 _X21
diff --git a/lightening/lightening.c b/lightening/lightening.c
index c08ebab..fe71c58 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -332,35 +332,43 @@ jit_align(jit_state_t *_jit, unsigned align)
static jit_gpr_t
get_temp_gpr(jit_state_t *_jit)
{
- ASSERT(!_jit->temp_gpr_saved);
- _jit->temp_gpr_saved = 1;
-#ifdef JIT_RTMP
- return JIT_RTMP;
-#else
- return JIT_VTMP;
+ switch(_jit->temp_gpr_saved++)
+ {
+ case 0:
+ return JIT_TMP0;
+#ifdef JIT_TMP1
+ case 1:
+ return JIT_TMP1;
#endif
+ default:
+ abort();
+ }
}
static jit_fpr_t
get_temp_fpr(jit_state_t *_jit)
{
- ASSERT(!_jit->temp_fpr_saved);
- _jit->temp_fpr_saved = 1;
- return JIT_FTMP;
+ switch(_jit->temp_gpr_saved++)
+ {
+ case 0:
+ return JIT_FTMP;
+ default:
+ abort();
+ }
}
static void
unget_temp_fpr(jit_state_t *_jit)
{
ASSERT(_jit->temp_fpr_saved);
- _jit->temp_fpr_saved = 0;
+ _jit->temp_fpr_saved--;
}
static void
unget_temp_gpr(jit_state_t *_jit)
{
ASSERT(_jit->temp_gpr_saved);
- _jit->temp_gpr_saved = 0;
+ _jit->temp_gpr_saved--;
}
static inline void emit_u8(jit_state_t *_jit, uint8_t u8) {
diff --git a/lightening/x86.h b/lightening/x86.h
index 8ed27e8..6474903 100644
--- a/lightening/x86.h
+++ b/lightening/x86.h
@@ -129,7 +129,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_V0 _RBP
# define JIT_V1 _RSI
# define JIT_V2 _RDI
-# define JIT_TMP _RBX
+# define JIT_TMP0 _RBX
# define JIT_F0 _XMM0
# define JIT_F1 _XMM1
# define JIT_F2 _XMM2
@@ -138,7 +138,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_F5 _XMM5
# define JIT_F6 _XMM6
# define JIT_FTMP _XMM7
-# define JIT_PLATFORM_CALLEE_SAVE_GPRS JIT_TMP
+# define JIT_PLATFORM_CALLEE_SAVE_GPRS JIT_TMP0
#elif __CYGWIN__
# define JIT_R0 _RAX
# define JIT_R1 _RCX
@@ -146,7 +146,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_R3 _R8
# define JIT_R4 _R9
# define JIT_R5 _R10
-# define JIT_RTMP _R11
+# define JIT_TMP0 _R11
# define JIT_V0 _RBX
# define JIT_V1 _RSI
# define JIT_V2 _RDI
@@ -180,7 +180,7 @@ jit_fpr_is_callee_save (jit_fpr_t reg)
# define JIT_R5 _R8
# define JIT_R6 _R9
# define JIT_R7 _R10
-# define JIT_RTMP _R11
+# define JIT_TMP0 _R11
# define JIT_V0 _RBX
# define JIT_V1 _R12
# define JIT_V2 _R13
- [Guile-commits] branch master updated (1b98734 -> e057ea0), Andy Wingo, 2019/05/20
- [Guile-commits] 02/34: Refactor some bits from x86 to lightening, Andy Wingo, 2019/05/20
- [Guile-commits] 07/34: Fix GPR temporary selection, Andy Wingo, 2019/05/20
- [Guile-commits] 01/34: Refactor to move temp register acquire to core, Andy Wingo, 2019/05/20
- [Guile-commits] 10/34: Fix a couple bugs related to aarch64 literal pools, Andy Wingo, 2019/05/20
- [Guile-commits] 06/34: Allow a backend to have multiple temporary registers,
Andy Wingo <=
- [Guile-commits] 09/34: Fix enter/leave JIT ABI, Andy Wingo, 2019/05/20
- [Guile-commits] 14/34: Fix dpkg --add-architecture invocation, Andy Wingo, 2019/05/20
- [Guile-commits] 16/34: Attempt to fix CI on Debian, Andy Wingo, 2019/05/20
- [Guile-commits] 19/34: Attempt to fix CI on Debian, Andy Wingo, 2019/05/20
- [Guile-commits] 24/34: Remove unused jit_{gpr,fpr}_is_callee_save, Andy Wingo, 2019/05/20
- [Guile-commits] 11/34: Aarch64 backend avoids needless temporary register allocation, Andy Wingo, 2019/05/20
- [Guile-commits] 04/34: Refactor to add support for constant tables, shifted relocs, Andy Wingo, 2019/05/20
- [Guile-commits] 34/34: Merge remote-tracking branch 'lightening/master', Andy Wingo, 2019/05/20
- [Guile-commits] 12/34: Remove jit_nop, Andy Wingo, 2019/05/20
- [Guile-commits] 15/34: Fix YAML for CI, Andy Wingo, 2019/05/20