[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 03/20: Fix lightening to compile on 32-bit x86
From: |
Andy Wingo |
Subject: |
[Guile-commits] 03/20: Fix lightening to compile on 32-bit x86 |
Date: |
Sun, 28 Apr 2019 07:54:18 -0400 (EDT) |
wingo pushed a commit to branch lightening
in repository guile.
commit bab1f40b5e68270f363f84ed8791064cd6044436
Author: Andy Wingo <address@hidden>
Date: Fri Apr 26 14:44:09 2019 +0200
Fix lightening to compile on 32-bit x86
---
lightening/lightening.c | 16 +-
lightening/x86-cpu.c | 18 +-
lightening/x86-sse.c | 90 +++-
lightening/x86-x87.c | 1344 -----------------------------------------------
lightening/x86.c | 4 +-
5 files changed, 96 insertions(+), 1376 deletions(-)
diff --git a/lightening/lightening.c b/lightening/lightening.c
index 365bdb6..3b71654 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -525,21 +525,23 @@ abi_mem_to_gpr(jit_state_t *_jit, enum jit_operand_abi
abi,
case JIT_OPERAND_ABI_INT16:
jit_ldxi_s(_jit, dst, base, offset);
break;
+#if __WORDSIZE == 32
case JIT_OPERAND_ABI_UINT32:
- jit_ldxi_ui(_jit, dst, base, offset);
- break;
+ case JIT_OPERAND_ABI_POINTER:
+#endif
case JIT_OPERAND_ABI_INT32:
jit_ldxi_i(_jit, dst, base, offset);
break;
- case JIT_OPERAND_ABI_UINT64:
- jit_ldxi_l(_jit, dst, base, offset);
- break;
- case JIT_OPERAND_ABI_INT64:
- jit_ldxi_l(_jit, dst, base, offset);
+#if __WORDSIZE == 64
+ case JIT_OPERAND_ABI_UINT32:
+ jit_ldxi_ui(_jit, dst, base, offset);
break;
+ case JIT_OPERAND_ABI_UINT64:
case JIT_OPERAND_ABI_POINTER:
+ case JIT_OPERAND_ABI_INT64:
jit_ldxi_l(_jit, dst, base, offset);
break;
+#endif
default:
abort();
}
diff --git a/lightening/x86-cpu.c b/lightening/x86-cpu.c
index aa9d68a..7144dff 100644
--- a/lightening/x86-cpu.c
+++ b/lightening/x86-cpu.c
@@ -1024,7 +1024,7 @@ ffsw(jit_word_t i)
return ffs(i);
int bit = ffs((int)i);
if (bit == 0) {
- bit = ffs((int)((unsigned long)i >> 32));
+ bit = ffs((int)((uint64_t)i >> 32));
if (bit)
bit += 32;
}
@@ -2664,34 +2664,34 @@ reti(jit_state_t *_jit, jit_word_t i0)
static void
retval_c(jit_state_t *_jit, int32_t r0)
{
- extr_c(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_c(_jit, r0, _RAX_REGNO);
}
static void
retval_uc(jit_state_t *_jit, int32_t r0)
{
- extr_uc(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_uc(_jit, r0, _RAX_REGNO);
}
static void
retval_s(jit_state_t *_jit, int32_t r0)
{
- extr_s(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_s(_jit, r0, _RAX_REGNO);
}
static void
retval_us(jit_state_t *_jit, int32_t r0)
{
- extr_us(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_us(_jit, r0, _RAX_REGNO);
}
static void
retval_i(jit_state_t *_jit, int32_t r0)
{
#if __X32 || __X64_32
- movr(_jit, r0, jit_gpr_regno(JIT_RET));
+ movr(_jit, r0, _RAX_REGNO);
#else
- extr_i(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_i(_jit, r0, _RAX_REGNO);
#endif
}
@@ -2699,12 +2699,12 @@ retval_i(jit_state_t *_jit, int32_t r0)
static void
retval_ui(jit_state_t *_jit, int32_t r0)
{
- extr_ui(_jit, r0, jit_gpr_regno(JIT_RET));
+ extr_ui(_jit, r0, _RAX_REGNO);
}
static void
retval_l(jit_state_t *_jit, int32_t r0)
{
- movr(_jit, r0, jit_gpr_regno(JIT_RET));
+ movr(_jit, r0, _RAX_REGNO);
}
#endif
diff --git a/lightening/x86-sse.c b/lightening/x86-sse.c
index bc6c060..c304919 100644
--- a/lightening/x86-sse.c
+++ b/lightening/x86-sse.c
@@ -398,49 +398,111 @@ movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t i0)
if (data.d == 0.0 && !(data.ii[1] & 0x80000000))
xorpdr(_jit, r0, r0);
else {
- jit_gpr_t reg = get_temp_gpr(_jit);
+ jit_gpr_t ireg = get_temp_gpr(_jit);
#if __X64 && !__X64_32
- movi(_jit, jit_gpr_regno(reg), data.w);
- movdqxr(_jit, r0, jit_gpr_regno(reg));
+ movi(_jit, jit_gpr_regno(ireg), data.w);
+ movdqxr(_jit, r0, jit_gpr_regno(ireg));
unget_temp_gpr(_jit);
#else
- movi(_jit, jit_gpr_regno(reg), data.ii[0]);
- stxi_i(CVT_OFFSET, _RBP_REGNO, jit_gpr_regno(reg));
- movi(_jit, jit_gpr_regno(reg), data.ii[1]);
- stxi_i(CVT_OFFSET + 4, _RBP_REGNO, jit_gpr_regno(reg));
+ jit_fpr_t freg = get_temp_xpr(_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));
+ xorpdr(_jit, r0, jit_fpr_regno(freg));
+ unget_temp_xpr(_jit);
unget_temp_gpr(_jit);
- ldxi_d(_jit, r0, _RBP_REGNO, CVT_OFFSET);
#endif
}
}
+#if __X32
+static void
+x87rx(jit_state_t *_jit, int32_t code, int32_t md,
+ int32_t rb, int32_t ri, int32_t ms)
+{
+ rex(_jit, 0, 1, rb, ri, _NOREG);
+ ic(_jit, 0xd8 | (code >> 3));
+ rx(_jit, (code & 7), md, rb, ri, ms);
+}
+
+static void
+fldsm(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms)
+{
+ return x87rx(_jit, 010, md, rb, ri, ms);
+}
+
+static void
+fstsm(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms)
+{
+ return x87rx(_jit, 012, md, rb, ri, ms);
+}
+
+static void
+fldlm(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms)
+{
+ return x87rx(_jit, 050, md, rb, ri, ms);
+}
+
+static void
+fstlm(jit_state_t *_jit, int32_t md, int32_t rb, int32_t ri, int32_t ms)
+{
+ return x87rx(_jit, 052, md, rb, ri, ms);
+}
+#endif
+
static void
retval_f(jit_state_t *_jit, int32_t r0)
{
-#if __X64
- movr_f(_jit, r0, jit_fpr_regno(JIT_FRET));
+#if __X32
+ subi(_jit, _RSP_REGNO, _RSP_REGNO, 4);
+ fstsm(_jit, 0, _RSP_REGNO, _NOREG, _SCL1);
+ ldr_f(_jit, r0, _RSP_REGNO);
+ addi(_jit, _RSP_REGNO, _RSP_REGNO, 4);
+#else
+ movr_f(_jit, r0, _XMM0_REGNO);
#endif
}
static void
retval_d(jit_state_t *_jit, int32_t r0)
{
-#if __X64
- movr_d(_jit, r0, jit_fpr_regno(JIT_FRET));
+#if __X32
+ subi(_jit, _RSP_REGNO, _RSP_REGNO, 8);
+ fstlm(_jit, 0, _RSP_REGNO, _NOREG, _SCL1);
+ ldr_d(_jit, r0, _RSP_REGNO);
+ addi(_jit, _RSP_REGNO, _RSP_REGNO, 8);
+#else
+ movr_d(_jit, r0, _XMM0_REGNO);
#endif
}
static void
retr_f(jit_state_t *_jit, int32_t u)
{
- movr_f(_jit, jit_fpr_regno(JIT_FRET), u);
+#if __X32
+ subi(_jit, _RSP_REGNO, _RSP_REGNO, 4);
+ str_f(_jit, _RSP_REGNO, u);
+ fldsm(_jit, 0, _RSP_REGNO, _NOREG, _SCL1);
+ addi(_jit, _RSP_REGNO, _RSP_REGNO, 4);
+#else
+ movr_f(_jit, _XMM0_REGNO, u);
+#endif
ret(_jit);
}
static void
retr_d(jit_state_t *_jit, int32_t u)
{
- movr_d(_jit, jit_fpr_regno(JIT_FRET), u);
+#if __X32
+ subi(_jit, _RSP_REGNO, _RSP_REGNO, 8);
+ str_d(_jit, _RSP_REGNO, u);
+ fldlm(_jit, 0, _RSP_REGNO, _NOREG, _SCL1);
+ addi(_jit, _RSP_REGNO, _RSP_REGNO, 8);
+#else
+ movr_d(_jit, _XMM0_REGNO, u);
+#endif
ret(_jit);
}
diff --git a/lightening/x86-x87.c b/lightening/x86-x87.c
deleted file mode 100644
index e6f8be5..0000000
--- a/lightening/x86-x87.c
+++ /dev/null
@@ -1,1344 +0,0 @@
-/*
- * Copyright (C) 2012-2017 Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- * Paulo Cesar Pereira de Andrade
- */
-
-#if PROTO
-# if __X32
-# define x87_address_p(i0) 1
-# else
-# if __X64_32
-# define x87_address_p(i0) ((jit_word_t)(i0) >= 0)
-# else
-# define x87_address_p(i0) can_sign_extend_int_p(i0)
-# endif
-# endif
-# define _ST0_REGNO 0
-# define _ST1_REGNO 1
-# define _ST2_REGNO 2
-# define _ST3_REGNO 3
-# define _ST4_REGNO 4
-# define _ST5_REGNO 5
-# define _ST6_REGNO 6
-# define x87rx(code, md, rb, ri, ms) _x87rx(_jit, code, md, rb, ri, ms)
-# define fldcwm(md, rb, ri, ms) x87rx(015, md, rb, ri, ms)
-# define fstcwm(md, rb, ri, ms) _fstcwm(_jit, md, rb, ri, ms)
-static void
-_fstcwm(jit_state_t*, int32_t, int32_t, int32_t, int32_t);
-# define fldsm(md, rb, ri, ms) x87rx(010, md, rb, ri, ms)
-# define fstsm(md, rb, ri, ms) x87rx(012, md, rb, ri, ms)
-# define fldlm(md, rb, ri, ms) x87rx(050, md, rb, ri, ms)
-# define fstlm(md, rb, ri, ms) x87rx(052, md, rb, ri, ms)
-# define fisttplm(md, rb, ri, ms) x87rx(031, md, rb, ri, ms)
-# define fistlm(md, rb, ri, ms) x87rx(032, md, rb, ri, ms)
-# define fisttpqm(md, rb, ri, ms) x87rx(071, md, rb, ri, ms)
-# define fildlm(md, rb, ri, ms) x87rx(030, md, rb,ri, ms)
-# define fildqm(md, rb, ri, ms) x87rx(075, md, rb,ri, ms)
-static void
-_x87rx(jit_state_t*, int32_t, int32_t,
- int32_t, int32_t, int32_t);
-# define x87ri(cc,r0) _x87ri(_jit,cc,r0)
-# define fchs_() x87ri(014, 0)
-# define fabs_() x87ri(014, 1)
-# define fld1() x87ri(015, 0)
-# define fldl2t() x87ri(015, 1)
-# define fldl2e() x87ri(015, 2)
-# define fldpi() x87ri(015, 3)
-# define fldlg2() x87ri(015, 4)
-# define fldln2() x87ri(015, 5)
-# define fldz() x87ri(015, 6)
-# define fsqrt_() x87ri(017, 2)
-# define fldr(r0) x87ri(010, r0)
-# define fxchr(r0) x87ri(011, r0)
-# define fstr(r0) x87ri(052, r0)
-# define fstpr(r0) x87ri(053, r0)
-# define fucomir(r0) x87ri(035, r0)
-# define fucomipr(r0) x87ri(075, r0)
-static void _x87ri(jit_state_t*, int32_t, int32_t);
-# define faddr(r0, r1) x87rri(000, r0, r1)
-# define fmulr(r0, r1) x87rri(001, r0, r1)
-# define fsubr(r0, r1) x87rri(004, r0, r1)
-# define fsubrr(r0, r1) x87rri(005, r0, r1)
-# define fdivr(r0, r1) x87rri(006, r0, r1)
-# define fdivrr(r0, r1) x87rri(007, r0, r1)
-# define x87rri(cc, r0, r1) _x87rri(_jit, cc, r0, r1)
-static void _x87rri(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_addr_f(r0, r1, r2) _x87_addr_d(_jit, r0, r1, r2)
-# define x87_addi_f(r0, r1, i0) _x87_addi_f(_jit, r0, r1, i0)
-static void _x87_addi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_addr_d(r0, r1, r2) _x87_addr_d(_jit, r0, r1, r2)
-static void _x87_addr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_addi_d(r0, r1, i0) _x87_addi_d(_jit, r0, r1, i0)
-static void _x87_addi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_subr_f(r0, r1, r2) _x87_subr_d(_jit, r0, r1, r2)
-# define x87_subi_f(r0, r1, i0) _x87_subi_f(_jit, r0, r1, i0)
-static void _x87_subi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_subr_d(r0, r1, r2) _x87_subr_d(_jit, r0, r1, r2)
-static void _x87_subr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_subi_d(r0, r1, i0) _x87_subi_d(_jit, r0, r1, i0)
-static void _x87_subi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_rsbr_f(r0, r1, r2) x87_subr_f(r0, r2, r1)
-# define x87_rsbi_f(r0, r1, i0) _x87_rsbi_f(_jit, r0, r1, i0)
-static void _x87_rsbi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_rsbr_d(r0, r1, r2) x87_subr_d(r0, r2, r1)
-# define x87_rsbi_d(r0, r1, i0) _x87_rsbi_d(_jit, r0, r1, i0)
-static void _x87_rsbi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_mulr_f(r0, r1, r2) _x87_mulr_d(_jit, r0, r1, r2)
-# define x87_muli_f(r0, r1, i0) _x87_muli_f(_jit, r0, r1, i0)
-static void _x87_muli_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_mulr_d(r0, r1, r2) _x87_mulr_d(_jit, r0, r1, r2)
-static void _x87_mulr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_muli_d(r0, r1, i0) _x87_muli_d(_jit, r0, r1, i0)
-static void _x87_muli_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_divr_f(r0, r1, r2) _x87_divr_d(_jit, r0, r1, r2)
-# define x87_divi_f(r0, r1, i0) _x87_divi_f(_jit, r0, r1, i0)
-static void _x87_divi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_divr_d(r0, r1, r2) _x87_divr_d(_jit, r0, r1, r2)
-static void _x87_divr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_divi_d(r0, r1, i0) _x87_divi_d(_jit, r0, r1, i0)
-static void _x87_divi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_absr_f(r0, r1) _x87_absr_d(_jit, r0, r1)
-# define x87_absr_d(r0, r1) _x87_absr_d(_jit, r0, r1)
-static void _x87_absr_d(jit_state_t*, int32_t, int32_t);
-# define x87_negr_f(r0, r1) _x87_negr_d(_jit, r0, r1)
-# define x87_negr_d(r0, r1) _x87_negr_d(_jit, r0, r1)
-static void _x87_negr_d(jit_state_t*, int32_t, int32_t);
-# define x87_sqrtr_f(r0, r1) _x87_sqrtr_d(_jit, r0, r1)
-# define x87_sqrtr_d(r0, r1) _x87_sqrtr_d(_jit, r0, r1)
-static void _x87_sqrtr_d(jit_state_t*, int32_t, int32_t);
-# define x87_truncr_f_i(r0, r1) _x87_truncr_d_i(_jit, r0, r1)
-# define x87_truncr_d_i(r0, r1) _x87_truncr_d_i(_jit, r0, r1)
-static void _x87_truncr_d_i(jit_state_t*, int32_t, int32_t);
-# if __X64
-# define x87_truncr_f_l(r0, r1) _x87_truncr_d_l(_jit, r0, r1)
-# define x87_truncr_d_l(r0, r1) _x87_truncr_d_l(_jit, r0, r1)
-static void _x87_truncr_d_l(jit_state_t*, int32_t, int32_t);
-# endif
-# define x87_extr_f(r0, r1) _x87_extr_d(_jit, r0, r1)
-# define x87_extr_d(r0, r1) _x87_extr_d(_jit, r0, r1)
-# define x87_extr_f_d(r0, r1) x87_movr_d(r0, r1)
-# define x87_extr_d_f(r0, r1) x87_movr_d(r0, r1)
-static void _x87_extr_d(jit_state_t*, int32_t, int32_t);
-# define x87cmp(code, r0, r1, r2) _x87cmp(_jit, code, r0, r1, r2)
-static void
-_x87cmp(jit_state_t*, int32_t, int32_t, int32_t, int32_t);
-# define x87cmp2(code, r0, r1, r2) _x87cmp2(_jit, code, r0, r1, r2)
-static void
-_x87cmp2(jit_state_t*, int32_t, int32_t, int32_t, int32_t);
-# define x87jcc(code, i0, r0, r1) _x87jcc(_jit, code, i0, r0, r1)
-static jit_word_t
-_x87jcc(jit_state_t*, int32_t, jit_word_t, int32_t, int32_t);
-# define x87jcc2(code, i0, r0, r1) _x87jcc2(_jit, code, i0, r0, r1)
-static jit_word_t
-_x87jcc2(jit_state_t*, int32_t, jit_word_t, int32_t, int32_t);
-#define x87_movi_f(r0,i0) _x87_movi_f(_jit,r0,i0)
-static void _x87_movi_f(jit_state_t*, int32_t, jit_float32_t*);
-# define x87_ldr_f(r0, r1) _x87_ldr_f(_jit, r0, r1)
-static void _x87_ldr_f(jit_state_t*, int32_t, int32_t);
-# define x87_ldi_f(r0, i0) _x87_ldi_f(_jit, r0, i0)
-static void _x87_ldi_f(jit_state_t*, int32_t, jit_word_t);
-# define x87_ldxr_f(r0, r1, r2) _x87_ldxr_f(_jit, r0, r1, r2)
-static void _x87_ldxr_f(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_ldxi_f(r0, r1, i0) _x87_ldxi_f(_jit, r0, r1, i0)
-static void _x87_ldxi_f(jit_state_t*, int32_t, int32_t, jit_word_t);
-# define x87_str_f(r0, r1) _x87_str_f(_jit, r0, r1)
-static void _x87_str_f(jit_state_t*,int32_t,int32_t);
-# define x87_sti_f(i0, r0) _x87_sti_f(_jit, i0, r0)
-static void _x87_sti_f(jit_state_t*,jit_word_t, int32_t);
-# define x87_stxr_f(r0, r1, r2) _x87_stxr_f(_jit, r0, r1, r2)
-static void _x87_stxr_f(jit_state_t*,int32_t,int32_t,int32_t);
-# define x87_stxi_f(i0, r0, r1) _x87_stxi_f(_jit, i0, r0, r1)
-static void _x87_stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t);
-# define x87_ltr_f(r0, r1, r2) x87cmp(X86_CC_A, r0, r2, r1)
-# define x87_lti_f(r0, r1, i0) _x87_lti_f(_jit, r0, r1, i0)
-static void _x87_lti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ler_f(r0, r1, r2) x87cmp(X86_CC_AE, r0, r2, r1)
-# define x87_lei_f(r0, r1, i0) _x87_lei_f(_jit, r0, r1, i0)
-static void _x87_lei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_eqr_f(r0, r1, r2) x87_eqr_d(r0, r2, r1)
-# define x87_eqi_f(r0, r1, i0) _x87_eqi_f(_jit, r0, r1, i0)
-static void _x87_eqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ger_f(r0, r1, r2) x87cmp(X86_CC_AE, r0, r1, r2)
-# define x87_gei_f(r0, r1, i0) _x87_gei_f(_jit, r0, r1, i0)
-static void _x87_gei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_gtr_f(r0, r1, r2) x87cmp(X86_CC_A, r0, r1, r2)
-# define x87_gti_f(r0, r1, i0) _x87_gti_f(_jit, r0, r1, i0)
-static void _x87_gti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ner_f(r0, r1, r2) x87_ner_d(r0, r2, r1)
-# define x87_nei_f(r0, r1, i0) _x87_nei_f(_jit, r0, r1, i0)
-static void _x87_nei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_unltr_f(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r1, r2)
-# define x87_unlti_f(r0, r1, i0) _x87_unlti_f(_jit, r0, r1, i0)
-static void _x87_unlti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_unler_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2)
-# define x87_unlei_f(r0, r1, i0) _x87_unlei_f(_jit, r0, r1, i0)
-static void _x87_unlei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_uneqr_f(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2)
-# define x87_uneqi_f(r0, r1, i0) _x87_uneqi_f(_jit, r0, r1, i0)
-static void _x87_uneqi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_unger_f(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1)
-# define x87_ungei_f(r0, r1, i0) _x87_ungei_f(_jit, r0, r1, i0)
-static void _x87_ungei_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ungtr_f(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r2, r1)
-# define x87_ungti_f(r0, r1, i0) _x87_ungti_f(_jit, r0, r1, i0)
-static void _x87_ungti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ltgtr_f(r0, r1, r2) x87_ltgtr_d(r0, r1, r2)
-# define x87_ltgti_f(r0, r1, i0) _x87_ltgti_f(_jit, r0, r1, i0)
-static void _x87_ltgti_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ordr_f(r0, r1, r2) x87cmp2(X86_CC_NP, r0, r2, r1)
-# define x87_ordi_f(r0, r1, i0) _x87_ordi_f(_jit, r0, r1, i0)
-static void _x87_ordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_unordr_f(r0, r1, r2) x87cmp2(X86_CC_P, r0, r2, r1)
-# define x87_unordi_f(r0, r1, i0) _x87_unordi_f(_jit, r0, r1, i0)
-static void _x87_unordi_f(jit_state_t*,int32_t,int32_t,jit_float32_t*);
-# define x87_ltr_d(r0, r1, r2) x87cmp(X86_CC_A, r0, r2, r1)
-# define x87_lti_d(r0, r1, i0) _x87_lti_d(_jit, r0, r1, i0)
-static void _x87_lti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ler_d(r0, r1, r2) x87cmp(X86_CC_AE, r0, r2, r1)
-# define x87_lei_d(r0, r1, i0) _x87_lei_d(_jit, r0, r1, i0)
-static void _x87_lei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_eqr_d(r0, r1, r2) _x87_eqr_d(_jit, r0, r2, r1)
-static void _x87_eqr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_eqi_d(r0, r1, i0) _x87_eqi_d(_jit, r0, r1, i0)
-static void _x87_eqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ger_d(r0, r1, r2) x87cmp(X86_CC_AE, r0, r1, r2)
-# define x87_gei_d(r0, r1, i0) _x87_gei_d(_jit, r0, r1, i0)
-static void _x87_gei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_gtr_d(r0, r1, r2) x87cmp(X86_CC_A, r0, r1, r2)
-# define x87_gti_d(r0, r1, i0) _x87_gti_d(_jit, r0, r1, i0)
-static void _x87_gti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ner_d(r0, r1, r2) _x87_ner_d(_jit, r0, r2, r1)
-static void _x87_ner_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_nei_d(r0, r1, i0) _x87_nei_d(_jit, r0, r1, i0)
-static void _x87_nei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_unltr_d(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r1, r2)
-# define x87_unlti_d(r0, r1, i0) _x87_unlti_d(_jit, r0, r1, i0)
-static void _x87_unlti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_unler_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r1, r2)
-# define x87_unlei_d(r0, r1, i0) _x87_unlei_d(_jit, r0, r1, i0)
-static void _x87_unlei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_uneqr_d(r0, r1, r2) x87cmp2(X86_CC_E, r0, r1, r2)
-# define x87_uneqi_d(r0, r1, i0) _x87_uneqi_d(_jit, r0, r1, i0)
-static void _x87_uneqi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_unger_d(r0, r1, r2) x87cmp(X86_CC_NA, r0, r2, r1)
-# define x87_ungei_d(r0, r1, i0) _x87_ungei_d(_jit, r0, r1, i0)
-static void _x87_ungei_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ungtr_d(r0, r1, r2) x87cmp(X86_CC_NAE, r0, r2, r1)
-# define x87_ungti_d(r0, r1, i0) _x87_ungti_d(_jit, r0, r1, i0)
-static void _x87_ungti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ltgtr_d(r0, r1, r2) _x87_ltgtr_d(_jit, r0, r1, r2)
-static void _x87_ltgtr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_ltgti_d(r0, r1, i0) _x87_ltgti_d(_jit, r0, r1, i0)
-static void _x87_ltgti_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_ordr_d(r0, r1, r2) x87cmp2(X86_CC_NP, r0, r2, r1)
-# define x87_ordi_d(r0, r1, i0) _x87_ordi_d(_jit, r0, r1, i0)
-static void _x87_ordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-# define x87_unordr_d(r0, r1, r2) x87cmp2(X86_CC_P, r0, r2, r1)
-# define x87_unordi_d(r0, r1, i0) _x87_unordi_d(_jit, r0, r1, i0)
-static void _x87_unordi_d(jit_state_t*,int32_t,int32_t,jit_float64_t*);
-#define x87_movr_f(r0,r1) _x87_movr_d(_jit,r0,r1)
-#define x87_movr_d(r0,r1) _x87_movr_d(_jit,r0,r1)
-static void _x87_movr_d(jit_state_t*, int32_t, int32_t);
-#define x87_movi_d(r0,i0) _x87_movi_d(_jit,r0,i0)
-static void _x87_movi_d(jit_state_t*, int32_t, jit_float64_t*);
-# define x87_ldr_d(r0, r1) _x87_ldr_d(_jit, r0, r1)
-static void _x87_ldr_d(jit_state_t*, int32_t, int32_t);
-# define x87_ldi_d(r0, i0) _x87_ldi_d(_jit, r0, i0)
-static void _x87_ldi_d(jit_state_t*, int32_t, jit_word_t);
-# define x87_ldxr_d(r0, r1, r2) _x87_ldxr_d(_jit, r0, r1, r2)
-static void _x87_ldxr_d(jit_state_t*, int32_t, int32_t, int32_t);
-# define x87_ldxi_d(r0, r1, i0) _x87_ldxi_d(_jit, r0, r1, i0)
-static void _x87_ldxi_d(jit_state_t*, int32_t, int32_t, jit_word_t);
-# define x87_str_d(r0, r1) _x87_str_d(_jit, r0, r1)
-static void _x87_str_d(jit_state_t*,int32_t,int32_t);
-# define x87_sti_d(i0, r0) _x87_sti_d(_jit, i0, r0)
-static void _x87_sti_d(jit_state_t*,jit_word_t,int32_t);
-# define x87_stxr_d(r0, r1, r2) _x87_stxr_d(_jit, r0, r1, r2)
-static void _x87_stxr_d(jit_state_t*,int32_t,int32_t,int32_t);
-# define x87_stxi_d(i0, r0, r1) _x87_stxi_d(_jit, i0, r0, r1)
-static void _x87_stxi_d(jit_state_t*,jit_word_t,int32_t,int32_t);
-# define x87_bltr_f(i0, r0, r1) x87jcc(X86_CC_A, i0, r1, r0)
-# define x87_blti_f(i0, r0, i1) _x87_blti_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_blti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bler_f(i0, r0, r1) x87jcc(X86_CC_AE, i0, r1, r0)
-# define x87_blei_f(i0, r0, i1) _x87_blei_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_blei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_beqr_f(i0, r0, r1) _x87_beqr_d(_jit, i0, r0, r1)
-# define x87_beqi_f(i0, r0, i1) _x87_beqi_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_beqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bger_f(i0, r0, r1) x87jcc(X86_CC_AE, i0, r0, r1)
-# define x87_bgei_f(i0, r0, i1) _x87_bgei_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bgei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bgtr_f(i0, r0, r1) x87jcc(X86_CC_A, i0, r0, r1)
-# define x87_bgti_f(i0, r0, i1) _x87_bgti_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bner_f(i0, r0, r1) _x87_bner_d(_jit, i0, r0, r1)
-# define x87_bnei_f(i0, r0, i1) _x87_bnei_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bnei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bunltr_f(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r0, r1)
-# define x87_bunlti_f(i0, r0, i1) _x87_bunlti_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunlti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bunler_f(i0, r0, r1) x87jcc(X86_CC_NA, i0, r0, r1)
-# define x87_bunlei_f(i0, r0, i1) _x87_bunlei_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunlei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_buneqr_f(i0, r0, r1) x87jcc2(X86_CC_E, i0, r0, r1)
-# define x87_buneqi_f(i0, r0, i1) _x87_buneqi_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_buneqi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bunger_f(i0, r0, r1) x87jcc(X86_CC_NA, i0, r1, r0)
-# define x87_bungei_f(i0, r0, i1) _x87_bungei_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bungei_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bungtr_f(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r1, r0)
-# define x87_bungti_f(i0, r0, i1) _x87_bungti_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bungti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bltgtr_f(i0, r0, r1) x87jcc2(X86_CC_NE, i0, r0, r1)
-# define x87_bltgti_f(i0, r0, i1) _x87_bltgti_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bltgti_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bordr_f(i0, r0, r1) x87jcc2(X86_CC_NP, i0, r0, r1)
-# define x87_bordi_f(i0, r0, i1) _x87_bordi_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bunordr_f(i0, r0, r1) x87jcc2(X86_CC_P, i0, r0, r1)
-# define x87_bunordi_f(i0, r0, i1) _x87_bunordi_f(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunordi_f(jit_state_t*, jit_word_t, int32_t, jit_float32_t*);
-# define x87_bltr_d(i0, r0, r1) x87jcc(X86_CC_A, i0, r1, r0)
-# define x87_blti_d(i0, r0, i1) _x87_blti_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_blti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bler_d(i0, r0, r1) x87jcc(X86_CC_AE, i0, r1, r0)
-# define x87_blei_d(i0, r0, i1) _x87_blei_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_blei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_beqr_d(i0, r0, r1) _x87_beqr_d(_jit, i0, r0, r1)
-static jit_word_t
-_x87_beqr_d(jit_state_t*, jit_word_t, int32_t, int32_t);
-# define x87_beqi_d(i0, r0, i1) _x87_beqi_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_beqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bger_d(i0, r0, r1) x87jcc(X86_CC_AE, i0, r0, r1)
-# define x87_bgei_d(i0, r0, i1) _x87_bgei_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bgei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bgtr_d(i0, r0, r1) x87jcc(X86_CC_A, i0, r0, r1)
-# define x87_bgti_d(i0, r0, i1) _x87_bgti_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bner_d(i0, r0, r1) _x87_bner_d(_jit, i0, r0, r1)
-static jit_word_t
-_x87_bner_d(jit_state_t*, jit_word_t, int32_t, int32_t);
-# define x87_bnei_d(i0, r0, i1) _x87_bnei_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bnei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bunltr_d(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r0, r1)
-# define x87_bunlti_d(i0, r0, i1) _x87_bunlti_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunlti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bunler_d(i0, r0, r1) x87jcc(X86_CC_NA, i0, r0, r1)
-# define x87_bunlei_d(i0, r0, i1) _x87_bunlei_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunlei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_buneqr_d(i0, r0, r1) x87jcc2(X86_CC_E, i0, r0, r1)
-# define x87_buneqi_d(i0, r0, i1) _x87_buneqi_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_buneqi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bunger_d(i0, r0, r1) x87jcc(X86_CC_NA, i0, r1, r0)
-# define x87_bungei_d(i0, r0, i1) _x87_bungei_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bungei_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bungtr_d(i0, r0, r1) x87jcc(X86_CC_NAE, i0, r1, r0)
-# define x87_bungti_d(i0, r0, i1) _x87_bungti_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bungti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bltgtr_d(i0, r0, r1) x87jcc2(X86_CC_NE, i0, r0, r1)
-# define x87_bltgti_d(i0, r0, i1) _x87_bltgti_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bltgti_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bordr_d(i0, r0, r1) x87jcc2(X86_CC_NP, i0, r0, r1)
-# define x87_bordi_d(i0, r0, i1) _x87_bordi_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-# define x87_bunordr_d(i0, r0, r1) x87jcc2(X86_CC_P, i0, r0, r1)
-# define x87_bunordi_d(i0, r0, i1) _x87_bunordi_d(_jit, i0, r0, i1)
-static jit_word_t
-_x87_bunordi_d(jit_state_t*, jit_word_t, int32_t, jit_float64_t*);
-#endif
-
-#if CODE
-# define fpr_opi(name, type, size) \
-static void \
-_x87_##name##i_##type(jit_state_t *_jit, \
- int32_t r0, int32_t r1, \
- jit_float##size##_t *i0) \
-{ \
- int32_t reg = jit_get_reg(jit_class_fpr); \
- assert(jit_x87_reg_p(reg));
\
- x87_movi_##type(rn(reg), i0); \
- x87_##name##r_##type(r0, r1, rn(reg)); \
- jit_unget_reg(reg);
\
-}
-# define fpr_bopi(name, type, size) \
-static jit_word_t \
-_x87_b##name##i_##type(jit_state_t *_jit, \
- jit_word_t i0, int32_t r0, \
- jit_float##size##_t *i1) \
-{ \
- jit_word_t word; \
- int32_t reg = jit_get_reg(jit_class_fpr| \
- jit_class_nospill); \
- assert(jit_x87_reg_p(reg));
\
- x87_movi_##type(rn(reg), i1); \
- word = x87_b##name##r_##type(i0, r0, rn(reg)); \
- jit_unget_reg(reg);
\
- return (word); \
-}
-# define fopi(name) fpr_opi(name, f, 32)
-# define fbopi(name) fpr_bopi(name, f, 32)
-# define dopi(name) fpr_opi(name, d, 64)
-# define dbopi(name) fpr_bopi(name, d, 64)
-
-static void
-_fstcwm(jit_state_t *_jit, int32_t md,
- int32_t rb, int32_t ri, int32_t ms)
-{
- ic(0x9b);
- rex(0, 1, rb, ri, _NOREG);
- x87rx(017, md, rb, ri, ms);
-}
-
-static void
-_x87rx(jit_state_t *_jit, int32_t code, int32_t md,
- int32_t rb, int32_t ri, int32_t ms)
-{
- rex(0, 1, rb, ri, _NOREG);
- ic(0xd8 | (code >> 3));
- rx((code & 7), md, rb, ri, ms);
-}
-
-static void
-_x87ri(jit_state_t *_jit, int32_t code, int32_t r0)
-{
- ic(0xd8 | (code >> 3));
- mrm(0x03, (code & 7), r0);
-}
-
-static void
-_x87rri(jit_state_t *_jit, int32_t code, int32_t r0, int32_t r1)
-{
- if (r1 == _ST0_REGNO)
- x87ri(code | 040, r0);
- else {
- assert(r0 == _ST0_REGNO);
- x87ri(code, r1);
- }
-}
-
-fopi(add)
-fopi(sub)
-fopi(rsb)
-fopi(mul)
-fopi(div)
-
-static void
-_x87_addr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- if (r0 == r1) {
- if (r2 == _ST0_REGNO)
- faddr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- faddr(_ST0_REGNO, r2);
- else {
- fxchr(r0);
- faddr(_ST0_REGNO, r0 == r2 ? _ST0_REGNO : r2);
- fxchr(r0);
- }
- }
- else if (r0 == r2) {
- if (r1 == _ST0_REGNO)
- faddr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- faddr(_ST0_REGNO, r1);
- else {
- fxchr(r0);
- faddr(_ST0_REGNO, r1);
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- faddr(_ST0_REGNO, r2 + 1);
- fstpr(r0 + 1);
- }
-}
-
-dopi(add)
-
-static void
-_x87_subr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- if (r0 == r1) {
- if (r2 == _ST0_REGNO)
- fsubrr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fsubr(_ST0_REGNO, r2);
- else {
- fxchr(r0);
- fsubr(_ST0_REGNO, r0 == r2 ? _ST0_REGNO : r2);
- fxchr(r0);
- }
- }
- else if (r0 == r2) {
- if (r1 == _ST0_REGNO)
- fsubr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fsubrr(_ST0_REGNO, r1);
- else {
- fxchr(r0);
- fsubrr(_ST0_REGNO, r1);
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fsubr(_ST0_REGNO, r2 + 1);
- fstpr(r0 + 1);
- }
-}
-
-dopi(sub)
-
-dopi(rsb)
-
-static void
-_x87_mulr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- if (r0 == r1) {
- if (r2 == _ST0_REGNO)
- fmulr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fmulr(_ST0_REGNO, r2);
- else {
- fxchr(r0);
- fmulr(_ST0_REGNO, r0 == r2 ? _ST0_REGNO : r2);
- fxchr(r0);
- }
- }
- else if (r0 == r2) {
- if (r1 == _ST0_REGNO)
- fmulr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fmulr(_ST0_REGNO, r1);
- else {
- fxchr(r0);
- fmulr(_ST0_REGNO, r1);
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fmulr(_ST0_REGNO, r2 + 1);
- fstpr(r0 + 1);
- }
-}
-
-dopi(mul)
-
-static void
-_x87_divr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- if (r0 == r1) {
- if (r2 == _ST0_REGNO)
- fdivrr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fdivr(_ST0_REGNO, r2);
- else {
- fxchr(r0);
- fdivr(_ST0_REGNO, r0 == r2 ? _ST0_REGNO : r2);
- fxchr(r0);
- }
- }
- else if (r0 == r2) {
- if (r1 == _ST0_REGNO)
- fdivr(r0, _ST0_REGNO);
- else if (r0 == _ST0_REGNO)
- fsubrr(_ST0_REGNO, r1);
- else {
- fxchr(r0);
- fdivrr(_ST0_REGNO, r1);
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fdivr(_ST0_REGNO, r2 + 1);
- fstpr(r0 + 1);
- }
-}
-
-dopi(div)
-
-static void
-_x87_absr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r0 == r1) {
- if (r1 == _ST0_REGNO)
- fabs_();
- else {
- fxchr(r0);
- fabs_();
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fabs_();
- fstpr(r0 + 1);
- }
-}
-
-static void
-_x87_negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r0 == r1) {
- if (r1 == _ST0_REGNO)
- fchs_();
- else {
- fxchr(r0);
- fchs_();
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fchs_();
- fstpr(r0 + 1);
- }
-}
-
-static void
-_x87_sqrtr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r0 == r1) {
- if (r1 == _ST0_REGNO)
- fsqrt_();
- else {
- fxchr(r0);
- fsqrt_();
- fxchr(r0);
- }
- }
- else {
- fldr(r1);
- fsqrt_();
- fstpr(r0 + 1);
- }
-}
-
-static void
-_x87_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-#if defined(sun)
- /* for the sake of passing test cases in x87 mode, otherwise only sse
- * is supported */
- fstcwm(-4, _RBP_REGNO, _NOREG, _SCL1);
- ldxi_s(r0, _RBP_REGNO, -4);
- extr_uc(r0, r0);
-# define FPCW_CHOP 0xc00
- ori(r0, r0, FPCW_CHOP);
- stxi_s(-8, _RBP_REGNO, r0);
- fldcwm(-8, _RBP_REGNO, _NOREG, _SCL1);
- if (r1 == _ST0_REGNO)
- fistlm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
- else {
- fxchr(r1);
- fistlm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
- fxchr(r1);
- }
- fldcwm(-4, _RBP_REGNO, _NOREG, _SCL1);
- ldxi(r0, _RBP_REGNO, CVT_OFFSET);
-#else
- fldr(r1);
- fisttplm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
- ldxi_i(r0, _RBP_REGNO, CVT_OFFSET);
-#endif
-}
-
-# if __X64
-static void
-_x87_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- fldr(r1);
- fisttpqm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
- ldxi(r0, _RBP_REGNO, CVT_OFFSET);
-}
-# endif
-
-static void
-_x87_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- stxi(CVT_OFFSET, _RBP_REGNO, r1);
-# if __X32
- fildlm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
-# else
- fildqm(CVT_OFFSET, _RBP_REGNO, _NOREG, _SCL1);
-# endif
- fstpr(r0 + 1);
-}
-
-static void
-_x87cmp(jit_state_t *_jit, int32_t code,
- int32_t r0, int32_t r1, int32_t r2)
-{
- jit_bool_t rc;
- int32_t reg;
- if ((rc = reg8_p(r0)))
- reg = r0;
- else {
- reg = _RAX_REGNO;
- movr(r0, reg);
- }
- ixorr(reg, reg);
- if (r1 == _ST0_REGNO)
- fucomir(r2);
- else {
- fldr(r1);
- fucomipr(r2 + 1);
- }
- cc(code, reg);
- if (!rc)
- xchgr(r0, reg);
-}
-
-static void
-_x87cmp2(jit_state_t *_jit, int32_t code,
- int32_t r0, int32_t r1, int32_t r2)
-{
- jit_bool_t rc;
- int32_t reg;
- int32_t f1, f2;
- if (r2 == _ST0_REGNO) f1 = r2, f2 = r1;
- else f1 = r1, f2 = r2;
- if ((rc = reg8_p(r0)))
- reg = r0;
- else {
- reg = _RAX_REGNO;
- movr(r0, reg);
- }
- ixorr(reg, reg);
- if (f1 == _ST0_REGNO)
- fucomir(f2);
- else {
- fldr(f1);
- fucomipr(f2 + 1);
- }
- cc(code, reg);
- if (!rc)
- xchgr(r0, reg);
-}
-
-static jit_word_t
-_x87jcc(jit_state_t *_jit, int32_t code,
- jit_word_t i0, int32_t r0, int32_t r1)
-{
- if (r0 == _ST0_REGNO)
- fucomir(r1);
- else {
- fldr(r0);
- fucomipr(r1 + 1);
- }
- jcc(code, i0);
- return (_jit->pc.w);
-}
-
-static jit_word_t
-_x87jcc2(jit_state_t *_jit, int32_t code,
- jit_word_t i0, int32_t r0, int32_t r1)
-{
- int32_t f0, f1;
- if (r1 == _ST0_REGNO) f0 = r1, f1 = r0;
- else f0 = r0, f1 = r1;
- if (f0 == _ST0_REGNO)
- fucomir(f1);
- else {
- fldr(f0);
- fucomipr(f1 + 1);
- }
- jcc(code, i0);
- return (_jit->pc.w);
-}
-
-fopi(lt)
-fopi(le)
-fopi(eq)
-fopi(ge)
-fopi(gt)
-fopi(ne)
-fopi(unlt)
-fopi(unle)
-fopi(uneq)
-fopi(unge)
-fopi(ungt)
-fopi(ltgt)
-fopi(ord)
-fopi(unord)
-fbopi(lt)
-fbopi(le)
-fbopi(eq)
-fbopi(ge)
-fbopi(gt)
-fbopi(ne)
-fbopi(unlt)
-fbopi(unle)
-fbopi(uneq)
-fbopi(unge)
-fbopi(ungt)
-fbopi(ltgt)
-fbopi(ord)
-fbopi(unord)
-
-static void
-_x87_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0)
-{
- union {
- int32_t i;
- jit_float32_t f;
- } data;
- int32_t reg;
-
- data.f = *i0;
- if (data.f == 0.0 && !(data.i & 0x80000000))
- fldz();
- else if (data.f == 1.0)
- fld1();
- else if (data.f == 3.3219280948873623478703195458468f)
- fldl2t();
- else if (data.f == 1.4426950408889634073599246886656f)
- fldl2e();
- else if (data.f == 3.1415926535897932384626421096161f)
- fldpi();
- else if (data.f == 0.3010299956639811952137387498515f)
- fldlg2();
- else if (data.f == 0.6931471805599453094172323683399f)
- fldln2();
- else {
- if (_jitc->no_data) {
- reg = jit_get_reg(jit_class_gpr);
- movi(rn(reg), data.i);
- stxi_i(CVT_OFFSET, _RBP_REGNO, rn(reg));
- jit_unget_reg(reg);
- x87_ldxi_f(r0, _RBP_REGNO, CVT_OFFSET);
- }
- else
- x87_ldi_f(r0, (jit_word_t)i0);
- return;
- }
- fstpr(r0 + 1);
-}
-
-static void
-_x87_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- fldsm(0, r1, _NOREG, _SCL1);
- fstpr(r0 + 1);
-}
-
-static void
-_x87_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
- int32_t reg;
- if (x87_address_p(i0)) {
- fldsm(i0, _NOREG, _NOREG, _SCL1);
- fstpr(r0 + 1);
- }
- else {
- reg = jit_get_reg(jit_class_gpr);
- movi(rn(reg), i0);
- x87_ldr_f(r0, rn(reg));
- jit_unget_reg(reg);
- }
-}
-
-static void
-_x87_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#if __X64_32
- int32_t reg;
- reg = jit_get_reg(jit_class_gpr);
- addr(rn(reg), r1, r2);
- x87_ldr_f(r0, rn(reg));
- jit_unget_reg(reg);
-#else
- fldsm(0, r1, r2, _SCL1);
- fstpr(r0 + 1);
-#endif
-}
-
-static void
-_x87_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
- int32_t reg;
- if (can_sign_extend_int_p(i0)) {
- fldsm(i0, r1, _NOREG, _SCL1);
- fstpr(r0 + 1);
- }
- else {
- reg = jit_get_reg(jit_class_gpr);
-#if __X64_32
- addi(rn(reg), r1, i0);
- x87_ldr_f(r0, rn(reg));
-#else
- movi(rn(reg), i0);
- x87_ldxr_f(r0, r1, rn(reg));
-#endif
- jit_unget_reg(reg);
- }
-}
-
-static void
-_x87_str_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r1 == _ST0_REGNO)
- fstsm(0, r0, _NOREG, _SCL1);
- else {
- fxchr(r1);
- fstsm(0, r0, _NOREG, _SCL1);
- fxchr(r1);
- }
-}
-
-static void
-_x87_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
- int32_t reg;
- if (!x87_address_p(i0)) {
- reg = jit_get_reg(jit_class_gpr);
- movi(rn(reg), i0);
- x87_str_f(rn(reg), r0);
- jit_unget_reg(reg);
- }
- else if (r0 == _ST0_REGNO)
- fstsm(i0, _NOREG, _NOREG, _SCL1);
- else {
- fxchr(r0);
- fstsm(i0, _NOREG, _NOREG, _SCL1);
- fxchr(r0);
- }
-}
-
-static void
-_x87_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#if __X64_32
- int32_t reg;
- reg = jit_get_reg(jit_class_gpr);
- addr(rn(reg), r0, r1);
- x87_str_f(rn(reg), r2);
- jit_unget_reg(reg);
-#else
- if (r2 == _ST0_REGNO)
- fstsm(0, r0, r1, _SCL1);
- else {
- fxchr(r2);
- fstsm(0, r0, r1, _SCL1);
- fxchr(r2);
- }
-#endif
-}
-
-static void
-_x87_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
- int32_t reg;
- if (!can_sign_extend_int_p(i0)) {
- reg = jit_get_reg(jit_class_gpr);
-#if __X64_32
- addi(rn(reg), r0, i0);
- x87_str_f(rn(reg), r1);
-#else
- movi(rn(reg), i0);
- x87_stxr_f(rn(reg), r0, r1);
-#endif
- jit_unget_reg(reg);
- }
- else if (r1 == _ST0_REGNO)
- fstsm(i0, r0, _NOREG, _SCL1);
- else {
- fxchr(r1);
- fstsm(i0, r0, _NOREG, _SCL1);
- fxchr(r1);
- }
-}
-
-static void
-_x87_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r0 != r1) {
- if (r1 == _ST0)
- fstr(r0);
- else if (r0 == _ST0) {
- fxchr(r1);
- fstr(r1);
- }
- else {
- fldr(r1);
- fstpr(r0 + 1);
- }
- }
-}
-
-static void
-_x87_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0)
-{
- union {
- int32_t ii[2];
- jit_word_t w;
- jit_float64_t d;
- } data;
- int32_t reg;
-
- data.d = *i0;
- if (data.d == 0.0 && !(data.ii[1] & 0x80000000))
- fldz();
- else if (data.d == 1.0)
- fld1();
- else if (data.d == 3.3219280948873623478703195458468)
- fldl2t();
- else if (data.d == 1.4426950408889634073599246886656)
- fldl2e();
- else if (data.d == 3.1415926535897932384626421096161)
- fldpi();
- else if (data.d == 0.3010299956639811952137387498515)
- fldlg2();
- else if (data.d == 0.6931471805599453094172323683399)
- fldln2();
- else {
- if (_jitc->no_data) {
- reg = jit_get_reg(jit_class_gpr);
-#if __X32 || __X64_32
- movi(rn(reg), data.ii[0]);
- stxi_i(CVT_OFFSET, _RBP_REGNO, rn(reg));
- movi(rn(reg), data.ii[1]);
- stxi_i(CVT_OFFSET + 4, _RBP_REGNO, rn(reg));
-#else
- movi(rn(reg), data.w);
- stxi_l(CVT_OFFSET, _RBP_REGNO, rn(reg));
-#endif
- jit_unget_reg(reg);
- x87_ldxi_d(r0, _RBP_REGNO, CVT_OFFSET);
- }
- else
- x87_ldi_d(r0, (jit_word_t)i0);
- return;
- }
- fstpr(r0 + 1);
-}
-
-dopi(lt)
-dopi(le)
-
-static void
-_x87_eqr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- jit_bool_t rc;
- jit_word_t jp_code;
- int32_t reg, f1, f2;
- if (r2 == _ST0_REGNO) f1 = r2, f2 = r1;
- else f1 = r1, f2 = r2;
- if ((rc = reg8_p(r0)))
- reg = r0;
- else {
- reg = _RAX_REGNO;
- movr(r0, reg);
- }
- ixorr(reg, reg);
- if (f1 == _ST0_REGNO)
- fucomir(f2);
- else {
- fldr(f1);
- fucomipr(f2 + 1);
- }
- jpes(0);
- jp_code = _jit->pc.w;
- cc(X86_CC_E, reg);
- patch_rel_char(jp_code, _jit->pc.w);
- if (!rc)
- xchgr(r0, reg);
-}
-
-dopi(eq)
-dopi(ge)
-dopi(gt)
-
-static void
-_x87_ner_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- jit_bool_t rc;
- jit_word_t jp_code;
- int32_t reg, f1, f2;
- if (r2 == _ST0_REGNO) f1 = r2, f2 = r1;
- else f1 = r1, f2 = r2;
- if ((rc = reg8_p(r0)))
- reg = r0;
- else {
- reg = _RAX_REGNO;
- movr(r0, reg);
- }
- imovi(reg, 1);
- if (f1 == _ST0_REGNO)
- fucomir(f2);
- else {
- fldr(f1);
- fucomipr(f2 + 1);
- }
- jpes(0);
- jp_code = _jit->pc.w;
- cc(X86_CC_NE, reg);
- patch_rel_char(jp_code, _jit->pc.w);
- if (!rc)
- xchgr(r0, reg);
-}
-
-dopi(ne)
-dopi(unlt)
-dopi(unle)
-dopi(uneq)
-dopi(unge)
-dopi(ungt)
-
-static void
-_x87_ltgtr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
- if (r1 == r2)
- movi(r0, 1);
- else
- x87cmp2(X86_CC_NE, r0, r1, r2);
-}
-
-dopi(ltgt)
-dopi(ord)
-dopi(unord)
-
-static void
-_x87_ldr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- fldlm(0, r1, _NOREG, _SCL1);
- fstpr(r0 + 1);
-}
-
-static void
-_x87_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
- int32_t reg;
- if (x87_address_p(i0)) {
- fldlm(i0, _NOREG, _NOREG, _SCL1);
- fstpr(r0 + 1);
- }
- else {
- reg = jit_get_reg(jit_class_gpr);
- movi(rn(reg), i0);
- x87_ldr_d(r0, rn(reg));
- jit_unget_reg(reg);
- }
-}
-
-static void
-_x87_ldxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#if __X64_32
- int32_t reg;
- reg = jit_get_reg(jit_class_gpr);
- addr(rn(reg), r1, r2);
- x87_ldr_d(r0, rn(reg));
- jit_unget_reg(reg);
-#else
- fldlm(0, r1, r2, _SCL1);
- fstpr(r0 + 1);
-#endif
-}
-
-static void
-_x87_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
- int32_t reg;
- if (can_sign_extend_int_p(i0)) {
- fldlm(i0, r1, _NOREG, _SCL1);
- fstpr(r0 + 1);
- }
- else {
- reg = jit_get_reg(jit_class_gpr);
-#if __X64_32
- addi(rn(reg), r1, i0);
- x87_ldr_d(r0, rn(reg));
-#else
- movi(rn(reg), i0);
- x87_ldxr_d(r0, r1, rn(reg));
-#endif
- jit_unget_reg(reg);
- }
-}
-
-static void
-_x87_str_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
- if (r1 == _ST0_REGNO)
- fstlm(0, r0, _NOREG, _SCL1);
- else {
- fxchr(r1);
- fstlm(0, r0, _NOREG, _SCL1);
- fxchr(r1);
- }
-}
-
-static void
-_x87_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
- int32_t reg;
- if (!x87_address_p(i0)) {
- reg = jit_get_reg(jit_class_gpr);
- movi(rn(reg), i0);
- x87_str_d(rn(reg), r0);
- jit_unget_reg(reg);
- }
- else if (r0 == _ST0_REGNO)
- fstlm(i0, _NOREG, _NOREG, _SCL1);
- else {
- fxchr(r0);
- fstlm(i0, _NOREG, _NOREG, _SCL1);
- fxchr(r0);
- }
-}
-
-static void
-_x87_stxr_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#if __X64_32
- int32_t reg;
- reg = jit_get_reg(jit_class_gpr);
- addr(rn(reg), r0, r1);
- x87_str_d(rn(reg), r2);
- jit_unget_reg(reg);
-#else
- if (r2 == _ST0_REGNO)
- fstlm(0, r0, r1, _SCL1);
- else {
- fxchr(r2);
- fstlm(0, r0, r1, _SCL1);
- fxchr(r2);
- }
-#endif
-}
-
-static void
-_x87_stxi_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
- int32_t reg;
- if (!can_sign_extend_int_p(i0)) {
- reg = jit_get_reg(jit_class_gpr);
-#if __X64_32
- addi(rn(reg), r0, i0);
- x87_str_d(rn(reg), r1);
-#else
- movi(rn(reg), i0);
- x87_stxr_d(rn(reg), r0, r1);
-#endif
- jit_unget_reg(reg);
- }
- else if (r1 == _ST0_REGNO)
- fstlm(i0, r0, _NOREG, _SCL1);
- else {
- fxchr(r1);
- fstlm(i0, r0, _NOREG, _SCL1);
- fxchr(r1);
- }
-}
-
-dbopi(lt)
-dbopi(le)
-
-static jit_word_t
-_x87_beqr_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
- int32_t f0, f1;
- jit_word_t jp_code;
- if (r1 == _ST0_REGNO) f0 = r1, f1 = r0;
- else f0 = r0, f1 = r1;
- if (f0 == _ST0_REGNO)
- fucomir(f1);
- else {
- fldr(f0);
- fucomipr(f1 + 1);
- }
- jpes(0);
- jp_code = _jit->pc.w;
- jcc(X86_CC_E, i0);
- patch_rel_char(jp_code, _jit->pc.w);
- return (_jit->pc.w);
-}
-dbopi(eq)
-dbopi(ge)
-dbopi(gt)
-
-static jit_word_t
-_x87_bner_d(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
- int32_t f0, f1;
- jit_word_t jp_code;
- jit_word_t jz_code;
- if (r1 == _ST0_REGNO) f0 = r1, f1 = r0;
- else f0 = r0, f1 = r1;
- if (f0 == _ST0_REGNO)
- fucomir(f1);
- else {
- fldr(f0);
- fucomipr(f1 + 1);
- }
- jpes(0);
- jp_code = _jit->pc.w;
- jzs(0);
- jz_code = _jit->pc.w;
- patch_rel_char(jp_code, _jit->pc.w);
- jmpi(i0);
- patch_rel_char(jz_code, _jit->pc.w);
- return (_jit->pc.w);
-}
-dbopi(ne)
-dbopi(unlt)
-dbopi(unle)
-dbopi(uneq)
-dbopi(unge)
-dbopi(ungt)
-dbopi(ltgt)
-dbopi(ord)
-dbopi(unord)
-# undef fopi
-# undef fbopi
-# undef dopi
-# undef dbopi
-# undef fpr_bopi
-# undef fpr_opi
-#endif
diff --git a/lightening/x86.c b/lightening/x86.c
index 79f9824..6e26f9e 100644
--- a/lightening/x86.c
+++ b/lightening/x86.c
@@ -159,7 +159,7 @@ jit_get_cpu(void)
/* i386 or i486 without cpuid */
if ((ac & (1 << 21)) == 0)
/* probably without x87 as well */
- return false;
+ return 0;
#endif
/* query %eax = 1 function */
@@ -192,8 +192,8 @@ jit_get_cpu(void)
jit_cpu.avx = ecx.bits.avx;
/* query %eax = 0x80000001 function */
- __asm__ volatile (
#if __X64
+ __asm__ volatile (
# if __X64_32
"xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1"
# else
- [Guile-commits] 04/20: Use jit_word_t for register-sized values instead of intmax_t, (continued)
- [Guile-commits] 04/20: Use jit_word_t for register-sized values instead of intmax_t, Andy Wingo, 2019/04/28
- [Guile-commits] 19/20: Stack alignment takes saved return address into account, Andy Wingo, 2019/04/28
- [Guile-commits] 20/20: Merge from upstream lightening, Andy Wingo, 2019/04/28
- [Guile-commits] 18/20: Merge branch 'x86-32-ci' into 'master', Andy Wingo, 2019/04/28
- [Guile-commits] 16/20: Mark test files as precious to prevent them from being deleted by make, Andy Wingo, 2019/04/28
- [Guile-commits] 17/20: Add x86-32 tests to default test target, Andy Wingo, 2019/04/28
- [Guile-commits] 15/20: Add test for JIT callee with many args, Andy Wingo, 2019/04/28
- [Guile-commits] 14/20: Add {enter,leave}_jit_abi calls in tests, Andy Wingo, 2019/04/28
- [Guile-commits] 09/20: Remove most __X64_32 code, Andy Wingo, 2019/04/28
- [Guile-commits] 10/20: Add facility to enter and leave JIT ABI, Andy Wingo, 2019/04/28
- [Guile-commits] 03/20: Fix lightening to compile on 32-bit x86,
Andy Wingo <=
- [Guile-commits] 13/20: Fix ABI of arg to extr_d_f test, Andy Wingo, 2019/04/28
- [Guile-commits] 12/20: Fix jit_leave_jit_abi to pop correct registers, Andy Wingo, 2019/04/28
- [Guile-commits] 08/20: Simplify 64/32 concerns in x86-cpu.c, Andy Wingo, 2019/04/28
- [Guile-commits] 07/20: Make jit_cpu private, Andy Wingo, 2019/04/28
- [Guile-commits] 11/20: Small bug fixes for ia32, Andy Wingo, 2019/04/28
- [Guile-commits] 01/20: Inline some internal definitions into backend-specific files, Andy Wingo, 2019/04/28
- [Guile-commits] 02/20: Account for saved return address when locating args, Andy Wingo, 2019/04/28
- [Guile-commits] 05/20: Fix compile warnings for 32-bit tests, Andy Wingo, 2019/04/28
- [Guile-commits] 06/20: Fix 32-bit movi_d, Andy Wingo, 2019/04/28