[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
- [Guile-commits] branch master updated (1b98734 -> e057ea0), Andy Wingo, 2019/05/20
- [Guile-commits] 02/34: Refactor some bits from x86 to lightening, Andy Wingo, 2019/05/20
- [Guile-commits] 07/34: Fix GPR temporary selection, Andy Wingo, 2019/05/20
- [Guile-commits] 01/34: Refactor to move temp register acquire to core,
Andy Wingo <=
- [Guile-commits] 10/34: Fix a couple bugs related to aarch64 literal pools, Andy Wingo, 2019/05/20
- [Guile-commits] 06/34: Allow a backend to have multiple temporary registers, Andy Wingo, 2019/05/20
- [Guile-commits] 09/34: Fix enter/leave JIT ABI, Andy Wingo, 2019/05/20
- [Guile-commits] 14/34: Fix dpkg --add-architecture invocation, Andy Wingo, 2019/05/20
- [Guile-commits] 16/34: Attempt to fix CI on Debian, Andy Wingo, 2019/05/20
- [Guile-commits] 19/34: Attempt to fix CI on Debian, Andy Wingo, 2019/05/20
- [Guile-commits] 24/34: Remove unused jit_{gpr,fpr}_is_callee_save, Andy Wingo, 2019/05/20
- [Guile-commits] 11/34: Aarch64 backend avoids needless temporary register allocation, Andy Wingo, 2019/05/20
- [Guile-commits] 04/34: Refactor to add support for constant tables, shifted relocs, Andy Wingo, 2019/05/20
- [Guile-commits] 34/34: Merge remote-tracking branch 'lightening/master', Andy Wingo, 2019/05/20