guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 01/34: Refactor to move temp register acquire to core


From: Andy Wingo
Subject: [Guile-commits] 01/34: Refactor to move temp register acquire to core
Date: Mon, 20 May 2019 09:55:50 -0400 (EDT)

wingo pushed a commit to branch master
in repository guile.

commit f7080facb41deaecf485703f8522edcea9256787
Author: Andy Wingo <address@hidden>
Date:   Thu May 9 16:02:39 2019 +0200

    Refactor to move temp register acquire to core
---
 lightening/lightening.c | 48 ++++++++++++++++++++++++++++++++++++++++++----
 lightening/x86-cpu.c    | 19 ------------------
 lightening/x86-sse.c    | 51 +++++++++++++++++--------------------------------
 lightening/x86.h        |  3 ---
 4 files changed, 62 insertions(+), 59 deletions(-)

diff --git a/lightening/lightening.c b/lightening/lightening.c
index 0973d8a..7194238 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -189,6 +189,40 @@ jit_align(jit_state_t *_jit, unsigned align)
     jit_nop(_jit, there - here);
 }
 
+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;
+#endif
+}
+
+static jit_fpr_t
+get_temp_fpr(jit_state_t *_jit)
+{
+  ASSERT(!_jit->temp_fpr_saved);
+  _jit->temp_fpr_saved = 1;
+  return JIT_FTMP;
+}
+
+static void
+unget_temp_fpr(jit_state_t *_jit)
+{
+  ASSERT(_jit->temp_fpr_saved);
+  _jit->temp_fpr_saved = 0;
+}
+
+static void
+unget_temp_gpr(jit_state_t *_jit)
+{
+  ASSERT(_jit->temp_gpr_saved);
+  _jit->temp_gpr_saved = 0;
+}
+
 static inline void emit_u8(jit_state_t *_jit, uint8_t u8) {
   if (UNLIKELY(_jit->pc.uc + 1 > _jit->limit)) {
     _jit->overflow = 1;
@@ -570,10 +604,10 @@ abi_mem_to_mem(jit_state_t *_jit, enum jit_operand_abi 
abi, jit_gpr_t base,
     abi_gpr_to_mem(_jit, abi, base, offset, tmp);
     unget_temp_gpr(_jit);
   } else {
-    jit_fpr_t tmp = get_temp_xpr(_jit);
+    jit_fpr_t tmp = get_temp_fpr(_jit);
     abi_mem_to_fpr(_jit, abi, tmp, src_base, src_offset);
     abi_fpr_to_mem(_jit, abi, base, offset, tmp);
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
 }
 
@@ -704,7 +738,7 @@ move_one(jit_state_t *_jit, jit_operand_t *dst, 
jit_operand_t *src,
         jit_operand_t tmp;
         if (is_fpr_arg (src[j].kind)) {
           tmp_fpr = 1;
-          tmp = jit_operand_fpr(src[j].abi, get_temp_xpr(_jit));
+          tmp = jit_operand_fpr(src[j].abi, get_temp_fpr(_jit));
         } else {
           tmp_gpr = 1;
           /* Preserve addend, if any, from source operand, to be applied
@@ -729,7 +763,7 @@ move_one(jit_state_t *_jit, jit_operand_t *dst, 
jit_operand_t *src,
   if (tmp_gpr)
     unget_temp_gpr(_jit);
   else if (tmp_fpr)
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
 }
 
 static void
@@ -869,6 +903,12 @@ static const jit_gpr_t V[] = {
 #ifdef JIT_V7
   , JIT_V7
 #endif
+#ifdef JIT_V8
+  , JIT_V8
+#endif
+#ifdef JIT_V9
+  , JIT_V9
+#endif
  };
 
 static const jit_fpr_t VF[] = {
diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c
index 041c549..0b39e5a 100644
--- a/lightening/x86-cpu.c
+++ b/lightening/x86-cpu.c
@@ -265,25 +265,6 @@ popr(jit_state_t *_jit, int32_t r0)
   ic(_jit, 0x58 | r7(r0));
 }
 
-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;
-#endif
-}
-
-static void
-unget_temp_gpr(jit_state_t *_jit)
-{
-  ASSERT(_jit->temp_gpr_saved);
-  _jit->temp_gpr_saved = 0;
-}
-
 static void
 nop(jit_state_t *_jit, int32_t count)
 {
diff --git a/lightening/x86-sse.c b/lightening/x86-sse.c
index 9f4084c..59b7c74 100644
--- a/lightening/x86-sse.c
+++ b/lightening/x86-sse.c
@@ -187,21 +187,6 @@ popr_d(jit_state_t *_jit, int32_t r0)
   unget_temp_gpr(_jit);
 }
 
-static jit_fpr_t
-get_temp_xpr(jit_state_t *_jit)
-{
-  ASSERT(!_jit->temp_fpr_saved);
-  _jit->temp_fpr_saved = 1;
-  return JIT_FTMP;
-}
-
-static void
-unget_temp_xpr(jit_state_t *_jit)
-{
-  ASSERT(_jit->temp_fpr_saved);
-  _jit->temp_fpr_saved = 0;
-}
-
 static void
 addssr(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -409,14 +394,14 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
     movdqxr(_jit, r0, jit_gpr_regno(ireg));
     unget_temp_gpr(_jit);
 #else
-    jit_fpr_t freg = get_temp_xpr(_jit);
+    jit_fpr_t freg = get_temp_fpr(_jit);
     movi(_jit, jit_gpr_regno(ireg), data.ii[1]);
     movdlxr(_jit, jit_fpr_regno(freg), jit_gpr_regno(ireg));
     pslq(_jit, jit_fpr_regno(freg), 32);
     movi(_jit, jit_gpr_regno(ireg), data.ii[0]);
     movdlxr(_jit, r0, jit_gpr_regno(ireg));
     orpdr(_jit, r0, jit_fpr_regno(freg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
     unget_temp_gpr(_jit);
 #endif
   }
@@ -543,11 +528,11 @@ subr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t 
r2)
   if (r0 == r1)
     subssr(_jit, r0, r2);
   else if (r0 == r2) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     movr_f(_jit, jit_fpr_regno(reg), r0);
     movr_f(_jit, r0, r1);
     subssr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     movr_f(_jit, r0, r1);
@@ -561,11 +546,11 @@ subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t 
r2)
   if (r0 == r1)
     subsdr(_jit, r0, r2);
   else if (r0 == r2) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     movr_d(_jit, jit_fpr_regno(reg), r0);
     movr_d(_jit, r0, r1);
     subsdr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     movr_d(_jit, r0, r1);
@@ -605,11 +590,11 @@ divr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t 
r2)
   if (r0 == r1)
     divssr(_jit, r0, r2);
   else if (r0 == r2) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     movr_f(_jit, jit_fpr_regno(reg), r0);
     movr_f(_jit, r0, r1);
     divssr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     movr_f(_jit, r0, r1);
@@ -623,11 +608,11 @@ divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t 
r2)
   if (r0 == r1)
     divsdr(_jit, r0, r2);
   else if (r0 == r2) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     movr_d(_jit, jit_fpr_regno(reg), r0);
     movr_d(_jit, r0, r1);
     divsdr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     movr_d(_jit, r0, r1);
@@ -639,11 +624,11 @@ static void
 absr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
   if (r0 == r1) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     pcmpeqlr(_jit, jit_fpr_regno(reg), jit_fpr_regno(reg));
     psrl(_jit, jit_fpr_regno(reg), 1);
     andpsr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     pcmpeqlr(_jit, r0, r0);
@@ -656,11 +641,11 @@ static void
 absr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
   if (r0 == r1) {
-    jit_fpr_t reg = get_temp_xpr(_jit);
+    jit_fpr_t reg = get_temp_fpr(_jit);
     pcmpeqlr(_jit, jit_fpr_regno(reg), jit_fpr_regno(reg));
     psrq(_jit, jit_fpr_regno(reg), 1);
     andpdr(_jit, r0, jit_fpr_regno(reg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   }
   else {
     pcmpeqlr(_jit, r0, r0);
@@ -675,10 +660,10 @@ negr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
   jit_gpr_t ireg = get_temp_gpr(_jit);
   imovi(_jit, jit_gpr_regno(ireg), 0x80000000);
   if (r0 == r1) {
-    jit_fpr_t freg = get_temp_xpr(_jit);
+    jit_fpr_t freg = get_temp_fpr(_jit);
     movdlxr(_jit, jit_fpr_regno(freg), jit_gpr_regno(ireg));
     xorpsr(_jit, r0, jit_fpr_regno(freg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   } else {
     movdlxr(_jit, r0, jit_gpr_regno(ireg));
     xorpsr(_jit, r0, r1);
@@ -692,11 +677,11 @@ negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
   jit_gpr_t ireg = get_temp_gpr(_jit);
   imovi(_jit, jit_gpr_regno(ireg), 0x80000000);
   if (r0 == r1) {
-    jit_fpr_t freg = get_temp_xpr(_jit);
+    jit_fpr_t freg = get_temp_fpr(_jit);
     movdlxr(_jit, jit_fpr_regno(freg), jit_gpr_regno(ireg));
     pslq(_jit, jit_fpr_regno(freg), 32);
     xorpdr(_jit, r0, jit_fpr_regno(freg));
-    unget_temp_xpr(_jit);
+    unget_temp_fpr(_jit);
   } else {
     movdlxr(_jit, r0, jit_gpr_regno(ireg));
     pslq(_jit, r0, 32);
diff --git a/lightening/x86.h b/lightening/x86.h
index 6e029d6..41c136e 100644
--- a/lightening/x86.h
+++ b/lightening/x86.h
@@ -20,9 +20,6 @@
 #ifndef _jit_x86_h
 #define _jit_x86_h
 
-/*
- * Types
- */
 #if __WORDSIZE == 32
 # if defined(__x86_64__)
 #  define __X64    1



reply via email to

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