JIT simplification
Remove unused and confusing attempt to avoid runstack sync.
This commit is contained in:
parent
ab6b58a476
commit
94e5b1723b
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user