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: */
THREAD_LOCAL_DECL(static Scheme_Hash_Table *toplevels_ht);
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);
#define ARBITRARY_USE 0x1
@ -87,6 +85,22 @@ void scheme_init_compenv()
#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 */
/*========================================================================*/

View File

@ -62,6 +62,8 @@ ROSYM static Scheme_Object *quote_symbol;
ROSYM static Scheme_Object *letrec_syntaxes_symbol;
ROSYM static Scheme_Object *values_symbol;
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
/* locals */
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);
@ -131,7 +133,7 @@ static void register_traversers(void);
/* initialization */
/**********************************************************************/
void scheme_init_syntax (Scheme_Env *env)
void scheme_init_compile (Scheme_Env *env)
{
#ifdef MZ_PRECISE_GC
register_traversers();
@ -299,6 +301,11 @@ void scheme_init_syntax (Scheme_Env *env)
scheme_init_marshal(env);
}
void scheme_init_compile_places()
{
REGISTER_SO(quick_stx);
}
Scheme_Object *
scheme_make_compiled_syntax(Scheme_Syntax *proc,
Scheme_Syntax_Expander *eproc)
@ -1449,9 +1456,11 @@ Scheme_Object *scheme_unclose_case_lambda(Scheme_Object *expr, int mode)
if (mode == 2) {
/* sfs */
return (Scheme_Object *)cl2;
#ifdef MZ_USE_JIT
} else if (mode == 1) {
/* JIT */
return scheme_case_lambda_jit((Scheme_Object *)cl2);
#endif
} else
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 *futures_env;
THREAD_LOCAL_DECL(static int builtin_ref_counter);
THREAD_LOCAL_DECL(static int intdef_counter);
/* local functions */
static void make_kernel_env(void);
@ -217,22 +220,6 @@ Scheme_Env *scheme_basic_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 */
Scheme_Env *scheme_engine_instance_init() {
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();
init_toplevel_local_offsets_hashtable_caches();
scheme_init_compenv_places();
#ifdef TIME_STARTUP_PROCESS
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_logger();
scheme_init_eval_places();
scheme_init_compile_places();
scheme_init_regexp_places();
scheme_init_stx_places(initial_main_os_thread);
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_place(env);
/* END PRIMITIVE MODULES */
#if defined(MZ_USE_PLACES)
#if defined(MZ_USE_PLACES) && defined(MZ_USE_JIT)
scheme_jit_fill_threadlocal_table();
#endif
scheme_init_futures_per_place();
@ -578,7 +566,7 @@ static void make_kernel_env(void)
MZTIMEIT(vector, scheme_init_vector(env));
MZTIMEIT(char, scheme_init_char(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(error, scheme_init_error(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 volatile scheme_jit_stack_boundary);
#endif
THREAD_LOCAL_DECL(static Scheme_Object *quick_stx);
THREAD_LOCAL_DECL(int scheme_continuation_application_count);
THREAD_LOCAL_DECL(static int generate_lifts_count);
THREAD_LOCAL_DECL(int scheme_overflow_count);
@ -348,8 +347,6 @@ scheme_init_eval (Scheme_Env *env)
void scheme_init_eval_places()
{
REGISTER_SO(quick_stx);
#ifdef MZ_PRECISE_GC
scheme_prefix_finalize = (Scheme_Prefix *)0x1; /* 0x1 acts as a sentenel */
GC_set_post_propagate_hook(mark_pruned_prefixes);

View File

@ -35,6 +35,8 @@
#ifdef MZ_USE_JIT
static Scheme_Object *do_define_syntaxes_clone(Scheme_Object *expr, int jit);
static Scheme_Object *jit_application(Scheme_Object *o)
{
Scheme_Object *orig, *naya = NULL;
@ -476,44 +478,14 @@ static Scheme_Object *begin0_jit(Scheme_Object *data)
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)
{
return do_define_syntaxes_jit(expr, 1);
return do_define_syntaxes_clone(expr, 1);
}
static Scheme_Object *define_for_syntaxes_jit(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 1);
}
Scheme_Object *scheme_syntaxes_eval_clone(Scheme_Object *expr)
{
return do_define_syntaxes_jit(expr, 0);
return do_define_syntaxes_clone(expr, 1);
}
/*========================================================================*/
@ -642,3 +614,35 @@ Scheme_Object *scheme_jit_expr(Scheme_Object *expr)
}
#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_reduced_proc_struct(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_char(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_thread_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_regexp_places(void);
void scheme_init_stx_places(int initial_main_os_thread);