[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 109/437: more fixes to fp branches
From: |
Andy Wingo |
Subject: |
[Guile-commits] 109/437: more fixes to fp branches |
Date: |
Mon, 2 Jul 2018 05:13:55 -0400 (EDT) |
wingo pushed a commit to branch lightning
in repository guile.
commit 9564132c94f674e555db42ca13e4b08345add484
Author: Paolo Bonzini <address@hidden>
Date: Fri Aug 20 10:08:43 2010 +0200
more fixes to fp branches
2010-08-20 Paolo Bonzini <address@hidden>
* lightning/i386/fp-64.h: Return patch address from jit_bXYr_{f,d}.
Reported by Paulo César Pereira de Andrade.
* lightning/ppc/fp.h: Likewise.
* lightning/sparc/fp.h: Implement FP branches.
---
ChangeLog | 7 ++++++
lightning/i386/fp-64.h | 58 +++++++++++++++++++++++++-------------------------
lightning/ppc/fp.h | 15 ++++++++-----
lightning/sparc/fp.h | 32 ++++++++++++++++++++++++++++
4 files changed, 78 insertions(+), 34 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 8f432ef..3b79a3f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-08-20 Paolo Bonzini <address@hidden>
+
+ * lightning/i386/fp-64.h: Return patch address from jit_bXYr_{f,d}.
+ Reported by Paulo César Pereira de Andrade.
+ * lightning/ppc/fp.h: Likewise.
+ * lightning/sparc/fp.h: Implement FP branches.
+
2010-08-18 Paolo Bonzini <address@hidden>
* lightning/i386/fp-64.h: Fix jp in jit_bner_{f,d}.
diff --git a/lightning/i386/fp-64.h b/lightning/i386/fp-64.h
index 9bb2681..bb4b65f 100644
--- a/lightning/i386/fp-64.h
+++ b/lightning/i386/fp-64.h
@@ -230,35 +230,35 @@ union jit_double_imm {
SBBLir (0, (rd)); \
} while (0)
-#define jit_bltr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAm ((d)))
-#define jit_bler_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAEm ((d)))
-#define jit_beqr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), _OO
(0x7a06), JEm ((d)))
-#define jit_bner_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), _OO
(0x7a02), _OO (0x7405), JMPm (((d)))) /* JP to JMP, JZ past JMP */
-#define jit_bger_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JAEm ((d)))
-#define jit_bgtr_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JAm ((d)))
-#define jit_bunltr_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JNAEm ((d)))
-#define jit_bunler_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JNAm ((d)))
-#define jit_buneqr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JEm ((d)))
-#define jit_bltgtr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNEm ((d)))
-#define jit_bunger_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNAm ((d)))
-#define jit_bungtr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNAEm ((d)))
-#define jit_bordr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNPm ((d)))
-#define jit_bunordr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JPm ((d)))
-
-#define jit_bltr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JAm ((d)))
-#define jit_bler_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JAEm ((d)))
-#define jit_beqr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), _OO
(0x7a06), JEm ((d)))
-#define jit_bner_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), _OO
(0x7a02), _OO (0x7405), JMPm (((d)))) /* JP to JMP, JZ past JMP */
-#define jit_bger_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JAEm ((d)))
-#define jit_bgtr_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JAm ((d)))
-#define jit_bunltr_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JNAEm ((d)))
-#define jit_bunler_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JNAm ((d)))
-#define jit_buneqr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JEm ((d)))
-#define jit_bltgtr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNEm ((d)))
-#define jit_bunger_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNAm ((d)))
-#define jit_bungtr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNAEm ((d)))
-#define jit_bordr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNPm ((d)))
-#define jit_bunordr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JPm ((d)))
+#define jit_bltr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAm ((d)),
_jit.x.pc)
+#define jit_bler_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JAEm ((d)),
_jit.x.pc)
+#define jit_beqr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), _OO
(0x7a06), JEm ((d)), _jit.x.pc)
+#define jit_bner_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), _OO
(0x7a02), _OO (0x7405), JMPm (((d))), _jit.x.pc) /* JP to JMP, JZ past JMP */
+#define jit_bger_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JAEm ((d)),
_jit.x.pc)
+#define jit_bgtr_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JAm ((d)),
_jit.x.pc)
+#define jit_bunltr_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JNAEm ((d)),
_jit.x.pc)
+#define jit_bunler_f(d, s1, s2) (UCOMISSrr ((s2), (s1)), JNAm ((d)),
_jit.x.pc)
+#define jit_buneqr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JEm ((d)),
_jit.x.pc)
+#define jit_bltgtr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNEm ((d)),
_jit.x.pc)
+#define jit_bunger_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNAm ((d)),
_jit.x.pc)
+#define jit_bungtr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNAEm ((d)),
_jit.x.pc)
+#define jit_bordr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JNPm ((d)),
_jit.x.pc)
+#define jit_bunordr_f(d, s1, s2) (UCOMISSrr ((s1), (s2)), JPm ((d)),
_jit.x.pc)
+
+#define jit_bltr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JAm ((d)),
_jit.x.pc)
+#define jit_bler_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JAEm ((d)),
_jit.x.pc)
+#define jit_beqr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), _OO
(0x7a06), JEm ((d)), _jit.x.pc)
+#define jit_bner_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), _OO
(0x7a02), _OO (0x7405), JMPm (((d))), _jit.x.pc) /* JP to JMP, JZ past JMP */
+#define jit_bger_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JAEm ((d)),
_jit.x.pc)
+#define jit_bgtr_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JAm ((d)),
_jit.x.pc)
+#define jit_bunltr_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JNAEm ((d)),
_jit.x.pc, _jit.x.pc)
+#define jit_bunler_d(d, s1, s2) (UCOMISDrr ((s2), (s1)), JNAm ((d)),
_jit.x.pc)
+#define jit_buneqr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JEm ((d)),
_jit.x.pc)
+#define jit_bltgtr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNEm ((d)),
_jit.x.pc)
+#define jit_bunger_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNAm ((d)),
_jit.x.pc)
+#define jit_bungtr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNAEm ((d)),
_jit.x.pc)
+#define jit_bordr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JNPm ((d)),
_jit.x.pc)
+#define jit_bunordr_d(d, s1, s2) (UCOMISDrr ((s1), (s2)), JPm ((d)),
_jit.x.pc)
#define jit_ltr_f(d, s1, s2) (XORLrr ((d), (d)), UCOMISSrr ((s1),
(s2)), SETAr (jit_reg8((d))))
#define jit_ler_f(d, s1, s2) (XORLrr ((d), (d)), UCOMISSrr ((s1),
(s2)), SETAEr (jit_reg8((d))))
diff --git a/lightning/ppc/fp.h b/lightning/ppc/fp.h
index 2841e9a..feed42c 100644
--- a/lightning/ppc/fp.h
+++ b/lightning/ppc/fp.h
@@ -143,24 +143,29 @@
#define jit_fpbr(d, s1, s2, rcbit) ( \
FCMPOrrr(_cr0,(s1),(s2)), \
- BTii ((rcbit), (d)))
+ BTii ((rcbit), (d)), \
+ _jit.x.pc)
#define jit_fpbr_neg(d, s1, s2,rcbit) ( \
FCMPOrrr(_cr0,(s1),(s2)), \
- BFii ((rcbit), (d)))
+ BFii ((rcbit), (d)), \
+ _jit.x.pc)
#define jit_fpbur(d, s1, s2, rcbit) ( \
FCMPUrrr(_cr0,(s1),(s2)), \
- BTii ((rcbit), (d)))
+ BTii ((rcbit), (d)), \
+ _jit.x.pc)
#define jit_fpbur_neg(d, s1, s2,rcbit) ( \
FCMPUrrr(_cr0,(s1),(s2)), \
- BFii ((rcbit), (d)))
+ BFii ((rcbit), (d)), \
+ _jit.x.pc)
#define jit_fpbur_or(d, s1, s2, bit1, bit2) ( \
FCMPUrrr(_cr0,(s1),(s2)), \
CRORiii((bit1), (bit1), (bit2)), \
- BTii ((bit1), (d)))
+ BTii ((bit1), (d)), \
+ _jit.x.pc)
#define jit_bgtr_d(d, s1, s2) jit_fpbr ((d),(s1),(s2),_gt)
#define jit_bger_d(d, s1, s2) jit_fpbr_neg((d),(s1),(s2),_lt)
diff --git a/lightning/sparc/fp.h b/lightning/sparc/fp.h
index 45b6d66..bdfc626 100644
--- a/lightning/sparc/fp.h
+++ b/lightning/sparc/fp.h
@@ -205,6 +205,38 @@
#define jit_unordr_d(d, s1, s2) (FCMPDrr ((s1), (s2)), FBUi(_jit.x.pc
+ 3), MOVir (1, (d)), MOVir (0, (d)))
#define jit_unordr_f(d, s1, s2) (FCMPSrr ((s1), (s2)), FBUi(_jit.x.pc
+ 3), MOVir (1, (d)), MOVir (0, (d)))
+#define jit_branchr_f(s1, s2, jmp) (FCMPSrr(s1, s2), jmp, NOP(),
_jit.x.pc - 1)
+#define jit_branchr_d(s1, s2, jmp) (FCMPDrr(s1, s2), jmp, NOP(),
_jit.x.pc - 1)
+
+#define jit_bltr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBLi((label)))
+#define jit_bltr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBLi((label)))
+#define jit_bler_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBLEi((label)))
+#define jit_bler_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBLEi((label)))
+#define jit_beqr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBEi((label)))
+#define jit_beqr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBEi((label)))
+#define jit_bner_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBNEi((label)))
+#define jit_bner_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBNEi((label)))
+#define jit_bger_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBGEi((label)))
+#define jit_bger_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBGEi((label)))
+#define jit_bgtr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBGi((label)))
+#define jit_bgtr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBGi((label)))
+#define jit_bunltr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBULi((label)))
+#define jit_bunltr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBULi((label)))
+#define jit_bunler_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBULEi((label)))
+#define jit_bunler_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBULEi((label)))
+#define jit_buneqr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBUEi((label)))
+#define jit_buneqr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBUEi((label)))
+#define jit_bltgtr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBLGi((label)))
+#define jit_bltgtr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBLGi((label)))
+#define jit_bunger_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBUGEi((label)))
+#define jit_bunger_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBUGEi((label)))
+#define jit_bungtr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBUGi((label)))
+#define jit_bungtr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBUGi((label)))
+#define jit_bordr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBOi((label)))
+#define jit_bordr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBOi((label)))
+#define jit_bunordr_d(label, s1, s2) jit_branchr_d((s1), (s2),
FBUi((label)))
+#define jit_bunordr_f(label, s1, s2) jit_branchr_f((s1), (s2),
FBUi((label)))
+
#define jit_prepare_f(num) (_jitl.nextarg_put += (num))
#define jit_prepare_d(num) (_jitl.nextarg_put += 2 * (num))
- [Guile-commits] 114/437: Change JIT_REXTMP to not clobber 6th argument., (continued)
- [Guile-commits] 114/437: Change JIT_REXTMP to not clobber 6th argument., Andy Wingo, 2018/07/02
- [Guile-commits] 88/437: move JIT_R1/JIT_R2 to R10/R11 for the x86_64 backend, Andy Wingo, 2018/07/02
- [Guile-commits] 133/437: Correct integer multiplication and add extra test case., Andy Wingo, 2018/07/02
- [Guile-commits] 116/437: Change jit_finish to work with varargs functions in x86_64., Andy Wingo, 2018/07/02
- [Guile-commits] 85/437: add (void) casts for C++ compatibility, Andy Wingo, 2018/07/02
- [Guile-commits] 127/437: Extra cleanup before update to new codebase., Andy Wingo, 2018/07/02
- [Guile-commits] 130/437: Add make rule to build test case dependencies., Andy Wingo, 2018/07/02
- [Guile-commits] 125/437: fix multiplication on x86_64, Andy Wingo, 2018/07/02
- [Guile-commits] 102/437: add ldst test, Andy Wingo, 2018/07/02
- [Guile-commits] 131/437: Add proper make clean rule to the check subdir., Andy Wingo, 2018/07/02
- [Guile-commits] 109/437: more fixes to fp branches,
Andy Wingo <=
- [Guile-commits] 136/437: Update code to build and pass test cases in the arm port., Andy Wingo, 2018/07/02
- [Guile-commits] 124/437: Also reset alloca_slack after jit_prolog in i386., Andy Wingo, 2018/07/02
- [Guile-commits] 154/437: Correct test cases to work with x87 in ix86., Andy Wingo, 2018/07/02
- [Guile-commits] 148/437: Add better ppc support code, but still not functional., Andy Wingo, 2018/07/02
- [Guile-commits] 153/437: Make it clear stdarg like abstraction is not supported., Andy Wingo, 2018/07/02
- [Guile-commits] 76/437: fix several load/store patterns for x86-64., Andy Wingo, 2018/07/02
- [Guile-commits] 81/437: fix stack alignment for Apple 32-bit ABI, Andy Wingo, 2018/07/02
- [Guile-commits] 98/437: always set and replace lightning_frag, Andy Wingo, 2018/07/02
- [Guile-commits] 166/437: Correct extra regressions found by the call.tst test case., Andy Wingo, 2018/07/02
- [Guile-commits] 165/437: Add simple test case to test argument and return values., Andy Wingo, 2018/07/02