enable JIT FP for PPC
svn: r8435
This commit is contained in:
parent
1ac60b40b1
commit
4ab4a9eb5e
|
@ -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);
|
||||
|
|
|
@ -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)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user