fixes for non-JIT build

This commit is contained in:
Matthew Flatt 2011-05-07 21:43:09 -06:00
parent 09046b46dd
commit 695039626c
6 changed files with 72 additions and 57 deletions

View File

@ -36,8 +36,6 @@ READ_ONLY static Scheme_Object *unshadowable_symbol;
/* If locked, these are probably sharable: */ /* If locked, these are probably sharable: */
THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht); THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht);
THREAD_LOCAL_DECL(static Scheme_Hash_Table *locals_ht[2]); THREAD_LOCAL_DECL(static Scheme_Hash_Table *locals_ht[2]);
THREAD_LOCAL_DECL(static int intdef_counter);
THREAD_LOCAL_DECL(static int builtin_ref_counter);
THREAD_LOCAL_DECL(static int env_uid_counter); THREAD_LOCAL_DECL(static int env_uid_counter);
#define ARBITRARY_USE 0x1 #define ARBITRARY_USE 0x1
@ -87,6 +85,22 @@ void scheme_init_compenv()
#endif #endif
} }
void scheme_init_compenv_places(void)
{
REGISTER_SO(toplevels_ht);
REGISTER_SO(locals_ht[0]);
REGISTER_SO(locals_ht[1]);
{
Scheme_Hash_Table *ht;
toplevels_ht = scheme_make_hash_table_equal();
ht = scheme_make_hash_table(SCHEME_hash_ptr);
locals_ht[0] = ht;
ht = scheme_make_hash_table(SCHEME_hash_ptr);
locals_ht[1] = ht;
}
}
/*========================================================================*/ /*========================================================================*/
/* compilation info management */ /* compilation info management */
/*========================================================================*/ /*========================================================================*/

View File

@ -62,6 +62,8 @@ ROSYM static Scheme_Object *quote_symbol;
ROSYM static Scheme_Object *letrec_syntaxes_symbol; ROSYM static Scheme_Object *letrec_syntaxes_symbol;
ROSYM static Scheme_Object *values_symbol; ROSYM static Scheme_Object *values_symbol;
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
/* locals */ /* locals */
static Scheme_Object *lambda_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec); static Scheme_Object *lambda_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec);
static Scheme_Object *lambda_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec); static Scheme_Object *lambda_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec);
@ -131,7 +133,7 @@ static void register_traversers(void);
/* initialization */ /* initialization */
/**********************************************************************/ /**********************************************************************/
void scheme_init_syntax (Scheme_Env *env) void scheme_init_compile (Scheme_Env *env)
{ {
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
register_traversers(); register_traversers();
@ -299,6 +301,11 @@ void scheme_init_syntax (Scheme_Env *env)
scheme_init_marshal(env); scheme_init_marshal(env);
} }
void scheme_init_compile_places()
{
REGISTER_SO(quick_stx);
}
Scheme_Object * Scheme_Object *
scheme_make_compiled_syntax(Scheme_Syntax *proc, scheme_make_compiled_syntax(Scheme_Syntax *proc,
Scheme_Syntax_Expander *eproc) Scheme_Syntax_Expander *eproc)
@ -1449,9 +1456,11 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode)
if (mode == 2) { if (mode == 2) {
/* sfs */ /* sfs */
return (Scheme_Object *)cl2; return (Scheme_Object *)cl2;
#ifdef MZ_USE_JIT
} else if (mode == 1) { } else if (mode == 1) {
/* JIT */ /* JIT */
return scheme_case_lambda_jit((Scheme_Object *)cl2); return scheme_case_lambda_jit((Scheme_Object *)cl2);
#endif
} else } else
return (Scheme_Object *)cl2; return (Scheme_Object *)cl2;
} }

View File

@ -53,6 +53,9 @@ READ_ONLY static Scheme_Env *unsafe_env;
READ_ONLY static Scheme_Env *flfxnum_env; READ_ONLY static Scheme_Env *flfxnum_env;
READ_ONLY static Scheme_Env *futures_env; READ_ONLY static Scheme_Env *futures_env;
THREAD_LOCAL_DECL(static int builtin_ref_counter);
THREAD_LOCAL_DECL(static int intdef_counter);
/* local functions */ /* local functions */
static void make_kernel_env(void); static void make_kernel_env(void);
@ -217,22 +220,6 @@ Scheme_Env *scheme_basic_env()
return env; return env;
} }
static void init_toplevel_local_offsets_hashtable_caches()
{
REGISTER_SO(toplevels_ht);
REGISTER_SO(locals_ht[0]);
REGISTER_SO(locals_ht[1]);
{
Scheme_Hash_Table *ht;
toplevels_ht = scheme_make_hash_table_equal();
ht = scheme_make_hash_table(SCHEME_hash_ptr);
locals_ht[0] = ht;
ht = scheme_make_hash_table(SCHEME_hash_ptr);
locals_ht[1] = ht;
}
}
/* READ-ONLY GLOBAL structures ONE-TIME initialization */ /* READ-ONLY GLOBAL structures ONE-TIME initialization */
Scheme_Env *scheme_engine_instance_init() { Scheme_Env *scheme_engine_instance_init() {
Scheme_Env *env; Scheme_Env *env;
@ -414,7 +401,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
scheme_init_thread_lwc(); scheme_init_thread_lwc();
init_toplevel_local_offsets_hashtable_caches(); scheme_init_compenv_places();
#ifdef TIME_STARTUP_PROCESS #ifdef TIME_STARTUP_PROCESS
printf("pre-process @ %" PRIdPTR "\n", scheme_get_process_milliseconds()); printf("pre-process @ %" PRIdPTR "\n", scheme_get_process_milliseconds());
@ -450,6 +437,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
scheme_init_string_places(); scheme_init_string_places();
scheme_init_logger(); scheme_init_logger();
scheme_init_eval_places(); scheme_init_eval_places();
scheme_init_compile_places();
scheme_init_regexp_places(); scheme_init_regexp_places();
scheme_init_stx_places(initial_main_os_thread); scheme_init_stx_places(initial_main_os_thread);
scheme_init_sema_places(); scheme_init_sema_places();
@ -482,7 +470,7 @@ static Scheme_Env *place_instance_init(void *stack_base, int initial_main_os_thr
scheme_init_expand_observe(env); scheme_init_expand_observe(env);
scheme_init_place(env); scheme_init_place(env);
/* END PRIMITIVE MODULES */ /* END PRIMITIVE MODULES */
#if defined(MZ_USE_PLACES) #if defined(MZ_USE_PLACES) && defined(MZ_USE_JIT)
scheme_jit_fill_threadlocal_table(); scheme_jit_fill_threadlocal_table();
#endif #endif
scheme_init_futures_per_place(); scheme_init_futures_per_place();
@ -578,7 +566,7 @@ static void make_kernel_env(void)
MZTIMEIT(vector, scheme_init_vector(env)); MZTIMEIT(vector, scheme_init_vector(env));
MZTIMEIT(char, scheme_init_char(env)); MZTIMEIT(char, scheme_init_char(env));
MZTIMEIT(bool, scheme_init_bool(env)); MZTIMEIT(bool, scheme_init_bool(env));
MZTIMEIT(syntax, scheme_init_syntax(env)); MZTIMEIT(syntax, scheme_init_compile(env));
MZTIMEIT(eval, scheme_init_eval(env)); MZTIMEIT(eval, scheme_init_eval(env));
MZTIMEIT(error, scheme_init_error(env)); MZTIMEIT(error, scheme_init_error(env));
MZTIMEIT(struct, scheme_init_struct(env)); MZTIMEIT(struct, scheme_init_struct(env));

View File

@ -168,7 +168,6 @@ THREAD_LOCAL_DECL(volatile int scheme_fuel_counter);
THREAD_LOCAL_DECL(uintptr_t scheme_stack_boundary); THREAD_LOCAL_DECL(uintptr_t scheme_stack_boundary);
THREAD_LOCAL_DECL(uintptr_t volatile scheme_jit_stack_boundary); THREAD_LOCAL_DECL(uintptr_t volatile scheme_jit_stack_boundary);
#endif #endif
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
THREAD_LOCAL_DECL(int scheme_continuation_application_count); THREAD_LOCAL_DECL(int scheme_continuation_application_count);
THREAD_LOCAL_DECL(static int generate_lifts_count); THREAD_LOCAL_DECL(static int generate_lifts_count);
THREAD_LOCAL_DECL(int scheme_overflow_count); THREAD_LOCAL_DECL(int scheme_overflow_count);
@ -348,8 +347,6 @@ scheme_init_eval (Scheme_Env *env)
void scheme_init_eval_places() void scheme_init_eval_places()
{ {
REGISTER_SO(quick_stx);
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */ scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */
GC_set_post_propagate_hook(mark_pruned_prefixes); GC_set_post_propagate_hook(mark_pruned_prefixes);

View File

@ -35,6 +35,8 @@
#ifdef MZ_USE_JIT #ifdef MZ_USE_JIT
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit);
static Scheme_Object *jit_application(Scheme_Object *o) static Scheme_Object *jit_application(Scheme_Object *o)
{ {
Scheme_Object *orig, *naya = NULL; Scheme_Object *orig, *naya = NULL;
@ -476,44 +478,14 @@ static Scheme_Object *begin0_jit(Scheme_Object *data)
return (Scheme_Object *)seq2; return (Scheme_Object *)seq2;
} }
static Scheme_Object *do_define_syntaxes_jit(Scheme_Object *expr, int jit)
{
Resolve_Prefix *rp, *orig_rp;
Scheme_Object *naya, *rhs;
rhs = SCHEME_VEC_ELS(expr)[0];
if (jit)
naya = scheme_jit_expr(rhs);
else
naya = rhs;
orig_rp = (Resolve_Prefix *)SCHEME_VEC_ELS(expr)[1];
rp = scheme_prefix_eval_clone(orig_rp);
if (SAME_OBJ(naya, rhs)
&& SAME_OBJ(orig_rp, rp))
return expr;
else {
expr = scheme_clone_vector(expr, 0, 1);
SCHEME_VEC_ELS(expr)[0] = naya;
SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp;
return expr;
}
}
static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr) static Scheme_Object *define_syntaxes_jit(Scheme_Object *expr)
{ {
return do_define_syntaxes_jit(expr, 1); return do_define_syntaxes_clone(expr, 1);
} }
static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr) static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr)
{ {
return do_define_syntaxes_jit(expr, 1); return do_define_syntaxes_clone(expr, 1);
}
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 0);
} }
/*========================================================================*/ /*========================================================================*/
@ -642,3 +614,35 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
} }
#endif #endif
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit)
{
Resolve_Prefix *rp, *orig_rp;
Scheme_Object *naya, *rhs;
rhs = SCHEME_VEC_ELS(expr)[0];
#ifdef MZ_USE_JIT
if (jit)
naya = scheme_jit_expr(rhs);
else
#endif
naya = rhs;
orig_rp = (Resolve_Prefix *)SCHEME_VEC_ELS(expr)[1];
rp = scheme_prefix_eval_clone(orig_rp);
if (SAME_OBJ(naya, rhs)
&& SAME_OBJ(orig_rp, rp))
return expr;
else {
expr = scheme_clone_vector(expr, 0, 1);
SCHEME_VEC_ELS(expr)[0] = naya;
SCHEME_VEC_ELS(expr)[1] = (Scheme_Object *)rp;
return expr;
}
}
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
{
return do_define_syntaxes_clone(expr, 0);
}

View File

@ -226,6 +226,7 @@ void scheme_init_promise(Scheme_Env *env);
void scheme_init_struct(Scheme_Env *env); void scheme_init_struct(Scheme_Env *env);
void scheme_init_reduced_proc_struct(Scheme_Env *env); void scheme_init_reduced_proc_struct(Scheme_Env *env);
void scheme_init_fun(Scheme_Env *env); void scheme_init_fun(Scheme_Env *env);
void scheme_init_compile(Scheme_Env *env);
void scheme_init_symbol(Scheme_Env *env); void scheme_init_symbol(Scheme_Env *env);
void scheme_init_char(Scheme_Env *env); void scheme_init_char(Scheme_Env *env);
void scheme_init_bool(Scheme_Env *env); void scheme_init_bool(Scheme_Env *env);
@ -267,6 +268,8 @@ void scheme_init_print_buffers_places(void);
void scheme_init_string_places(void); void scheme_init_string_places(void);
void scheme_init_thread_places(void); void scheme_init_thread_places(void);
void scheme_init_eval_places(void); void scheme_init_eval_places(void);
void scheme_init_compile_places(void);
void scheme_init_compenv_places(void);
void scheme_init_port_places(void); void scheme_init_port_places(void);
void scheme_init_regexp_places(void); void scheme_init_regexp_places(void);
void scheme_init_stx_places(int initial_main_os_thread); void scheme_init_stx_places(int initial_main_os_thread);