diff --git a/src/racket/src/jitcommon.c b/src/racket/src/jitcommon.c index f8367b2968..576078b924 100644 --- a/src/racket/src/jitcommon.c +++ b/src/racket/src/jitcommon.c @@ -151,9 +151,9 @@ static void ts_scheme_on_demand(void) XFORM_SKIP_PROC /* ************************************************************ */ -int scheme_do_generate_common(mz_jit_state *jitter, void *_data) +static int common0(mz_jit_state *jitter, void *_data) { - int in, i, ii, iii; + int in; GC_CAN_IGNORE jit_insn *ref, *ref2; /* *** check_arity_code *** */ @@ -261,6 +261,14 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) __END_SHORT_JUMPS__(1); mz_epilog(JIT_V1); + return 1; +} + +static int common1(mz_jit_state *jitter, void *_data) +{ + int i; + GC_CAN_IGNORE jit_insn *ref, *ref2; + /* *** [bad_][m]{car,cdr,...,{imag,real}_part}_code *** */ /* Argument is in R0 for car/cdr, R2 otherwise */ for (i = 0; i < 12; i++) { @@ -375,6 +383,14 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) scheme_jit_register_sub_func(jitter, code, scheme_false); } + return 1; +} + +static int common1b(mz_jit_state *jitter, void *_data) +{ + int i; + GC_CAN_IGNORE jit_insn *ref, *ref2; + /* *** bad_set_{car,cdr}_code and make_[fl]rectangular_code *** */ /* Bad argument is in R0, other is in R1 */ for (i = 0; i < 4; i++) { @@ -494,6 +510,14 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) CHECK_LIMIT(); scheme_jit_register_sub_func(jitter, sjc.bad_fxvector_length_code, scheme_false); + return 1; +} + +static int common2(mz_jit_state *jitter, void *_data) +{ + int in, i; + GC_CAN_IGNORE jit_insn *ref, *ref2; + /* *** call_original_unary_arith_code *** */ /* R0 is arg, R2 is code pointer, V1 is return address (for false); if for branch, LOCAL2 is target address for true */ @@ -831,6 +855,14 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) CHECK_LIMIT(); } + return 1; +} + +static int common3(mz_jit_state *jitter, void *_data) +{ + int i, ii, iii; + GC_CAN_IGNORE jit_insn *ref; + /* *** {vector,string,bytes}_{ref,set}_[check_index_]code *** */ /* R0 is vector/string/bytes, R1 is index (Scheme number in check-index mode), V1 is vector/string/bytes offset in non-check-index mode (and for @@ -1090,6 +1122,14 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) } } + return 1; +} + +static int common4(mz_jit_state *jitter, void *_data) +{ + int i, ii, iii; + GC_CAN_IGNORE jit_insn *ref; + /* *** {flvector}_{ref,set}_check_index_code *** */ /* Same calling convention as for vector ops. */ for (i = 0; i < 3; i++) { @@ -1458,6 +1498,13 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) } } + return 1; +} + +static int common5(mz_jit_state *jitter, void *_data) +{ + int i, ii; + #ifdef CAN_INLINE_ALLOC /* *** retry_alloc_code[{_keep_r0_r1,_keep_fpr1}] *** */ for (i = 0; i < 3; i++) { @@ -1628,6 +1675,11 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) } } + return 1; +} + +static int common6(mz_jit_state *jitter, void *_data) +{ /* wcm_[nontail_]code */ /* key and value are on runstack */ { @@ -1763,7 +1815,20 @@ int scheme_do_generate_common(mz_jit_state *jitter, void *_data) return 1; } -int scheme_do_generate_more_common(mz_jit_state *jitter, void *_data) +int scheme_do_generate_common(mz_jit_state *jitter, void *_data) +{ + if (!common0(jitter, _data)) return 0; + if (!common1(jitter, _data)) return 0; + if (!common1b(jitter, _data)) return 0; + if (!common2(jitter, _data)) return 0; + if (!common3(jitter, _data)) return 0; + if (!common4(jitter, _data)) return 0; + if (!common5(jitter, _data)) return 0; + if (!common6(jitter, _data)) return 0; + return 1; +} + +static int more_common0(mz_jit_state *jitter, void *_data) { /* *** check_proc_extract_code *** */ /* arguments are on the Scheme stack */ @@ -1963,6 +2028,11 @@ int scheme_do_generate_more_common(mz_jit_state *jitter, void *_data) scheme_jit_register_sub_func(jitter, sjc.module_start_start_code, scheme_eof); } + return 1; +} + +static int more_common1(mz_jit_state *jitter, void *_data) +{ /* apply_to_list_tail_code */ /* argc is in V1 */ { @@ -2396,4 +2466,11 @@ int scheme_do_generate_more_common(mz_jit_state *jitter, void *_data) return 1; } +int scheme_do_generate_more_common(mz_jit_state *jitter, void *_data) +{ + if (!more_common0(jitter, _data)) return 0; + if (!more_common1(jitter, _data)) return 0; + return 1; +} + #endif