guile-commits
[Top][All Lists]
Advanced

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

[Guile-commits] 09/20: Remove most __X64_32 code


From: Andy Wingo
Subject: [Guile-commits] 09/20: Remove most __X64_32 code
Date: Sun, 28 Apr 2019 07:54:20 -0400 (EDT)

wingo pushed a commit to branch lightening
in repository guile.

commit 9906cd5f84e3ccab6aba9a91cebe2035918f5672
Author: Andy Wingo <address@hidden>
Date:   Fri Apr 26 16:37:24 2019 +0200

    Remove most __X64_32 code
    
    The x32 ABI (i.e., amd64 with 32-bit pointers) is mostly a C language
    question.  From a JIT perspective it mostly looks just like amd64.  We
    can fix any differences in a followup, but x32 is also a pretty dead
    ABI, so I feel OK with this.
---
 lightening/x86-cpu.c | 81 ++++++++--------------------------------------------
 lightening/x86-sse.c | 68 ++++---------------------------------------
 2 files changed, 18 insertions(+), 131 deletions(-)

diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c
index b32c850..537e331 100644
--- a/lightening/x86-cpu.c
+++ b/lightening/x86-cpu.c
@@ -20,7 +20,7 @@
 /* avoid using it due to partial stalls */
 #define USE_INC_DEC                     0
 
-#if __X32 || __X64_32
+#if __X32
 # define WIDE 0
 # define IF_WIDE(wide, narrow) narrow
 #else
@@ -46,7 +46,7 @@
 #define _R15_REGNO                      15
 #define r7(reg)                 ((reg) & 7)
 #define r8(reg)                 ((reg) & 15)
-#if __X32 || __CYGWIN__ || __X64_32
+#if __X32
 # define reg8_p(rn) ((rn) >= _RAX_REGNO && (rn) <= _RBX_REGNO)
 #else
 # define reg8_p(rn) 1
@@ -160,15 +160,13 @@ ii(jit_state_t *_jit, uint32_t i)
   emit_u32(_jit, i);
 }
 
+#if __X64
 static inline void
-iw(jit_state_t *_jit, jit_word_t l)
+il(jit_state_t *_jit, uint64_t l)
 {
-#if __X64
   emit_u64(_jit, l);
-#else
-  ii(_jit, l);
-#endif
 }
+#endif
 
 static void
 rex(jit_state_t *_jit, int32_t l, int32_t w,
@@ -417,7 +415,7 @@ imovi(jit_state_t *_jit, int32_t r0, jit_word_t i0)
   } else {
     rex(_jit, 0, 1, _NOREG, _NOREG, r0);
     ic(_jit, 0xb8 | r7(r0));
-    iw(_jit, i0);
+    il(_jit, i0);
   }
 #else
   ic(_jit, 0xb8 | r7(r0));
@@ -1490,7 +1488,7 @@ extr_us(jit_state_t *_jit, int32_t r0, int32_t r1)
   return movsr_u(_jit, r0, r1);
 }
 
-#if __X64 && !__X64_32
+#if __X64
 static void
 extr_i(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -1523,7 +1521,7 @@ bswapr_ui(jit_state_t *_jit, int32_t r0, int32_t r1)
   ic(_jit, 0xc8 | r7(r0));
 }
 
-#if __X64 && !__X64_32
+#if __X64
 static void
 bswapr_ul(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -1634,7 +1632,6 @@ ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
   }
 }
 
-#if __X32 || !__X64_32
 static void
 ldr_i(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -1665,7 +1662,6 @@ ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
     unget_temp_gpr(_jit);
   }
 }
-#endif
 
 #if __X64
 static void
@@ -1691,7 +1687,6 @@ ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
   }
 }
 
-#  if !__X64_32
 static void
 ldr_l(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -1714,21 +1709,15 @@ ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
     unget_temp_gpr(_jit);
   }
 }
-#  endif
 #endif
 
 static void
 ldxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  addr(_jit, r0, r1, r2);
-  ldr_c(r0, r0);
-#else
   rex(_jit, 0, WIDE, r0, r1, r2);
   ic(_jit, 0x0f);
   ic(_jit, 0xbe);
   rx(_jit, r0, 0, r2, r1, _SCL1);
-#endif
 }
 
 static void
@@ -1750,15 +1739,10 @@ ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
 static void
 ldxr_uc(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  addr(_jit, r0, r1, r2);
-  ldr_uc(_jit, r0, r0);
-#else
   rex(_jit, 0, WIDE, r0, r1, r2);
   ic(_jit, 0x0f);
   ic(_jit, 0xb6);
   rx(_jit, r0, 0, r2, r1, _SCL1);
-#endif
 }
 
 static void
@@ -1780,15 +1764,10 @@ ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
 static void
 ldxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  addr(_jit, r0, r1, r2);
-  ldr_s(_jit, r0, r0);
-#else
   rex(_jit, 0, WIDE, r0, r1, r2);
   ic(_jit, 0x0f);
   ic(_jit, 0xbf);
   rx(_jit, r0, 0, r2, r1, _SCL1);
-#endif
 }
 
 static void
@@ -1810,15 +1789,10 @@ ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
 static void
 ldxr_us(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  addr(_jit, r0, r1, r2);
-  ldr_us(_jit, r0, r0);
-#else
   rex(_jit, 0, WIDE, r0, r1, r2);
   ic(_jit, 0x0f);
   ic(_jit, 0xb7);
   rx(_jit, r0, 0, r2, r1, _SCL1);
-#endif
 }
 
 static void
@@ -1837,7 +1811,6 @@ ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
   }
 }
 
-#if __X64 || !__X64_32
 static void
 ldxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
@@ -1868,21 +1841,14 @@ ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
     unget_temp_gpr(_jit);
   }
 }
-#endif
 
 #if __X64
 static void
 ldxr_ui(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  addr(_jit, r0, r1, r2);
-  /* to avoid confusion with macro renames */
-  _ldr_ui(_jit, r0, r0);
-#else
   rex(_jit, 0, 0, r0, r1, r2);
   ic(_jit, 0x8b);
   rx(_jit, r0, 0, r2, r1, _SCL1);
-#endif
 }
 
 static void
@@ -1900,7 +1866,6 @@ ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
   }
 }
 
-#  if !__X64_32
 static void
 ldxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
@@ -1923,7 +1888,6 @@ ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
     unget_temp_gpr(_jit);
   }
 }
-#  endif
 #endif
 
 static void
@@ -2015,7 +1979,7 @@ sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0)
   }
 }
 
-#if __X64 && !__X64_32
+#if __X64
 static void
 str_l(jit_state_t *_jit, int32_t r0, int32_t r1)
 {
@@ -2043,12 +2007,6 @@ sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0)
 static void
 stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r0, r1);
-  str_c(_jit, jit_gpr_regno(reg), r2);
-  unget_temp_gpr(_jit);
-#else
   if (reg8_p(r2)) {
     rex(_jit, 0, 0, r2, r1, r0);
     ic(_jit, 0x88);
@@ -2061,7 +2019,6 @@ stxr_c(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t 
r2)
     rx(_jit, jit_gpr_regno(reg), 0, r0, r1, _SCL1);
     unget_temp_gpr(_jit);
   }
-#endif
 }
 
 static void
@@ -2091,17 +2048,10 @@ stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, 
int32_t r1)
 static void
 stxr_s(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r0, r1);
-  str_s(_jit, jit_gpr_regno(reg), r2);
-  unget_temp_gpr(_jit);
-#else
   ic(_jit, 0x66);
   rex(_jit, 0, 0, r2, r1, r0);
   ic(_jit, 0x89);
   rx(_jit, r2, 0, r0, r1, _SCL1);
-#endif
 }
 
 static void
@@ -2123,16 +2073,9 @@ stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, 
int32_t r1)
 static void
 stxr_i(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r0, r1);
-  str_i(jit_gpr_regno(reg), r2);
-  unget_temp_gpr(_jit);
-#else
   rex(_jit, 0, 0, r2, r1, r0);
   ic(_jit, 0x89);
   rx(_jit, r2, 0, r0, r1, _SCL1);
-#endif
 }
 
 static void
@@ -2150,7 +2093,7 @@ stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, 
int32_t r1)
   }
 }
 
-#if __X64 && !__X64_32
+#if __X64
 static void
 stxr_l(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
@@ -2684,14 +2627,14 @@ retval_us(jit_state_t *_jit, int32_t r0)
 static void
 retval_i(jit_state_t *_jit, int32_t r0)
 {
-#if __X32 || __X64_32
+#if __X32
   movr(_jit, r0, _RAX_REGNO);
 #else
   extr_i(_jit, r0, _RAX_REGNO);
 #endif
 }
 
-#if __X64 && !__X64_32
+#if __X64
 static void
 retval_ui(jit_state_t *_jit, int32_t r0)
 {
diff --git a/lightening/x86-sse.c b/lightening/x86-sse.c
index 34a39e8..3aca97f 100644
--- a/lightening/x86-sse.c
+++ b/lightening/x86-sse.c
@@ -101,7 +101,7 @@ ssexi(jit_state_t *_jit, int32_t c, int32_t r0,
 static void
 sselxr(jit_state_t *_jit, int32_t p, int32_t c, int32_t r0, int32_t r1)
 {
-  if (__X64 && !__X64_32) {
+  if (__X64) {
     ic(_jit, p);
     rex(_jit, 0, 1, r0, 0, r1);
     ic(_jit, 0x0f);
@@ -404,7 +404,7 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
     xorpdr(_jit, r0, r0);
   else {
     jit_gpr_t ireg = get_temp_gpr(_jit);
-#if __X64 && !__X64_32
+#if __X64
     movi(_jit, jit_gpr_regno(ireg), data.w);
     movdqxr(_jit, r0, jit_gpr_regno(ireg));
     unget_temp_gpr(_jit);
@@ -705,18 +705,10 @@ negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
   unget_temp_gpr(_jit);
 }
 
-#if __X32
-# define sse_address_p(i0) 1
-#elif __X64_32
-# define sse_address_p(i0) ((jit_word_t)(i0) >= 0)
-# else
-# define sse_address_p(i0) can_sign_extend_int_p(i0)
-#endif
-
 static void
 ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
 {
-  if (sse_address_p(i0))
+  if (can_sign_extend_int_p(i0))
     movssmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
@@ -729,14 +721,7 @@ ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
 static void
 ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r1, r2);
-  ldr_f(_jit, r0, jit_gpr_regno(reg));
-  unget_temp_gpr(_jit);
-#else
   movssmr(_jit, 0, r1, r2, _SCL1, r0);
-#endif
 }
 
 static void
@@ -746,13 +731,8 @@ ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
     movssmr(_jit, i0, r1, _NOREG, _SCL1, r0);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
-#if __X64_32
-    addi(jit_gpr_regno(reg), r1, i0);
-    ldr_f(_jit, r0, jit_gpr_regno(reg));
-#else
     movi(_jit, jit_gpr_regno(reg), i0);
     ldxr_f(_jit, r0, r1, jit_gpr_regno(reg));
-#endif
     unget_temp_gpr(_jit);
   }
 }
@@ -760,7 +740,7 @@ ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
 static void
 sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
 {
-  if (sse_address_p(i0))
+  if (can_sign_extend_int_p(i0))
     movssrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
@@ -773,14 +753,7 @@ sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
 static void
 stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r0, r1);
-  str_f(_jit, jit_gpr_regno(reg), r2);
-  unget_temp_gpr(_jit);
-#else
   movssrm(_jit, r2, 0, r0, r1, _SCL1);
-#endif
 }
 
 static void
@@ -790,13 +763,8 @@ stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, 
int32_t r1)
     movssrm(_jit, r1, i0, r0, _NOREG, _SCL1);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
-#if __X64_32
-    addi(jit_gpr_regno(reg), r0, i0);
-    str_f(_jit, jit_gpr_regno(reg), r1);
-#else
     movi(_jit, jit_gpr_regno(reg), i0);
     stxr_f(_jit, jit_gpr_regno(reg), r0, r1);
-#endif
     unget_temp_gpr(_jit);
   }
 }
@@ -910,7 +878,7 @@ bunordr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
 static void
 ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
 {
-  if (sse_address_p(i0))
+  if (can_sign_extend_int_p(i0))
     movsdmr(_jit, i0, _NOREG, _NOREG, _SCL1, r0);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
@@ -923,14 +891,7 @@ ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
 static void
 ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r1, r2);
-  ldr_d(_jit, r0, jit_gpr_regno(reg));
-  unget_temp_gpr(_jit);
-#else
   movsdmr(_jit, 0, r1, r2, _SCL1, r0);
-#endif
 }
 
 static void
@@ -940,13 +901,8 @@ ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
     movsdmr(_jit, i0, r1, _NOREG, _SCL1, r0);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
-#if __X64_32
-    addi(jit_gpr_regno(reg), r1, i0);
-    ldr_d(_jit, r0, jit_gpr_regno(reg));
-#else
     movi(_jit, jit_gpr_regno(reg), i0);
     ldxr_d(_jit, r0, r1, jit_gpr_regno(reg));
-#endif
     unget_temp_gpr(_jit);
   }
 }
@@ -954,7 +910,7 @@ ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, 
jit_word_t i0)
 static void
 sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
 {
-  if (sse_address_p(i0))
+  if (can_sign_extend_int_p(i0))
     movsdrm(_jit, r0, i0, _NOREG, _NOREG, _SCL1);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
@@ -967,14 +923,7 @@ sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
 static void
 stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
 {
-#if __X64_32
-  jit_gpr_t reg = get_temp_gpr(_jit);
-  addr(_jit, jit_gpr_regno(reg), r0, r1);
-  str_d(_jit, jit_gpr_regno(reg), r2);
-  unget_temp_gpr(_jit);
-#else
   movsdrm(_jit, r2, 0, r0, r1, _SCL1);
-#endif
 }
 
 static void
@@ -984,13 +933,8 @@ stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, 
int32_t r1)
     movsdrm(_jit, r1, i0, r0, _NOREG, _SCL1);
   else {
     jit_gpr_t reg = get_temp_gpr(_jit);
-#if __X64_32
-    addi(jit_gpr_regno(reg), r0, i0);
-    str_d(_jit, jit_gpr_regno(reg), r1);
-#else
     movi(_jit, jit_gpr_regno(reg), i0);
     stxr_d(_jit, jit_gpr_regno(reg), r0, r1);
-#endif
     unget_temp_gpr(_jit);
   }
 }



reply via email to

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