guile-commits
[Top][All Lists]
Advanced

[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



reply via email to

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