mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-05 11:40:20 +02:00
more fixes to fp branches
2010-08-20 Paolo Bonzini <bonzini@gnu.org> * 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.
This commit is contained in:
parent
688e75a092
commit
9564132c94
4 changed files with 77 additions and 33 deletions
|
@ -1,3 +1,10 @@
|
|||
2010-08-20 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
* 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 <bonzini@gnu.org>
|
||||
|
||||
* lightning/i386/fp-64.h: Fix jp in jit_bner_{f,d}.
|
||||
|
|
|
@ -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_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)))
|
||||
#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_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))))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue