box-cas!: less JIT-generated work if the boolean result is ignored

This commit is contained in:
Matthew Flatt 2013-09-25 11:45:53 -04:00
parent 3b669c3c82
commit 162edd099d

View File

@ -3650,6 +3650,9 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
#ifdef MZ_USE_FUTURES
if (scheme_is_multithreaded(0)) {
jit_lock_cmpxchgr_l(JIT_R1, JIT_V1); /* implicitly uses JIT_R0 */
if (result_ignored)
reffalse = NULL;
else
reffalse = (JNEm(jit_forward(), 0,0,0), jit_get_ip());
} else
#endif
@ -3665,6 +3668,7 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
scheme_add_branch_false(for_branch, reffalse);
__END_SHORT_JUMPS__(branch_short);
} else {
if (!result_ignored) {
(void)jit_movi_p(dest, scheme_true);
reftrue = jit_jmpi(jit_forward());
@ -3672,6 +3676,9 @@ int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int
(void)jit_movi_p(dest, scheme_false);
mz_patch_branch(reftrue);
} else if (reffalse)
mz_patch_branch(reffalse);
__END_TINY_JUMPS__(1);
}