enable JIT FP for PPC

svn: r8435
This commit is contained in:
Matthew Flatt 2008-01-27 18:03:10 +00:00
parent 1ac60b40b1
commit 4ab4a9eb5e
2 changed files with 31 additions and 18 deletions

View File

@ -59,7 +59,7 @@
END_XFORM_ARITH;
#endif
#ifdef MZ_USE_JIT_I386
#if defined(MZ_USE_JIT_I386) || defined(MZ_USE_JIT_PPC)
# define JIT_USE_FP_OPS
#endif
@ -2478,7 +2478,7 @@ static int can_fast_double(int arith, int cmp, int two_args)
#define jit_bltr_d_fppop(d, s1, s2) jit_bltr_d(d, s1, s2)
#define jit_bantiltr_d_fppop(d, s1, s2) jit_bantiltr_d(d, s1, s2)
#define jit_beqr_d_fppop(d, s1, s2) jit_beqr_d(d, s1, s2)
#define jit_bner_d_fppop(d, s1, s2) jit_bner_d(d, s1, s2)
#define jit_bantieqr_d_fppop(d, s1, s2) jit_bantieqr_d(d, s1, s2)
#endif
static int generate_double_arith(mz_jit_state *jitter, int arith, int cmp, int reversed, int two_args, int second_const,
@ -2507,7 +2507,7 @@ static int generate_double_arith(mz_jit_state *jitter, int arith, int cmp, int r
if (!two_args && !second_const && ((arith == 2) || ((arith == -2) && reversed))) {
/* Special case: multiplication by exact 0 */
jit_movi_p(JIT_R0, scheme_make_integer(0));
(void)jit_movi_p(JIT_R0, scheme_make_integer(0));
} else {
__END_SHORT_JUMPS__(1);
@ -2977,11 +2977,11 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj
if (v == 1) {
/* R0 already is the answer */
} else if (v == 0) {
jit_movi_p(JIT_R0, scheme_make_integer(0));
(void)jit_movi_p(JIT_R0, scheme_make_integer(0));
} else {
if (has_fixnum_fast) {
/* No general fast path for fixnum multiplication, yet */
jit_movi_p(JIT_R1, scheme_make_integer(v));
(void)jit_movi_p(JIT_R1, scheme_make_integer(v));
(void)jit_jmpi(refslow);
}
}
@ -2991,7 +2991,7 @@ static int generate_arith(mz_jit_state *jitter, Scheme_Object *rator, Scheme_Obj
} else {
if (has_fixnum_fast) {
/* No general fast path for fixnum division, yet */
jit_movi_p(JIT_R1, scheme_make_integer(v));
(void)jit_movi_p(JIT_R1, scheme_make_integer(v));
(void)jit_jmpi(refslow);
}
}
@ -3375,7 +3375,7 @@ static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
ref3 = jit_bmci_ul(jit_forward(), JIT_R2, 0x1);
__END_SHORT_JUMPS__(branch_short);
/* Ok bignum. Instead of jumping, install the fixnum 1: */
jit_movi_p(JIT_R0, scheme_make_integer(1));
(void)jit_movi_p(JIT_R0, scheme_make_integer(1));
__START_SHORT_JUMPS__(1);
mz_patch_branch(ref);

View File

@ -46,8 +46,10 @@
#define jit_addr_d(rd,s1,s2) FADDDrrr((rd),(s1),(s2))
#define jit_subr_d(rd,s1,s2) FSUBDrrr((rd),(s1),(s2))
#define jit_subrr_d(rd,s1,s2) FSUBDrrr((rd),(s2),(s1))
#define jit_mulr_d(rd,s1,s2) FMULDrrr((rd),(s1),(s2))
#define jit_divr_d(rd,s1,s2) FDIVDrrr((rd),(s1),(s2))
#define jit_divrr_d(rd,s1,s2) FDIVDrrr((rd),(s2),(s1))
#define jit_addr_f(rd,s1,s2) FADDSrrr((rd),(s1),(s2))
#define jit_subr_f(rd,s1,s2) FSUBSrrr((rd),(s1),(s2))
@ -143,31 +145,36 @@
#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)
#define jit_bltr_d(d, s1, s2) jit_fpbr ((d),(s1),(s2),_lt)
#define jit_bler_d(d, s1, s2) jit_fpbr_neg((d),(s1),(s2),_gt)
#define jit_beqr_d(d, s1, s2) jit_fpbr ((d),(s1),(s2),_eq)
#define jit_bner_d(d, s1, s2) jit_fpbr_neg((d),(s1),(s2),_eq)
#define jit_fpbur_or_neg(d, s1, s2, bit1, bit2) ( \
FCMPUrrr(_cr0,(s1),(s2)), \
CRORiii((bit1), (bit1), (bit2)), \
BFii ((bit1), (d)), _jit.x.pc)
#define jit_bgtr_d(d, s1, s2) jit_fpbur ((d),(s1),(s2),_gt)
#define jit_bger_d(d, s1, s2) jit_fpbur_or((d),(s1),(s2),_gt, _eq)
#define jit_bltr_d(d, s1, s2) jit_fpbur ((d),(s1),(s2),_lt)
#define jit_bler_d(d, s1, s2) jit_fpbur_or((d),(s1),(s2),_lt, _eq)
#define jit_beqr_d(d, s1, s2) jit_fpbur ((d),(s1),(s2),_eq)
#define jit_bner_d(d, s1, s2) jit_fpbur_neg((d),(s1),(s2),_eq)
#define jit_bunordr_d(d, s1, s2) jit_fpbur ((d),(s1),(s2),_un)
#define jit_bordr_d(d, s1, s2) jit_fpbur_neg((d),(s1),(s2),_un)
#define jit_bunler_d(d, s1, s2) jit_fpbur_neg ((d), (s1), (s2), _gt)
@ -177,6 +184,12 @@
#define jit_bltgtr_d(d, s1, s2) jit_fpbur_or ((d), (s1), (s2), _gt, _lt)
#define jit_buneqr_d(d, s1, s2) jit_fpbur_or ((d), (s1), (s2), _un, _eq)
#define jit_bantiltr_d(d, s1, s2) jit_fpbur_neg ((d),(s1),(s2),_lt)
#define jit_bantiler_d(d, s1, s2) jit_fpbur_or_neg ((d),(s1),(s2),_lt, _eq)
#define jit_bantieqr_d(d, s1, s2) jit_fpbur_neg ((d),(s1),(s2),_eq)
#define jit_bantiger_d(d, s1, s2) jit_fpbur_or_neg ((d),(s1),(s2),_gt, _eq)
#define jit_bantigtr_d(d, s1, s2) jit_fpbur_neg ((d),(s1),(s2),_gt)
#define jit_getarg_f(rd, ofs) jit_movr_f((rd),(ofs))
#define jit_getarg_d(rd, ofs) jit_movr_d((rd),(ofs))
#define jit_pusharg_d(rs) (_jitl.nextarg_putd--,jit_movr_d((_jitl.nextarg_putf+_jitl.nextarg_putd+1), (rs)))