>From fe88a206daac745090b222b61070883a334f43f1 Mon Sep 17 00:00:00 2001 From: Paulo Cesar Pereira de Andrade Date: Wed, 18 Aug 2010 16:04:39 -0300 Subject: [PATCH] x86_64: return patch address in float branch test. --- lightning/i386/fp-64.h | 60 ++++++++++++++++++++++++----------------------- 1 files changed, 31 insertions(+), 29 deletions(-) diff --git a/lightning/i386/fp-64.h b/lightning/i386/fp-64.h index 67fdf8c..f7549d1 100644 --- a/lightning/i386/fp-64.h +++ b/lightning/i386/fp-64.h @@ -230,35 +230,37 @@ 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 (0x7a03), _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 (0x7a03), _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_fp_btest(compare) ((compare), _jit.x.pc) + +#define jit_bltr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JAm ((d)))) +#define jit_bler_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JAEm ((d)))) +#define jit_beqr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), _OO (0x7a06), JEm ((d)))) +#define jit_bner_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), _OO (0x7a03), _OO (0x7405), JMPm (((d))))) /* JP to JMP, JZ past JMP */ +#define jit_bger_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s2), (s1)), JAEm ((d)))) +#define jit_bgtr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s2), (s1)), JAm ((d)))) +#define jit_bunltr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s2), (s1)), JNAEm ((d)))) +#define jit_bunler_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s2), (s1)), JNAm ((d)))) +#define jit_buneqr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JEm ((d)))) +#define jit_bltgtr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JNEm ((d)))) +#define jit_bunger_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JNAm ((d)))) +#define jit_bungtr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JNAEm ((d)))) +#define jit_bordr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JNPm ((d)))) +#define jit_bunordr_f(d, s1, s2) jit_fp_btest((UCOMISSrr ((s1), (s2)), JPm ((d)))) + +#define jit_bltr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JAm ((d)))) +#define jit_bler_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JAEm ((d)))) +#define jit_beqr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), _OO (0x7a06), JEm ((d)))) +#define jit_bner_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), _OO (0x7a03), _OO (0x7405), JMPm (((d))))) /* JP to JMP, JZ past JMP */ +#define jit_bger_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s2), (s1)), JAEm ((d)))) +#define jit_bgtr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s2), (s1)), JAm ((d)))) +#define jit_bunltr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s2), (s1)), JNAEm ((d)))) +#define jit_bunler_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s2), (s1)), JNAm ((d)))) +#define jit_buneqr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JEm ((d)))) +#define jit_bltgtr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JNEm ((d)))) +#define jit_bunger_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JNAm ((d)))) +#define jit_bungtr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JNAEm ((d)))) +#define jit_bordr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JNPm ((d)))) +#define jit_bunordr_d(d, s1, s2) jit_fp_btest((UCOMISDrr ((s1), (s2)), JPm ((d)))) #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)))) -- 1.7.2.1