JIT simplification

Remove unused and confusing attempt to avoid runstack sync.
This commit is contained in:
Matthew Flatt 2015-08-28 20:24:46 -06:00
parent ab6b58a476
commit 94e5b1723b
3 changed files with 59 additions and 129 deletions

View File

@ -434,68 +434,6 @@ static int is_short(Scheme_Object *obj, int fuel)
}
#endif
static int no_sync_change(Scheme_Object *obj, int fuel)
{
Scheme_Type t;
if (fuel <= 0)
return fuel;
t = SCHEME_TYPE(obj);
switch (t) {
case scheme_application2_type:
{
Scheme_App2_Rec *app = (Scheme_App2_Rec *)obj;
if (SCHEME_PRIMP(app->rator)
&& (SCHEME_PRIM_PROC_OPT_FLAGS(app->rator) & SCHEME_PRIM_IS_UNARY_INLINED)
&& (IS_NAMED_PRIM(app->rator, "car")
|| IS_NAMED_PRIM(app->rator, "cdr")
|| IS_NAMED_PRIM(app->rator, "cadr")
|| IS_NAMED_PRIM(app->rator, "cdar")
|| IS_NAMED_PRIM(app->rator, "caar")
|| IS_NAMED_PRIM(app->rator, "cddr"))) {
return no_sync_change(app->rand, fuel - 1);
}
return 0;
}
break;
case scheme_sequence_type:
{
Scheme_Sequence *seq = (Scheme_Sequence *)obj;
int i;
fuel -= seq->count;
for (i = seq->count; i--; ) {
fuel = no_sync_change(seq->array[i], fuel);
}
return fuel;
}
break;
case scheme_branch_type:
{
Scheme_Branch_Rec *branch = (Scheme_Branch_Rec *)obj;
fuel -= 3;
fuel = no_sync_change(branch->test, fuel);
fuel = no_sync_change(branch->tbranch, fuel);
return no_sync_change(branch->fbranch, fuel);
}
case scheme_local_type:
if (JIT_TYPE_NEEDS_BOXING(SCHEME_GET_LOCAL_TYPE(obj)))
return 0;
else
return fuel - 1;
case scheme_toplevel_type:
case scheme_local_unbox_type:
return fuel - 1;
default:
if (t > _scheme_values_types_)
return fuel - 1;
else
return 0;
}
}
Scheme_Object *scheme_extract_global(Scheme_Object *o, Scheme_Native_Closure *nc, int local_only)
{
/* GLOBAL ASSUMPTION: we assume that globals are the last thing
@ -1677,7 +1615,7 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
mz_jit_unbox_state ubs;
int ubd, save_ubd;
int pushed_marks;
int nsrs, nsrs1, g1, g2, amt, need_sync, flostack, flostack_pos;
int nsrs, nsrs1, g1, g2, amt, flostack, flostack_pos;
int else_is_empty = 0, i, can_chain_branch, chain_true, chain_false, old_self_pos;
#ifdef NEED_LONG_BRANCHES
int then_short_ok, else_short_ok;
@ -1728,14 +1666,6 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
LOG_IT(("if...\n"));
/* Avoid rs_sync if neither branch changes the sync state?
Currently, we force a sync, anyway. */
if ((no_sync_change(branch->tbranch, 32) > 0)
&& (no_sync_change(branch->fbranch, 32) > 0))
need_sync = 0;
else
need_sync = 1;
if (result_ignored
&& (SCHEME_TYPE(branch->fbranch) > _scheme_compiled_values_types_))
else_is_empty = 1;
@ -1746,7 +1676,7 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
scheme_mz_unbox_save(jitter, &ubs);
if (!scheme_generate_inlined_test(jitter, branch->test, then_short_ok, &for_this_branch, need_sync)) {
if (!scheme_generate_inlined_test(jitter, branch->test, then_short_ok, &for_this_branch)) {
CHECK_LIMIT();
generate_non_tail_with_branch_and_values(branch->test, jitter, 0, 1, 0, &for_this_branch, NULL);
CHECK_LIMIT();
@ -1802,7 +1732,7 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
if (!is_tail) {
if (amt)
mz_rs_inc(amt);
if (need_sync) mz_rs_sync();
mz_rs_sync();
}
__START_SHORT_JUMPS__(else_short_ok);
if (else_is_empty)
@ -1821,7 +1751,7 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
}
jitter->need_set_rs = nsrs;
jitter->pushed_marks = pushed_marks;
if (need_sync) mz_rs_sync_0();
mz_rs_sync_0();
if (old_self_pos != jitter->self_pos)
scheme_signal_error("internal error: self position moved across branch");
@ -1871,7 +1801,7 @@ static int generate_branch(Scheme_Object *obj, mz_jit_state *jitter, int is_tail
if (!is_tail) {
if (amt)
mz_rs_inc(amt);
if (need_sync) mz_rs_sync();
mz_rs_sync();
}
} else if (g2 == 2) {
jitter->need_set_rs = 0;
@ -1999,7 +1929,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
if (for_branch) {
mz_rs_sync();
if (scheme_generate_inlined_test(jitter, obj, for_branch->branch_short, for_branch, 1))
if (scheme_generate_inlined_test(jitter, obj, for_branch->branch_short, for_branch))
return 1;
CHECK_LIMIT();
}
@ -2654,7 +2584,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
Scheme_Object *args[2];
int r;
r = scheme_generate_inlined_unary(jitter, app, is_tail, multi_ok, NULL, 1, 0, result_ignored, target);
r = scheme_generate_inlined_unary(jitter, app, is_tail, multi_ok, NULL, 0, result_ignored, target);
CHECK_LIMIT();
if (r) {
if (for_branch) finish_branch(jitter, target, for_branch);
@ -2704,7 +2634,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
return 1;
}
r = scheme_generate_inlined_binary(jitter, app, is_tail, multi_ok, NULL, 1, 0, result_ignored, target);
r = scheme_generate_inlined_binary(jitter, app, is_tail, multi_ok, NULL, 0, result_ignored, target);
CHECK_LIMIT();
if (r) {
if (for_branch) finish_branch(jitter, target, for_branch);

View File

@ -1404,16 +1404,16 @@ int scheme_inlined_unary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_stat
int scheme_inlined_binary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state *jitter);
int scheme_inlined_nary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state *jitter);
int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, int is_tail, int multi_ok,
Branch_Info *for_branch, int branch_short, int need_sync, int result_ignored,
Branch_Info *for_branch, int branch_short, int result_ignored,
int dest);
int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, int is_tail, int multi_ok,
Branch_Info *for_branch, int branch_short, int need_sync, int result_ignored,
Branch_Info *for_branch, int branch_short, int result_ignored,
int dest);
int scheme_generate_inlined_nary(mz_jit_state *jitter, Scheme_App_Rec *app, int is_tail, int multi_ok,
Branch_Info *for_branch, int branch_short, int result_ignored,
int dest);
int scheme_generate_inlined_test(mz_jit_state *jitter, Scheme_Object *obj, int branch_short,
Branch_Info *for_branch, int need_sync);
Branch_Info *for_branch);
int scheme_generate_cons_alloc(mz_jit_state *jitter, int rev, int inline_retry, int known_list, int dest);
int scheme_generate_struct_alloc(mz_jit_state *jitter, int num_args,
int inline_slow, int pop_and_jump,

View File

@ -213,7 +213,7 @@ int scheme_inlined_nary_prim(Scheme_Object *o, Scheme_Object *_app, mz_jit_state
static int generate_inlined_constant_test(mz_jit_state *jitter, Scheme_App2_Rec *app,
Scheme_Object *cnst, Scheme_Object *cnst2,
Branch_Info *for_branch, int branch_short, int need_sync,
Branch_Info *for_branch, int branch_short,
int dest)
/* de-sync'd ok */
{
@ -228,7 +228,7 @@ static int generate_inlined_constant_test(mz_jit_state *jitter, Scheme_App2_Rec
mz_runstack_unskipped(jitter, 1);
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -264,7 +264,7 @@ static int generate_inlined_constant_test(mz_jit_state *jitter, Scheme_App2_Rec
static int generate_inlined_type_test(mz_jit_state *jitter, Scheme_App2_Rec *app,
Scheme_Type lo_ty, Scheme_Type hi_ty, int can_chaperone,
Branch_Info *for_branch, int branch_short, int need_sync,
Branch_Info *for_branch, int branch_short,
int dest)
{
GC_CAN_IGNORE jit_insn *ref, *ref2, *ref3, *ref4, *ref5;
@ -281,7 +281,7 @@ static int generate_inlined_type_test(mz_jit_state *jitter, Scheme_App2_Rec *app
mz_runstack_unskipped(jitter, 1);
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -879,7 +879,7 @@ static int is_cXr_prim(const char *name)
}
static int generate_inlined_constant_varref_test(mz_jit_state *jitter, Scheme_Object *obj,
Branch_Info *for_branch, int branch_short, int need_sync,
Branch_Info *for_branch, int branch_short,
int dest)
{
GC_CAN_IGNORE jit_insn *ref1, *ref2;
@ -904,7 +904,7 @@ static int generate_inlined_constant_varref_test(mz_jit_state *jitter, Scheme_Ob
mz_runstack_unskipped(jitter, 1);
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -941,7 +941,7 @@ static int generate_vector_alloc(mz_jit_state *jitter, Scheme_Object *rator,
int dest);
int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, int is_tail, int multi_ok,
Branch_Info *for_branch, int branch_short, int need_sync, int result_ignored,
Branch_Info *for_branch, int branch_short, int result_ignored,
int dest)
/* de-sync's, unless branch */
{
@ -969,7 +969,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
if (SAME_OBJ(rator, scheme_varref_const_p_proc)
&& SAME_TYPE(SCHEME_TYPE(app->rand), scheme_varref_form_type)) {
generate_inlined_constant_varref_test(jitter, app->rand, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_varref_test(jitter, app->rand, for_branch, branch_short, dest);
return 1;
}
@ -982,85 +982,85 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
scheme_direct_call_count++;
if (IS_NAMED_PRIM(rator, "not")) {
generate_inlined_constant_test(jitter, app, scheme_false, NULL, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_test(jitter, app, scheme_false, NULL, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "null?")) {
generate_inlined_constant_test(jitter, app, scheme_null, NULL, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_test(jitter, app, scheme_null, NULL, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "void?")) {
generate_inlined_constant_test(jitter, app, scheme_void, NULL, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_test(jitter, app, scheme_void, NULL, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "pair?")) {
generate_inlined_type_test(jitter, app, scheme_pair_type, scheme_pair_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_pair_type, scheme_pair_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "mpair?")) {
generate_inlined_type_test(jitter, app, scheme_mutable_pair_type, scheme_mutable_pair_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_mutable_pair_type, scheme_mutable_pair_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "symbol?")) {
generate_inlined_type_test(jitter, app, scheme_symbol_type, scheme_symbol_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_symbol_type, scheme_symbol_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "keyword?")) {
generate_inlined_type_test(jitter, app, scheme_keyword_type, scheme_keyword_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_keyword_type, scheme_keyword_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "syntax?")) {
generate_inlined_type_test(jitter, app, scheme_stx_type, scheme_stx_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_stx_type, scheme_stx_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "char?")) {
generate_inlined_type_test(jitter, app, scheme_char_type, scheme_char_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_char_type, scheme_char_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "boolean?")) {
generate_inlined_constant_test(jitter, app, scheme_false, scheme_true, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_test(jitter, app, scheme_false, scheme_true, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "number?")) {
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_complex_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_complex_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "real?")) {
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_double_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_double_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "exact-integer?")) {
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_bignum_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_bignum_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "fixnum?")) {
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_integer_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_integer_type, scheme_integer_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "inexact-real?")) {
generate_inlined_type_test(jitter, app, SCHEME_FLOAT_TYPE, scheme_double_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, SCHEME_FLOAT_TYPE, scheme_double_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "flonum?")) {
generate_inlined_type_test(jitter, app, scheme_double_type, scheme_double_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_double_type, scheme_double_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "extflonum?")) {
generate_inlined_type_test(jitter, app, scheme_long_double_type, scheme_long_double_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_long_double_type, scheme_long_double_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "single-flonum?")) {
generate_inlined_type_test(jitter, app, SCHEME_FLOAT_TYPE, SCHEME_FLOAT_TYPE, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, SCHEME_FLOAT_TYPE, SCHEME_FLOAT_TYPE, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "procedure?")) {
generate_inlined_type_test(jitter, app, scheme_prim_type, scheme_proc_chaperone_type, 1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_prim_type, scheme_proc_chaperone_type, 1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "chaperone?")) {
generate_inlined_type_test(jitter, app, scheme_proc_chaperone_type, scheme_chaperone_type, -1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_proc_chaperone_type, scheme_chaperone_type, -1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "impersonator?")) {
generate_inlined_type_test(jitter, app, scheme_proc_chaperone_type, scheme_chaperone_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_proc_chaperone_type, scheme_chaperone_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "vector?")) {
generate_inlined_type_test(jitter, app, scheme_vector_type, scheme_vector_type, 1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_vector_type, scheme_vector_type, 1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "box?")) {
generate_inlined_type_test(jitter, app, scheme_box_type, scheme_box_type, 1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_box_type, scheme_box_type, 1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "string?")) {
generate_inlined_type_test(jitter, app, scheme_char_string_type, scheme_char_string_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_char_string_type, scheme_char_string_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "bytes?")) {
generate_inlined_type_test(jitter, app, scheme_byte_string_type, scheme_byte_string_type, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_byte_string_type, scheme_byte_string_type, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "path?")) {
generate_inlined_type_test(jitter, app, SCHEME_PLATFORM_PATH_KIND, SCHEME_PLATFORM_PATH_KIND, 0, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, SCHEME_PLATFORM_PATH_KIND, SCHEME_PLATFORM_PATH_KIND, 0, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "eof-object?")) {
generate_inlined_constant_test(jitter, app, scheme_eof, NULL, for_branch, branch_short, need_sync, dest);
generate_inlined_constant_test(jitter, app, scheme_eof, NULL, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "zero?")) {
scheme_generate_arith(jitter, rator, app->rand, NULL, 1, 0, CMP_EQUAL, 0, for_branch, branch_short, 0, 0, NULL, dest);
@ -1087,7 +1087,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
mz_runstack_unskipped(jitter, 1);
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -1154,7 +1154,7 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
mz_runstack_unskipped(jitter, 1);
if (need_sync) mz_rs_sync();
mz_rs_sync();
if (for_branch) {
scheme_prepare_branch_jump(jitter, for_branch);
@ -2010,10 +2010,10 @@ int scheme_generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in
return 1;
} else if (IS_NAMED_PRIM(rator, "future?")) {
generate_inlined_type_test(jitter, app, scheme_future_type, scheme_future_type, 1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_future_type, scheme_future_type, 1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "fsemaphore?")) {
generate_inlined_type_test(jitter, app, scheme_fsemaphore_type, scheme_fsemaphore_type, 1, for_branch, branch_short, need_sync, dest);
generate_inlined_type_test(jitter, app, scheme_fsemaphore_type, scheme_fsemaphore_type, 1, for_branch, branch_short, dest);
return 1;
} else if (IS_NAMED_PRIM(rator, "future")
|| IS_NAMED_PRIM(rator, "touch")
@ -2473,7 +2473,7 @@ static int allocate_rectangular(mz_jit_state *jitter, int dest)
}
int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, int is_tail, int multi_ok,
Branch_Info *for_branch, int branch_short, int need_sync, int result_ignored,
Branch_Info *for_branch, int branch_short, int result_ignored,
int dest)
/* de-sync's; for branch, sync'd before */
{
@ -2481,7 +2481,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
if (SCHEME_PRIMP(rator) && IS_NAMED_PRIM(rator, "ptr-ref")) {
Scheme_App_Rec *app2;
if (need_sync) mz_rs_sync();
mz_rs_sync();
app2 = scheme_malloc_application(3);
app2->args[0] = app->rator;
app2->args[1] = app->rand1;
@ -2532,7 +2532,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
scheme_generate_non_tail(a2, jitter, 0, 1, 0);
CHECK_LIMIT();
if (need_sync) mz_rs_sync();
mz_rs_sync();
mz_runstack_unskipped(jitter, 2);
@ -2579,7 +2579,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
scheme_generate_two_args(a2, a1, jitter, 0, 2);
CHECK_LIMIT();
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -2654,7 +2654,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
scheme_generate_two_args(app->rand1, app->rand2, jitter, 0, 2);
CHECK_LIMIT();
if (need_sync) mz_rs_sync();
mz_rs_sync();
__START_SHORT_JUMPS__(branch_short);
@ -2762,7 +2762,7 @@ int scheme_generate_inlined_binary(mz_jit_state *jitter, Scheme_App3_Rec *app, i
scheme_generate_two_args(app->rand1, app->rand2, jitter, 1, 2);
CHECK_LIMIT();
if (need_sync) mz_rs_sync();
mz_rs_sync();
if (for_branch) {
__START_SHORT_JUMPS__(branch_short);
@ -5062,16 +5062,16 @@ static int generate_vector_alloc(mz_jit_state *jitter, Scheme_Object *rator,
}
int scheme_generate_inlined_test(mz_jit_state *jitter, Scheme_Object *obj, int branch_short,
Branch_Info *for_branch, int need_sync)
Branch_Info *for_branch)
/* de-sync'd ok; syncs before jump */
{
switch (SCHEME_TYPE(obj)) {
case scheme_application_type:
return scheme_generate_inlined_nary(jitter, (Scheme_App_Rec *)obj, 0, 0, for_branch, branch_short, 0, JIT_R0);
case scheme_application2_type:
return scheme_generate_inlined_unary(jitter, (Scheme_App2_Rec *)obj, 0, 0, for_branch, branch_short, need_sync, 0, JIT_R0);
return scheme_generate_inlined_unary(jitter, (Scheme_App2_Rec *)obj, 0, 0, for_branch, branch_short, 0, JIT_R0);
case scheme_application3_type:
return scheme_generate_inlined_binary(jitter, (Scheme_App3_Rec *)obj, 0, 0, for_branch, branch_short, need_sync, 0, JIT_R0);
return scheme_generate_inlined_binary(jitter, (Scheme_App3_Rec *)obj, 0, 0, for_branch, branch_short, 0, JIT_R0);
}
return 0;