guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 01/05: Simplify register representation


From: Andy Wingo
Subject: [Guile-commits] 01/05: Simplify register representation
Date: Thu, 25 Apr 2019 12:14:40 -0400 (EDT)

wingo pushed a commit to branch lightening
in repository guile.

commit ddd66a2f344e9d59bb1bc928ca90ddabbfd0afbb
Author: Andy Wingo <address@hidden>
Date:   Thu Apr 25 17:03:46 2019 +0200

    Simplify register representation
    
    Instead of JIT_R0 being a wrapped index into a table which then gives
    the regno and class, just have JIT_R0 be the wrapped regno and class.
---
 lightening.h            |  11 --
 lightening/lightening.c | 122 ++++++++--------------
 lightening/x86-cpu.c    |   4 +-
 lightening/x86-sse.c    |   2 +-
 lightening/x86.c        | 137 +-----------------------
 lightening/x86.h        | 272 +++++++++++++++++++++++++++---------------------
 6 files changed, 206 insertions(+), 342 deletions(-)

diff --git a/lightening.h b/lightening.h
index 4fcec66..4747a71 100644
--- a/lightening.h
+++ b/lightening.h
@@ -95,18 +95,7 @@ typedef struct jit_reloc
 #  include "lightening/alpha.h"
 #endif
 
-#define JIT_R(index)           JIT_GPR(jit_r(index))
-#define JIT_V(index)           JIT_GPR(jit_v(index))
-#define JIT_F(index)           JIT_FPR(jit_f(index))
-#define JIT_R_NUM              jit_r_num()
-#define JIT_V_NUM              jit_v_num()
-#define JIT_F_NUM              jit_f_num()
-
-#define jit_class_chk          0x02000000      /* just checking */
-#define jit_class_arg          0x08000000      /* argument register */
 #define jit_class_sav          0x10000000      /* callee save */
-#define jit_class_gpr          0x20000000      /* general purpose */
-#define jit_class_fpr          0x40000000      /* float */
 #define jit_class(bits)                ((bits) & 0xffff0000)
 #define jit_regno(bits)                ((bits) & 0x00007fff)
 
diff --git a/lightening/lightening.c b/lightening/lightening.c
index d3494fd..c2d55bd 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -35,89 +35,73 @@
 # define maybe_unused           /**/
 #endif
 
+#define _NOREG 0xffff
 #define rc(value)               jit_class_##value
-#define rn(reg)                 (jit_regno(_rvs[jit_regno(reg.bits)].spec))
+#define rn(reg)                 jit_regno(reg.bits)
 
 #if defined(__i386__) || defined(__x86_64__)
-# define JIT_SP         JIT_GPR(_RSP)
-# define JIT_RET                JIT_GPR(_RAX)
+# define JIT_RET                _RAX
 # if __X32
-#  define JIT_FRET              JIT_FPR(_ST0)
+#  define JIT_FRET              _ST0
 # else
 #  if __CYGWIN__
-#   define JIT_RA0              JIT_GPR(_RCX)
+#   define JIT_RA0              _RCX
 #  else
-#   define JIT_RA0              JIT_GPR(_RDI)
+#   define JIT_RA0              _RDI
 #  endif
-#  define JIT_FA0               JIT_FPR(_XMM0)
-#  define JIT_FRET              JIT_FPR(_XMM0)
+#  define JIT_FA0               _XMM0
+#  define JIT_FRET              _XMM0
 # endif
 #elif defined(__mips__)
-# define JIT_RA0                JIT_GPR(_A0)
-# define JIT_FA0                JIT_FPR(_F12)
-# define JIT_SP         JIT_GPR(_SP)
-# define JIT_RET                JIT_GPR(_V0)
-# define JIT_FRET               JIT_FPR(_F0)
+# define JIT_RA0                _A0
+# define JIT_FA0                _F12
+# define JIT_SP         _SP
+# define JIT_RET                _V0
+# define JIT_FRET               _F0
 #elif defined(__arm__)
-# define JIT_RA0                JIT_GPR(_R0)
-# define JIT_FA0                JIT_FPR(_D0)
-# define JIT_SP         JIT_GPR(_R13)
-# define JIT_RET                JIT_GPR(_R0)
+# define JIT_RA0                _R0
+# define JIT_FA0                _D0
+# define JIT_SP         _R13
+# define JIT_RET                _R0
 # if defined(__ARM_PCS_VFP)
-#  define JIT_FRET              JIT_FPR(_D0)
+#  define JIT_FRET              _D0
 # else
-#  define JIT_FRET              JIT_FPR(_R0)
+#  define JIT_FRET              _R0
 # endif
 #elif defined(__ppc__) || defined(__powerpc__)
-# define JIT_RA0                JIT_GPR(_R3)
-# define JIT_FA0                JIT_FPR(_F1)
-# define JIT_SP         JIT_GPR(_R1)
-# define JIT_RET                JIT_GPR(_R3)
-# define JIT_FRET               JIT_FPR(_F1)
+# define JIT_RA0                _R3
+# define JIT_FA0                _F1
+# define JIT_SP         _R1
+# define JIT_RET                _R3
+# define JIT_FRET               _F1
 #elif defined(__sparc__)
-# define JIT_SP         JIT_GPR(_SP)
-# define JIT_RET                JIT_GPR(_I0)
-# define JIT_FRET               JIT_FPR(_F0)
+# define JIT_SP         _SP
+# define JIT_RET                _I0
+# define JIT_FRET               _F0
 #elif defined(__ia64__)
-# define JIT_SP         JIT_GPR(_R12)
-# define JIT_RET                JIT_GPR(_R8)
-# define JIT_FRET               JIT_FPR(_F8)
+# define JIT_SP         _R12
+# define JIT_RET                _R8
+# define JIT_FRET               _F8
 #elif defined(__hppa__)
-# define JIT_SP         JIT_GPR(_R30)
-# define JIT_RET                JIT_GPR(_R28)
-# define JIT_FRET               JIT_FPR(_F4)
+# define JIT_SP         _R30
+# define JIT_RET                _R28
+# define JIT_FRET               _F4
 #elif defined(__aarch64__)
-# define JIT_RA0                JIT_GPR(_R0)
-# define JIT_FA0                JIT_FPR(_V0)
-# define JIT_SP         JIT_GPR(_SP)
-# define JIT_RET                JIT_GPR(_R0)
-# define JIT_FRET               JIT_FPR(_V0)
+# define JIT_RA0                _R0
+# define JIT_FA0                _V0
+# define JIT_SP         _SP
+# define JIT_RET                _R0
+# define JIT_FRET               _V0
 #elif defined(__s390__) || defined(__s390x__)
-# define JIT_SP         JIT_GPR(_R15)
-# define JIT_RET                JIT_GPR(_R2)
-# define JIT_FRET               JIT_FPR(_F0)
+# define JIT_SP         _R15
+# define JIT_RET                _R2
+# define JIT_FRET               _F0
 #elif defined(__alpha__)
-# define JIT_SP         JIT_GPR(_SP)
-# define JIT_RET                JIT_GPR(_V0)
-# define JIT_FRET               JIT_FPR(_F0)
+# define JIT_SP         _SP
+# define JIT_RET                _V0
+# define JIT_FRET               _F0
 #endif
 
-/*
- * Private jit_class bitmasks
- */
-#define jit_class_named         0x00400000      /* hit must be the named reg */
-#define jit_class_nospill       0x00800000      /* hint to fail if need spill 
*/
-#define jit_class_sft           0x01000000      /* not a hardware register */
-#define jit_class_rg8           0x04000000      /* x86 8 bits */
-#define jit_class_xpr           0x80000000      /* float / vector */
-/* Used on sparc64 where %f0-%f31 can be encode for single float
- * but %f32 to %f62 only as double precision */
-#define jit_class_sng           0x10000000      /* Single precision float */
-#define jit_class_dbl           0x20000000      /* Only double precision float 
*/
-#define jit_regno_patch         0x00008000      /* this is a register
-                                                 * returned by a "user" call
-                                                 * to jit_get_reg() */
-
 union jit_pc
 {
   uint8_t *uc;
@@ -146,20 +130,6 @@ enum jit_reloc_flags
   JIT_RELOC_CAN_SHORTEN = 1<<0
 };
 
-struct jit_register
-{
-  jit_reg_t spec;
-  char *name;
-};
-
-typedef struct jit_register jit_register_t;
-
-static const jit_register_t _rvs[];
-
-#define jit_regload_reload              0       /* convert to reload */
-#define jit_regload_delete              1       /* just remove node */
-#define jit_regload_isdead              2       /* delete and unset live bit */
-
 #define ASSERT(x) do { if (!(x)) abort(); } while (0)
 #if defined(__GNUC__)
 # define UNLIKELY(exprn) __builtin_expect(exprn, 0)
@@ -406,13 +376,13 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, 
jit_pointer_t addr)
 jit_bool_t
 jit_gpr_is_callee_save (jit_state_t *_jit, jit_gpr_t reg)
 {
-  return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav;
+  return jit_class(reg.bits) & jit_class_sav;
 }
 
 jit_bool_t
 jit_fpr_is_callee_save (jit_state_t *_jit, jit_fpr_t reg)
 {
-  return jit_class(_rvs[jit_regno(reg.bits)].spec) & jit_class_sav;
+  return jit_class(reg.bits) & jit_class_sav;
 }
 
 #if defined(__i386__) || defined(__x86_64__)
diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c
index c8bb9c8..901d4ea 100644
--- a/lightening/x86-cpu.c
+++ b/lightening/x86-cpu.c
@@ -272,9 +272,9 @@ get_temp_gpr(jit_state_t *_jit)
   _jit->temp_gpr_saved = 1;
 #if __X32
   pushr(_jit, _RBP_REGNO);
-  return JIT_GPR(_RBP);
+  return _RBP;
 #else
-  return JIT_GPR(_R8);
+  return _R8;
 #endif
 }
 
diff --git a/lightening/x86-sse.c b/lightening/x86-sse.c
index 44d9905..4e0a414 100644
--- a/lightening/x86-sse.c
+++ b/lightening/x86-sse.c
@@ -193,7 +193,7 @@ get_temp_xpr(jit_state_t *_jit)
   /* Reserve XMM7 for the JIT.  */
   ASSERT(!_jit->temp_fpr_saved);
   _jit->temp_fpr_saved = 1;
-  return JIT_FPR(_XMM7);
+  return _XMM7;
 }
 
 static void
diff --git a/lightening/x86.c b/lightening/x86.c
index c9676fe..7b0c4a1 100644
--- a/lightening/x86.c
+++ b/lightening/x86.c
@@ -17,45 +17,6 @@
  *      Paulo Cesar Pereira de Andrade
  */
 
-#if __X32
-# define jit_arg_reg_p(i)              0
-# define jit_arg_f_reg_p(i)            0
-# define stack_framesize               20
-# define stack_adjust                  12
-# define CVT_OFFSET                    -12
-# define REAL_WORDSIZE                 4
-# define va_gp_increment               4
-# define va_fp_increment               8
-#else
-# if __CYGWIN__
-#  define jit_arg_reg_p(i)            ((i) >= 0 && (i) < 4)
-#  define jit_arg_f_reg_p(i)          jit_arg_reg_p(i)
-#  define stack_framesize             152
-#  define va_fp_increment             8
-# else
-#  define jit_arg_reg_p(i)            ((i) >= 0 && (i) < 6)
-#  define jit_arg_f_reg_p(i)          ((i) >= 0 && (i) < 8)
-#  define stack_framesize             56
-#  define first_gp_argument           rdi
-#  define first_gp_offset             offsetof(jit_va_list_t, rdi)
-#  define first_gp_from_offset(gp)    ((gp) / 8)
-#  define last_gp_argument            r9
-#  define va_gp_max_offset                                            \
-      (offsetof(jit_va_list_t, r9) - offsetof(jit_va_list_t, rdi) + 8)
-#  define first_fp_argument           xmm0
-#  define first_fp_offset             offsetof(jit_va_list_t, xmm0)
-#  define last_fp_argument            xmm7
-#  define va_fp_max_offset                                            \
-      (offsetof(jit_va_list_t, xmm7) - offsetof(jit_va_list_t, rdi) + 16)
-#  define va_fp_increment             16
-#  define first_fp_from_offset(fp)    (((fp) - va_gp_max_offset) / 16)
-# endif
-# define va_gp_increment               8
-# define stack_adjust                  8
-# define CVT_OFFSET                    -8
-# define REAL_WORDSIZE                 8
-#endif
-
 /*
  * Types
  */
@@ -94,94 +55,6 @@ typedef struct jit_va_list {
 #endif
 
 jit_cpu_t               jit_cpu;
-static const jit_register_t _rvs[] = {
-#if __X32
-  { rc(gpr) | rc(rg8) | 0,            "%eax" },
-  { rc(gpr) | rc(rg8) | 1,            "%ecx" },
-  { rc(gpr) | rc(rg8) | 2,            "%edx" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 3,  "%ebx" },
-  { rc(sav) | rc(gpr) | 6,            "%esi" },
-  { rc(sav) | rc(gpr) | 7,            "%edi" },
-  { rc(sav) | 4,                      "%esp" },
-  { rc(sav) | 5,                      "%ebp" },
-  { rc(xpr) | rc(fpr) | 0,            "%xmm0" },
-  { rc(xpr) | rc(fpr) | 1,            "%xmm1" },
-  { rc(xpr) | rc(fpr) | 2,            "%xmm2" },
-  { rc(xpr) | rc(fpr) | 3,            "%xmm3" },
-  { rc(xpr) | rc(fpr) | 4,            "%xmm4" },
-  { rc(xpr) | rc(fpr) | 5,            "%xmm5" },
-  { rc(xpr) | rc(fpr) | 6,            "%xmm6" },
-  { rc(xpr) | rc(fpr) | 7,            "%xmm7" },
-#elif __CYGWIN__
-  { rc(gpr) | rc(rg8) | 0,            "%rax" },
-  { rc(gpr) | rc(rg8) | rc(rg8) | 10, "%r10" },
-  { rc(gpr) | rc(rg8) | rc(rg8) | 11, "%r11" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 3,  "%rbx" },
-  { rc(sav) | rc(gpr) | 7,            "%rdi" },
-  { rc(sav) | rc(gpr) | 6,            "%rsi" },
-  { rc(sav) | rc(gpr) | 12,           "%r12" },
-  { rc(sav) | rc(gpr) | 13,           "%r13" },
-  { rc(sav) | rc(gpr) | 14,           "%r14" },
-  { rc(sav) | rc(gpr) | 15,           "%r15" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 9,  "%r9" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 8,  "%r8" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 2,  "%rdx" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 1,  "%rcx" },
-  { rc(sav) | 4,                      "%rsp" },
-  { rc(sav) | 5,                      "%rbp" },
-  { rc(xpr) | rc(fpr) | 4,            "%xmm4" },
-  { rc(xpr) | rc(fpr) | 5,            "%xmm5" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 6,  "%xmm6" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 7,  "%xmm7" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 8,  "%xmm8" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 9,  "%xmm9" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 10, "%xmm10" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 11, "%xmm11" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 12, "%xmm12" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 13, "%xmm13" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 14, "%xmm14" },
-  { rc(sav) | rc(xpr) | rc(fpr) | 15, "%xmm15" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 3,  "%xmm3" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 2,  "%xmm2" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 1,  "%xmm1" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 0,  "%xmm0" },
-#else
-  /* %rax is a pseudo flag argument for varargs functions */
-  { rc(arg) | rc(gpr) | rc(rg8) | 0,  "%rax" },
-  { rc(gpr) | rc(rg8) | 10,           "%r10" },
-  { rc(gpr) | rc(rg8) | 11,           "%r11" },
-  { rc(gpr) | rc(rg8) | 12,           "%r12" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 3,  "%rbx" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 13, "%r13" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 14, "%r14" },
-  { rc(sav) | rc(rg8) | rc(gpr) | 15, "%r15" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 9,  "%r9" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 8,  "%r8" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 1,  "%rcx" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 2,  "%rdx" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 6,  "%rsi" },
-  { rc(arg) | rc(rg8) | rc(gpr) | 7,  "%rdi" },
-  { rc(sav) | 4,                      "%rsp" },
-  { rc(sav) | 5,                      "%rbp" },
-  { rc(xpr) | rc(fpr) | 8,            "%xmm8" },
-  { rc(xpr) | rc(fpr) | 9,            "%xmm9" },
-  { rc(xpr) | rc(fpr) | 10,           "%xmm10" },
-  { rc(xpr) | rc(fpr) | 11,           "%xmm11" },
-  { rc(xpr) | rc(fpr) | 12,           "%xmm12" },
-  { rc(xpr) | rc(fpr) | 13,           "%xmm13" },
-  { rc(xpr) | rc(fpr) | 14,           "%xmm14" },
-  { rc(xpr) | rc(fpr) | 15,           "%xmm15" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 7,  "%xmm7" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 6,  "%xmm6" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 5,  "%xmm5" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 4,  "%xmm4" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 3,  "%xmm3" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 2,  "%xmm2" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 1,  "%xmm1" },
-  { rc(xpr) | rc(arg) | rc(fpr) | 0,  "%xmm0" },
-#endif
-  { _NOREG,                           "<none>" },
-};
 
 #include "x86-cpu.c"
 #include "x86-sse.c"
@@ -800,9 +673,9 @@ static const jit_gpr_t abi_gpr_args[] = {
 #if __X32
   /* No GPRs in args.  */
 #elif __CYGWIN__
-  JIT_GPR(_RCX), JIT_GPR(_RDX), JIT_GPR(_R8), JIT_GPR(_R9)
+  _RCX, _RDX, _R8, _R9
 #else
-  JIT_GPR(_RDI), JIT_GPR(_RSI), JIT_GPR(_RDX), JIT_GPR(_RCX), JIT_GPR(_R8), 
JIT_GPR(_R9)
+  _RDI, _RSI, _RDX, _RCX, _R8, _R9
 #endif
 };
 
@@ -810,9 +683,9 @@ static const jit_fpr_t abi_fpr_args[] = {
 #if __X32
   /* No FPRs in args.  */
 #elif __CYGWIN__
-  JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3)
+  _XMM0, _XMM1, _XMM2, _XMM3
 #else
-  JIT_FPR(_XMM0), JIT_FPR(_XMM1), JIT_FPR(_XMM2), JIT_FPR(_XMM3), 
JIT_FPR(_XMM4), JIT_FPR(_XMM5), JIT_FPR(_XMM6), JIT_FPR(_XMM7)
+  _XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7
 #endif
 };
 
@@ -890,7 +763,7 @@ next_abi_arg(struct abi_arg_iterator *iter, jit_operand_t 
*arg)
     iter->gpr_idx++;
 #endif
   } else {
-    *arg = jit_operand_mem (abi, JIT_GPR(_RSP), iter->stack_size);
+    *arg = jit_operand_mem (abi, JIT_SP, iter->stack_size);
     size_t bytes = jit_operand_abi_sizeof (abi);
     iter->stack_size += round_size_up_to_words (bytes);
   }
diff --git a/lightening/x86.h b/lightening/x86.h
index b275e5e..7c7aab9 100644
--- a/lightening/x86.h
+++ b/lightening/x86.h
@@ -44,129 +44,161 @@
 #  define __X32    0
 #endif
 
-#define JIT_FP                  JIT_GPR(_RBP)
-typedef enum {
 #if __X32
-#  define jit_r(i)              (_RAX + (i))
-#  define jit_r_num()           3
-#  define jit_v(i)              (_RBX + (i))
-#  define jit_v_num()           3
-#  define jit_f(i)              (jit_cpu.sse2 ? _XMM0 + (i) : _ST0 + (i))
-#  define jit_f_num()           (jit_cpu.sse2 ? 8 : 6)
-#  define JIT_R0                JIT_GPR(_RAX)
-#  define JIT_R1                JIT_GPR(_RCX)
-#  define JIT_R2                JIT_GPR(_RDX)
-  _RAX, _RCX, _RDX,
-#  define JIT_V0                JIT_GPR(_RBX)
-#  define JIT_V1                JIT_GPR(_RSI)
-#  define JIT_V2                JIT_GPR(_RDI)
-  _RBX, _RSI, _RDI,
-  _RSP, _RBP,
-#  define JIT_F0                JIT_FPR(_XMM0)
-#  define JIT_F1                JIT_FPR(_XMM1)
-#  define JIT_F2                JIT_FPR(_XMM2)
-#  define JIT_F3                JIT_FPR(_XMM3)
-#  define JIT_F4                JIT_FPR(_XMM4)
-#  define JIT_F5                JIT_FPR(_XMM5)
-#  define JIT_F6                JIT_FPR(_XMM6)
-  _XMM0, _XMM1, _XMM2, _XMM3, _XMM4, _XMM5, _XMM6, _XMM7,
-#  define jit_sse_reg_p(reg)    ((reg) >= _XMM0 && (reg) <= _XMM7)
+#  define _RAX     JIT_GPR(0)
+#  define _RCX     JIT_GPR(1)
+#  define _RDX     JIT_GPR(2)
+#  define _RBX     JIT_GPR(3 | jit_class_sav)
+#  define _RSP     JIT_GPR(4 | jit_class_sav)
+#  define _RBP     JIT_GPR(5 | jit_class_sav)
+#  define _RSI     JIT_GPR(6 | jit_class_sav)
+#  define _RDI     JIT_GPR(7 | jit_class_sav)
+#  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_GPR(3 | jit_class_sav)
+#  define _RSP     JIT_GPR(4 | jit_class_sav)
+#  define _RBP     JIT_GPR(5 | jit_class_sav)
+#  define _RSI     JIT_GPR(6 | jit_class_sav)
+#  define _RDI     JIT_GPR(7 | jit_class_sav)
+#  define _R8      JIT_GPR(8)
+#  define _R9      JIT_GPR(9)
+#  define _R10     JIT_GPR(10)
+#  define _R11     JIT_GPR(11)
+#  define _R12     JIT_GPR(12 | jit_class_sav)
+#  define _R13     JIT_GPR(13 | jit_class_sav)
+#  define _R14     JIT_GPR(14 | jit_class_sav)
+#  define _R15     JIT_GPR(15 | jit_class_sav)
+#  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 | jit_class_sav)
+#  define _XMM7    JIT_FPR(7 | jit_class_sav)
+#  define _XMM8    JIT_FPR(8 | jit_class_sav)
+#  define _XMM9    JIT_FPR(9 | jit_class_sav)
+#  define _XMM10   JIT_FPR(10 | jit_class_sav)
+#  define _XMM11   JIT_FPR(11 | jit_class_sav)
+#  define _XMM12   JIT_FPR(12 | jit_class_sav)
+#  define _XMM13   JIT_FPR(13 | jit_class_sav)
+#  define _XMM14   JIT_FPR(14 | jit_class_sav)
+#  define _XMM15   JIT_FPR(15 | jit_class_sav)
 #else
-#  if __CYGWIN__
-#    define jit_r(i)            (_RAX + (i))
-#    define jit_r_num()         3
-#    define jit_v(i)            (_RBX + (i))
-#    define jit_v_num()         7
-#    define jit_f(index)        (_XMM4 + (index))
-#    define jit_f_num()         12
-#    define JIT_R0              JIT_GPR(_RAX)
-#    define JIT_R1              JIT_GPR(_R10)
-#    define JIT_R2              JIT_GPR(_R11)
-#    define JIT_V0              JIT_GPR(_RBX)
-#    define JIT_V1              JIT_GPR(_RDI)
-#    define JIT_V2              JIT_GPR(_RSI)
-#    define JIT_V3              JIT_GPR(_R12)
-#    define JIT_V4              JIT_GPR(_R13)
-#    define JIT_V5              JIT_GPR(_R14)
-#    define JIT_V6              JIT_GPR(_R15)
-  /* Volatile - Return value register */
-  _RAX,
-  /* Volatile */
-  _R10, _R11,
-  /* Nonvolatile */
-  _RBX, _RDI, _RSI,
-  _R12, _R13, _R14, _R15,
-  /* Volatile - Integer arguments (4 to 1) */
-  _R9, _R8, _RDX, _RCX,
-  /* Nonvolatile */
-  _RSP, _RBP,
-#    define JIT_F0              JIT_FPR(_XMM0)
-#    define JIT_F1              JIT_FPR(_XMM1)
-#    define JIT_F2              JIT_FPR(_XMM2)
-#    define JIT_F3              JIT_FPR(_XMM3)
-#    define JIT_F4              JIT_FPR(_XMM4)
-#    define JIT_F5              JIT_FPR(_XMM5)
-#    define JIT_F6              JIT_FPR(_XMM6)
-#    define JIT_F7              JIT_FPR(_XMM7)
-#    define JIT_F8              JIT_FPR(_XMM8)
-#    define JIT_F9              JIT_FPR(_XMM9)
-#    define JIT_F10             JIT_FPR(_XMM10)
-#    define JIT_F11             JIT_FPR(_XMM11)
-#    define JIT_F12             JIT_FPR(_XMM12)
-#    define JIT_F13             JIT_FPR(_XMM13)
-#    define JIT_F14             JIT_FPR(_XMM14)
-#    define JIT_F15             JIT_FPR(_XMM15)
-  /* Volatile */
-  _XMM4, _XMM5,
-  /* Nonvolatile */
-  _XMM6, _XMM7,  _XMM8,  _XMM9,  _XMM10,
-  _XMM11, _XMM12, _XMM13, _XMM14, _XMM15,
-  /* Volatile - FP arguments (4 to 1) */
-  _XMM3, _XMM2, _XMM1, _XMM0,
-#    define jit_sse_reg_p(reg)  ((reg) >= _XMM4 && (reg) <= _XMM0)
-#  else
-#    define jit_r(i)            (_RAX + (i))
-#    define jit_r_num()         4
-#    define jit_v(i)            (_RBX + (i))
-#    define jit_v_num()         4
-#    define jit_f(index)        (_XMM8 + (index))
-#    define jit_f_num()         8
-#    define JIT_R0              JIT_GPR(_RAX)
-#    define JIT_R1              JIT_GPR(_R10)
-#    define JIT_R2              JIT_GPR(_R11)
-#    define JIT_R3              JIT_GPR(_R12)
-  _RAX, _R10, _R11, _R12,
-#    define JIT_V0              JIT_GPR(_RBX)
-#    define JIT_V1              JIT_GPR(_R13)
-#    define JIT_V2              JIT_GPR(_R14)
-#    define JIT_V3              JIT_GPR(_R15)
-  _RBX, _R13, _R14, _R15,
-  _R9, _R8, _RCX, _RDX, _RSI, _RDI,
-  _RSP, _RBP,
-#    define JIT_F0              JIT_FPR(_XMM0)
-#    define JIT_F1              JIT_FPR(_XMM1)
-#    define JIT_F2              JIT_FPR(_XMM2)
-#    define JIT_F3              JIT_FPR(_XMM3)
-#    define JIT_F4              JIT_FPR(_XMM4)
-#    define JIT_F5              JIT_FPR(_XMM5)
-#    define JIT_F6              JIT_FPR(_XMM6)
-#    define JIT_F7              JIT_FPR(_XMM7)
-#    define JIT_F8              JIT_FPR(_XMM8)
-#    define JIT_F9              JIT_FPR(_XMM9)
-#    define JIT_F10             JIT_FPR(_XMM10)
-#    define JIT_F11             JIT_FPR(_XMM11)
-#    define JIT_F12             JIT_FPR(_XMM12)
-#    define JIT_F13             JIT_FPR(_XMM13)
-#    define JIT_F14             JIT_FPR(_XMM14)
-#    define JIT_F15             JIT_FPR(_XMM15)
-  _XMM8, _XMM9, _XMM10, _XMM11, _XMM12, _XMM13, _XMM14, _XMM15,
-  _XMM7, _XMM6, _XMM5, _XMM4, _XMM3, _XMM2, _XMM1, _XMM0,
-#    define jit_sse_reg_p(reg)  ((reg) >= _XMM8 && (reg) <= _XMM0)
-#  endif
+#  define _RAX     JIT_GPR(0)
+#  define _RCX     JIT_GPR(1)
+#  define _RDX     JIT_GPR(2)
+#  define _RBX     JIT_GPR(3 | jit_class_sav)
+#  define _RSP     JIT_GPR(4 | jit_class_sav)
+#  define _RBP     JIT_GPR(5 | jit_class_sav)
+#  define _RSI     JIT_GPR(6)
+#  define _RDI     JIT_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_GPR(12 | jit_class_sav)
+#  define _R13     JIT_GPR(13 | jit_class_sav)
+#  define _R14     JIT_GPR(14 | jit_class_sav)
+#  define _R15     JIT_GPR(15 | jit_class_sav)
+#  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 _XMM8    JIT_FPR(8)
+#  define _XMM9    JIT_FPR(9)
+#  define _XMM10   JIT_FPR(10)
+#  define _XMM11   JIT_FPR(11)
+#  define _XMM12   JIT_FPR(12)
+#  define _XMM13   JIT_FPR(13)
+#  define _XMM14   JIT_FPR(14)
+#  define _XMM15   JIT_FPR(15)
+#endif
+
+#define JIT_SP     _RSP
+#define JIT_FP     _RBP
+#if __X32
+#  define JIT_R0   _RAX
+#  define JIT_R1   _RCX
+#  define JIT_R2   _RDX
+#  define JIT_V0   _RBX
+#  define JIT_V1   _RSI
+#  define JIT_V2   _RDI
+#  define JIT_F0   _XMM0
+#  define JIT_F1   _XMM1
+#  define JIT_F2   _XMM2
+#  define JIT_F3   _XMM3
+#  define JIT_F4   _XMM4
+#  define JIT_F5   _XMM5
+#  define JIT_F6   _XMM6
+#  define JIT_F7   _XMM6
+#elif __CYGWIN__
+#  define JIT_R0   _RAX
+#  define JIT_R1   _R10
+#  define JIT_R2   _R11
+#  define JIT_V0   _RBX
+#  define JIT_V1   _RDI
+#  define JIT_V2   _RSI
+#  define JIT_V3   _R12
+#  define JIT_V4   _R13
+#  define JIT_V5   _R14
+#  define JIT_V6   _R15
+#  define JIT_F0   _XMM0
+#  define JIT_F1   _XMM1
+#  define JIT_F2   _XMM2
+#  define JIT_F3   _XMM3
+#  define JIT_F4   _XMM4
+#  define JIT_F5   _XMM5
+#  define JIT_F6   _XMM6
+#  define JIT_F7   _XMM7
+#  define JIT_F8   _XMM8
+#  define JIT_F9   _XMM9
+#  define JIT_F10  _XMM10
+#  define JIT_F11  _XMM11
+#  define JIT_F12  _XMM12
+#  define JIT_F13  _XMM13
+#  define JIT_F14  _XMM14
+#  define JIT_F15  _XMM15
+#else
+#  define JIT_R0   _RAX
+#  define JIT_R1   _R10
+#  define JIT_R2   _R11
+#  define JIT_R3   _R12
+#  define JIT_V0   _RBX
+#  define JIT_V1   _R13
+#  define JIT_V2   _R14
+#  define JIT_V3   _R15
+#  define JIT_F0   _XMM0
+#  define JIT_F1   _XMM1
+#  define JIT_F2   _XMM2
+#  define JIT_F3   _XMM3
+#  define JIT_F4   _XMM4
+#  define JIT_F5   _XMM5
+#  define JIT_F6   _XMM6
+#  define JIT_F7   _XMM7
+#  define JIT_F8   _XMM8
+#  define JIT_F9   _XMM9
+#  define JIT_F10  _XMM10
+#  define JIT_F11  _XMM11
+#  define JIT_F12  _XMM12
+#  define JIT_F13  _XMM13
+#  define JIT_F14  _XMM14
+#  define JIT_F15  _XMM15
 #endif
-#  define JIT_NOREG             _NOREG
-  _NOREG,
-} jit_reg_t;
 
 typedef struct {
   /* x87 present */



reply via email to

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