guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 02/03: Simplify register representation even more


From: Andy Wingo
Subject: [Guile-commits] 02/03: Simplify register representation even more
Date: Thu, 25 Apr 2019 17:27:04 -0400 (EDT)

wingo pushed a commit to branch lightening
in repository guile.

commit e29977a82bb1bdfd040a8143276df521a69b9a6f
Author: Andy Wingo <address@hidden>
Date:   Thu Apr 25 23:22:44 2019 +0200

    Simplify register representation even more
    
    The register structures just contain the regno.  Since the only flag is
    the callee-save flag, we can punt that to a separate per-backend,
    per-target predicate.
---
 lightening.h     |  48 ++++---------------
 lightening/x86.h | 142 +++++++++++++++++++++++++++----------------------------
 2 files changed, 80 insertions(+), 110 deletions(-)

diff --git a/lightening.h b/lightening.h
index e8e097a..d5a96fa 100644
--- a/lightening.h
+++ b/lightening.h
@@ -43,44 +43,26 @@ typedef ptrdiff_t   jit_off_t;
 typedef intptr_t       jit_imm_t;
 typedef uintptr_t      jit_uimm_t;
 
-typedef struct jit_gpr { uint8_t bits; } jit_gpr_t;
-typedef struct jit_fpr { uint8_t bits; } jit_fpr_t;
-
-enum jit_register_flags
-{
-  JIT_REGISTER_CALLEE_SAVE = 0x40
-};
+typedef struct jit_gpr { uint8_t regno; } jit_gpr_t;
+typedef struct jit_fpr { uint8_t regno; } jit_fpr_t;
 
 // Precondition: regno between 0 and 63, inclusive.
 #define JIT_GPR(regno) ((jit_gpr_t) { regno })
 #define JIT_FPR(regno) ((jit_fpr_t) { regno })
-#define JIT_CALLEE_SAVE_GPR(regno) \
-  ((jit_gpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
-#define JIT_CALLEE_SAVE_FPR(regno) \
-  ((jit_fpr_t) { (regno) | JIT_REGISTER_CALLEE_SAVE })
 
-static inline jit_bool_t
-jit_gpr_is_callee_save (jit_gpr_t reg)
-{
-  return reg.bits & JIT_REGISTER_CALLEE_SAVE;
-}
+static inline uint8_t jit_gpr_regno (jit_gpr_t reg) { return reg.regno; }
+static inline uint8_t jit_fpr_regno (jit_fpr_t reg) { return reg.regno; }
 
 static inline jit_bool_t
-jit_fpr_is_callee_save (jit_fpr_t reg)
-{
-  return reg.bits & JIT_REGISTER_CALLEE_SAVE;
-}
-
-static inline uint8_t
-jit_gpr_regno (jit_gpr_t reg)
+jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
 {
-  return reg.bits & 0x3f;
+  return jit_gpr_regno (a) == jit_gpr_regno (b);
 }
 
-static inline uint8_t
-jit_fpr_regno (jit_fpr_t reg)
+static inline jit_bool_t
+jit_same_fprs (jit_fpr_t a, jit_fpr_t b)
 {
-  return reg.bits & 0x3f;
+  return jit_fpr_regno (a) == jit_fpr_regno (b);
 }
 
 enum jit_reloc_kind
@@ -128,18 +110,6 @@ typedef struct jit_reloc
 #  include "lightening/alpha.h"
 #endif
 
-static inline jit_bool_t
-jit_same_gprs (jit_gpr_t a, jit_gpr_t b)
-{
-  return a.bits == b.bits;
-}
-
-static inline jit_bool_t
-jit_same_fprs (jit_fpr_t a, jit_fpr_t b)
-{
-  return a.bits == b.bits;
-}
-
 typedef struct jit_state       jit_state_t;
 
 enum jit_operand_abi
diff --git a/lightening/x86.h b/lightening/x86.h
index 47a8750..de47df8 100644
--- a/lightening/x86.h
+++ b/lightening/x86.h
@@ -44,81 +44,33 @@
 #  define __X32    0
 #endif
 
-#if __X32
-#  define _RAX     JIT_GPR(0)
-#  define _RCX     JIT_GPR(1)
-#  define _RDX     JIT_GPR(2)
-#  define _RBX     JIT_CALLEE_SAVE_GPR(3)
-#  define _RSP     JIT_CALLEE_SAVE_GPR(4)
-#  define _RBP     JIT_CALLEE_SAVE_GPR(5)
-#  define _RSI     JIT_CALLEE_SAVE_GPR(6)
-#  define _RDI     JIT_CALLEE_SAVE_GPR(7)
-#  define _XMM0    JIT_FPR(0)
-#  define _XMM1    JIT_FPR(1)
-#  define _XMM2    JIT_FPR(2)
-#  define _XMM3    JIT_FPR(3)
-#  define _XMM4    JIT_FPR(4)
-#  define _XMM5    JIT_FPR(5)
-#  define _XMM6    JIT_FPR(6)
-#  define _XMM7    JIT_FPR(7)
-#elif __CYGWIN__
-#  define _RAX     JIT_GPR(0)
-#  define _RCX     JIT_GPR(1)
-#  define _RDX     JIT_GPR(2)
-#  define _RBX     JIT_CALLEE_SAVE_GPR(3)
-#  define _RSP     JIT_CALLEE_SAVE_GPR(4)
-#  define _RBP     JIT_CALLEE_SAVE_GPR(5)
-#  define _RSI     JIT_CALLEE_SAVE_GPR(6)
-#  define _RDI     JIT_CALLEE_SAVE_GPR(7)
-#  define _R8      JIT_GPR(8)
-#  define _R9      JIT_GPR(9)
-#  define _R10     JIT_GPR(10)
-#  define _R11     JIT_GPR(11)
-#  define _R12     JIT_CALLEE_SAVE_GPR(12)
-#  define _R13     JIT_CALLEE_SAVE_GPR(13)
-#  define _R14     JIT_CALLEE_SAVE_GPR(14)
-#  define _R15     JIT_CALLEE_SAVE_GPR(15)
-#  define _XMM0    JIT_FPR(0)
-#  define _XMM1    JIT_FPR(1)
-#  define _XMM2    JIT_FPR(2)
-#  define _XMM3    JIT_FPR(3)
-#  define _XMM4    JIT_FPR(4)
-#  define _XMM5    JIT_FPR(5)
-#  define _XMM6    JIT_CALLEE_SAVE_FPR(6)
-#  define _XMM7    JIT_CALLEE_SAVE_FPR(7)
-#  define _XMM8    JIT_CALLEE_SAVE_FPR(8)
-#  define _XMM9    JIT_CALLEE_SAVE_FPR(9)
-#  define _XMM10   JIT_CALLEE_SAVE_FPR(10)
-#  define _XMM11   JIT_CALLEE_SAVE_FPR(11)
-#  define _XMM12   JIT_CALLEE_SAVE_FPR(12)
-#  define _XMM13   JIT_CALLEE_SAVE_FPR(13)
-#  define _XMM14   JIT_CALLEE_SAVE_FPR(14)
-#  define _XMM15   JIT_CALLEE_SAVE_FPR(15)
-#else
-#  define _RAX     JIT_GPR(0)
-#  define _RCX     JIT_GPR(1)
-#  define _RDX     JIT_GPR(2)
-#  define _RBX     JIT_CALLEE_SAVE_GPR(3)
-#  define _RSP     JIT_CALLEE_SAVE_GPR(4)
-#  define _RBP     JIT_CALLEE_SAVE_GPR(5)
-#  define _RSI     JIT_GPR(6)
-#  define _RDI     JIT_GPR(7)
+#define _RAX     JIT_GPR(0)
+#define _RCX     JIT_GPR(1)
+#define _RDX     JIT_GPR(2)
+#define _RBX     JIT_GPR(3)
+#define _RSP     JIT_GPR(4)
+#define _RBP     JIT_GPR(5)
+#define _RSI     JIT_GPR(6)
+#define _RDI     JIT_GPR(7)
+
+#define _XMM0    JIT_FPR(0)
+#define _XMM1    JIT_FPR(1)
+#define _XMM2    JIT_FPR(2)
+#define _XMM3    JIT_FPR(3)
+#define _XMM4    JIT_FPR(4)
+#define _XMM5    JIT_FPR(5)
+#define _XMM6    JIT_FPR(6)
+#define _XMM7    JIT_FPR(7)
+
+#if __X64
 #  define _R8      JIT_GPR(8)
 #  define _R9      JIT_GPR(9)
 #  define _R10     JIT_GPR(10)
 #  define _R11     JIT_GPR(11)
-#  define _R12     JIT_CALLEE_SAVE_GPR(12)
-#  define _R13     JIT_CALLEE_SAVE_GPR(13)
-#  define _R14     JIT_CALLEE_SAVE_GPR(14)
-#  define _R15     JIT_CALLEE_SAVE_GPR(15)
-#  define _XMM0    JIT_FPR(0)
-#  define _XMM1    JIT_FPR(1)
-#  define _XMM2    JIT_FPR(2)
-#  define _XMM3    JIT_FPR(3)
-#  define _XMM4    JIT_FPR(4)
-#  define _XMM5    JIT_FPR(5)
-#  define _XMM6    JIT_FPR(6)
-#  define _XMM7    JIT_FPR(7)
+#  define _R12     JIT_GPR(12)
+#  define _R13     JIT_GPR(13)
+#  define _R14     JIT_GPR(14)
+#  define _R15     JIT_GPR(15)
 #  define _XMM8    JIT_FPR(8)
 #  define _XMM9    JIT_FPR(9)
 #  define _XMM10   JIT_FPR(10)
@@ -129,6 +81,54 @@
 #  define _XMM15   JIT_FPR(15)
 #endif
 
+static inline jit_bool_t
+jit_gpr_is_callee_save (jit_gpr_t reg)
+{
+#if __X32
+  return jit_same_gprs (reg, _RBX) ||
+    jit_same_gprs (reg, _RBP) ||
+    jit_same_gprs (reg, _RSI) ||
+    jit_same_gprs (reg, _RDI);
+#elif __CYGWIN__
+  return jit_same_gprs (reg, _RBX) ||
+    jit_same_gprs (reg, _RBP) ||
+    jit_same_gprs (reg, _RSI) ||
+    jit_same_gprs (reg, _RDI) ||
+    jit_same_gprs (reg, _R12) ||
+    jit_same_gprs (reg, _R13) ||
+    jit_same_gprs (reg, _R14) ||
+    jit_same_gprs (reg, _R15);
+#else
+  return jit_same_gprs (reg, _RBX) ||
+    jit_same_gprs (reg, _RBP) ||
+    jit_same_gprs (reg, _R12) ||
+    jit_same_gprs (reg, _R13) ||
+    jit_same_gprs (reg, _R14) ||
+    jit_same_gprs (reg, _R15);
+#endif
+}
+
+static inline jit_bool_t
+jit_fpr_is_callee_save (jit_fpr_t reg)
+{
+#if __X32
+  return 0;
+#elif __CYGWIN__
+  return jit_same_fprs (reg, _XMM6) ||
+    jit_same_fprs (reg, _XMM7) ||
+    jit_same_fprs (reg, _XMM8) ||
+    jit_same_fprs (reg, _XMM9) ||
+    jit_same_fprs (reg, _XMM10) ||
+    jit_same_fprs (reg, _XMM11) ||
+    jit_same_fprs (reg, _XMM12) ||
+    jit_same_fprs (reg, _XMM13) ||
+    jit_same_fprs (reg, _XMM14) ||
+    jit_same_fprs (reg, _XMM15);
+#else
+  return 0;
+#endif
+}
+
 #define JIT_SP     _RSP
 #define JIT_FP     _RBP
 #if __X32



reply via email to

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