fix use of multiple values in futures
svn: r16907
This commit is contained in:
parent
ec1cfb5a12
commit
2781f1a4b8
|
@ -84,6 +84,7 @@ static void *g_signal_handle = NULL;
|
|||
static struct NewGC *g_shared_GC;
|
||||
static future_t *g_future_queue = NULL;
|
||||
static future_t *g_future_waiting_atomic = NULL;
|
||||
static Scheme_Object *g_thread_skeleton;
|
||||
int g_next_futureid = 0;
|
||||
pthread_t g_rt_threadid = 0;
|
||||
|
||||
|
@ -104,6 +105,7 @@ static future_t **g_current_ft;
|
|||
static Scheme_Object ***g_scheme_current_runstack;
|
||||
static Scheme_Object ***g_scheme_current_runstack_start;
|
||||
static void **g_jit_future_storage;
|
||||
static Scheme_Object **g_current_thread;
|
||||
static int *gc_counter_ptr;
|
||||
THREAD_LOCAL_DECL(static int worker_gc_counter);
|
||||
|
||||
|
@ -340,6 +342,11 @@ void futures_init(void)
|
|||
are all place-specific. */
|
||||
gc_counter_ptr = &scheme_did_gc_count;
|
||||
g_shared_GC = GC;
|
||||
|
||||
/* Make enough of a thread record to deal with multiple values. */
|
||||
g_thread_skeleton = (Scheme_Object *)MALLOC_ONE_TAGGED(Scheme_Thread);
|
||||
g_thread_skeleton->type = scheme_thread_type;
|
||||
|
||||
pthread_create(&threadid, &attr, worker_thread_future_loop, &i);
|
||||
sema_wait(&ready_sema);
|
||||
|
||||
|
@ -347,6 +354,7 @@ void futures_init(void)
|
|||
scheme_register_static(g_scheme_current_runstack, sizeof(void*));
|
||||
scheme_register_static(g_scheme_current_runstack_start, sizeof(void*));
|
||||
scheme_register_static(g_jit_future_storage, 2 * sizeof(void*));
|
||||
scheme_register_static(g_current_thread, sizeof(void*));
|
||||
|
||||
g_pool_threads[i] = threadid;
|
||||
}
|
||||
|
@ -382,6 +390,9 @@ static void end_gc_not_ok(future_t *ft, int with_lock)
|
|||
ft->runstack - ft->runstack_start,
|
||||
ft->runstack_size);
|
||||
}
|
||||
|
||||
/* FIXME: clear scheme_current_thread->ku.multiple.array ? */
|
||||
|
||||
if (with_lock)
|
||||
pthread_mutex_lock(&gc_ok_m);
|
||||
--gc_not_ok;
|
||||
|
@ -724,6 +735,7 @@ void *worker_thread_future_loop(void *arg)
|
|||
scheme_init_os_thread();
|
||||
|
||||
GC = g_shared_GC;
|
||||
scheme_current_thread = g_thread_skeleton;
|
||||
|
||||
//Set processor affinity
|
||||
/*pthread_mutex_lock(&g_future_queue_mutex);
|
||||
|
@ -753,6 +765,7 @@ void *worker_thread_future_loop(void *arg)
|
|||
g_scheme_current_runstack = &scheme_current_runstack;
|
||||
g_scheme_current_runstack_start = &scheme_current_runstack_start;
|
||||
g_jit_future_storage = &jit_future_storage[0];
|
||||
g_current_thread = &scheme_current_thread;
|
||||
sema_signal(&ready_sema);
|
||||
|
||||
wait_for_work:
|
||||
|
@ -952,8 +965,31 @@ void *rtcall_alloc_void_pvoid(void (*f)())
|
|||
END_XFORM_SKIP;
|
||||
}
|
||||
|
||||
static void receive_special_result(future_t *f, Scheme_Object *retval)
|
||||
{
|
||||
if (SAME_OBJ(retval, SCHEME_MULTIPLE_VALUES)) {
|
||||
Scheme_Thread *p = scheme_current_thread;
|
||||
|
||||
p->ku.multiple.array = f->multiple_array;
|
||||
p->ku.multiple.count = f->multiple_count;
|
||||
f->multiple_array = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#include "jit_ts_future_glue.c"
|
||||
|
||||
static void send_special_result(future_t *f, Scheme_Object *retval)
|
||||
{
|
||||
if (SAME_OBJ(retval, SCHEME_MULTIPLE_VALUES)) {
|
||||
Scheme_Thread *p = scheme_current_thread;
|
||||
|
||||
f->multiple_array = p->ku.multiple.array;
|
||||
f->multiple_count = p->ku.multiple.count;
|
||||
if (SAME_OBJ(p->ku.multiple.array, p->values_buffer))
|
||||
p->values_buffer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//Does the work of actually invoking a primitive on behalf of a
|
||||
//future. This function is always invoked on the main (runtime)
|
||||
//thread.
|
||||
|
|
|
@ -72,18 +72,23 @@ typedef struct future_t {
|
|||
Scheme_Bucket *arg_b0;
|
||||
int arg_i0;
|
||||
long arg_l0;
|
||||
size_t arg_z0;
|
||||
Scheme_Native_Closure_Data *arg_n0;
|
||||
Scheme_Object *arg_s1;
|
||||
Scheme_Object **arg_S1;
|
||||
int arg_i1;
|
||||
long arg_l1;
|
||||
Scheme_Object **arg_s2;
|
||||
Scheme_Object *arg_s2;
|
||||
Scheme_Object **arg_S2;
|
||||
int arg_i2;
|
||||
|
||||
Scheme_Object *retval_s;
|
||||
void *retval_p; /* use only with conservative GC */
|
||||
MZ_MARK_STACK_TYPE retval_m;
|
||||
|
||||
Scheme_Object **multiple_array;
|
||||
int multiple_count;
|
||||
|
||||
Scheme_Object *retval;
|
||||
struct future_t *prev;
|
||||
struct future_t *next;
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
[(#\b) "Scheme_Bucket*"]
|
||||
[(#\n) "Scheme_Native_Closure_Data*"]
|
||||
[(#\m) "MZ_MARK_STACK_TYPE"]
|
||||
[(#\p) "void*"]
|
||||
[(#\i) "int"]
|
||||
[(#\l) "long"]
|
||||
[(#\z) "size_t"]
|
||||
[(#\v) "void"]
|
||||
[else (error 'char->type "unknown: ~e" c)]))
|
||||
|
||||
|
@ -77,7 +79,8 @@
|
|||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
@(if (string=? result-type "void") "" @string-append{retval = @|fretval|;})
|
||||
@(if (string=? result-type "void") "" @string-append{@|fretval| = NULL;})
|
||||
@(if (string=? result-type "void") "" @string-append{@|fretval| = 0;})
|
||||
@(if (string=? result-type "Scheme_Object*") @string-append{receive_special_result(future, retval);} "")
|
||||
@(if (string=? result-type "void") "" "return retval;")
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
|
@ -104,6 +107,7 @@
|
|||
@string-append{future->arg_@|(string t)|@|(number->string i)|})
|
||||
", "));
|
||||
@(if (string=? result-type "void") "" @string-append{future->retval_@(substring ts (sub1 (string-length ts))) = retval;})
|
||||
@(if (string=? result-type "Scheme_Object*") @string-append{send_special_result(future, retval);} "")
|
||||
break;
|
||||
}
|
||||
})
|
||||
|
@ -144,7 +148,8 @@
|
|||
S_s
|
||||
s_v
|
||||
iSi_s
|
||||
siS_v))
|
||||
siS_v
|
||||
z_p))
|
||||
|
||||
(with-output-to-file "jit_ts_def.c"
|
||||
#:exists 'replace
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
v = void
|
||||
b = Scheme_Bucket*
|
||||
n = Scheme_Native_Closure_Data*
|
||||
p = void*, CGC only
|
||||
z = size_t
|
||||
m = MZ_MARK_STACK_TYPE */
|
||||
|
||||
define_ts_siS_s(_scheme_apply_multi_from_native)
|
||||
|
@ -34,8 +36,8 @@ define_ts_l_s(make_ivector)
|
|||
define_ts_l_s(make_vector)
|
||||
#endif
|
||||
#ifdef JIT_PRECISE_GC
|
||||
define_ts_l_s(GC_malloc_one_small_dirty_tagged)
|
||||
define_ts_l_s(GC_malloc_one_small_tagged)
|
||||
define_ts_z_p(GC_malloc_one_small_dirty_tagged)
|
||||
define_ts_z_p(GC_malloc_one_small_tagged)
|
||||
#endif
|
||||
define_ts_n_s(scheme_make_native_closure)
|
||||
define_ts_n_s(scheme_make_native_case_closure)
|
||||
|
|
|
@ -188,3 +188,13 @@ static void ts_ ## id(Scheme_Object* g40, int g41, Scheme_Object** g42) \
|
|||
id(g40, g41, g42); \
|
||||
END_XFORM_SKIP; \
|
||||
}
|
||||
#define define_ts_z_p(id) \
|
||||
static void* ts_ ## id(size_t g43) \
|
||||
{ \
|
||||
START_XFORM_SKIP; \
|
||||
if (scheme_use_rtcall) \
|
||||
return scheme_rtcall_z_p(id, g43); \
|
||||
else \
|
||||
return id(g43); \
|
||||
END_XFORM_SKIP; \
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Scheme_Object* scheme_rtcall_siS_s(prim_siS_s f, Scheme_Object* g43, int g44, Scheme_Object** g45)
|
||||
Scheme_Object* scheme_rtcall_siS_s(prim_siS_s f, Scheme_Object* g44, int g45, Scheme_Object** g46)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -7,17 +7,18 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_siS_s;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g43;
|
||||
future->arg_i1 = g44;
|
||||
future->arg_S2 = g45;
|
||||
future->arg_s0 = g44;
|
||||
future->arg_i1 = g45;
|
||||
future->arg_S2 = g46;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_iSs_s(prim_iSs_s f, int g46, Scheme_Object** g47, Scheme_Object* g48)
|
||||
Scheme_Object* scheme_rtcall_iSs_s(prim_iSs_s f, int g47, Scheme_Object** g48, Scheme_Object* g49)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -26,17 +27,18 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_iSs_s;
|
||||
future->prim_func = f;
|
||||
future->arg_i0 = g46;
|
||||
future->arg_S1 = g47;
|
||||
future->arg_s2 = g48;
|
||||
future->arg_i0 = g47;
|
||||
future->arg_S1 = g48;
|
||||
future->arg_s2 = g49;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_s_s(prim_s_s f, Scheme_Object* g49)
|
||||
Scheme_Object* scheme_rtcall_s_s(prim_s_s f, Scheme_Object* g50)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -45,15 +47,16 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_s_s;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g49;
|
||||
future->arg_s0 = g50;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_n_s(prim_n_s f, Scheme_Native_Closure_Data* g50)
|
||||
Scheme_Object* scheme_rtcall_n_s(prim_n_s f, Scheme_Native_Closure_Data* g51)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -62,11 +65,12 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_n_s;
|
||||
future->prim_func = f;
|
||||
future->arg_n0 = g50;
|
||||
future->arg_n0 = g51;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
|
@ -83,11 +87,12 @@
|
|||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_ss_s(prim_ss_s f, Scheme_Object* g51, Scheme_Object* g52)
|
||||
Scheme_Object* scheme_rtcall_ss_s(prim_ss_s f, Scheme_Object* g52, Scheme_Object* g53)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -96,16 +101,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_ss_s;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g51;
|
||||
future->arg_s1 = g52;
|
||||
future->arg_s0 = g52;
|
||||
future->arg_s1 = g53;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
MZ_MARK_STACK_TYPE scheme_rtcall_ss_m(prim_ss_m f, Scheme_Object* g53, Scheme_Object* g54)
|
||||
MZ_MARK_STACK_TYPE scheme_rtcall_ss_m(prim_ss_m f, Scheme_Object* g54, Scheme_Object* g55)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -114,16 +120,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_ss_m;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g53;
|
||||
future->arg_s1 = g54;
|
||||
future->arg_s0 = g54;
|
||||
future->arg_s1 = g55;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_m;
|
||||
future->retval_m = NULL;
|
||||
future->retval_m = 0;
|
||||
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_Sl_s(prim_Sl_s f, Scheme_Object** g55, long g56)
|
||||
Scheme_Object* scheme_rtcall_Sl_s(prim_Sl_s f, Scheme_Object** g56, long g57)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -132,16 +139,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_Sl_s;
|
||||
future->prim_func = f;
|
||||
future->arg_S0 = g55;
|
||||
future->arg_l1 = g56;
|
||||
future->arg_S0 = g56;
|
||||
future->arg_l1 = g57;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_l_s(prim_l_s f, long g57)
|
||||
Scheme_Object* scheme_rtcall_l_s(prim_l_s f, long g58)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -150,15 +158,16 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_l_s;
|
||||
future->prim_func = f;
|
||||
future->arg_l0 = g57;
|
||||
future->arg_l0 = g58;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_bsi_v(prim_bsi_v f, Scheme_Bucket* g58, Scheme_Object* g59, int g60)
|
||||
void scheme_rtcall_bsi_v(prim_bsi_v f, Scheme_Bucket* g59, Scheme_Object* g60, int g61)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -167,17 +176,18 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_bsi_v;
|
||||
future->prim_func = f;
|
||||
future->arg_b0 = g58;
|
||||
future->arg_s1 = g59;
|
||||
future->arg_i2 = g60;
|
||||
future->arg_b0 = g59;
|
||||
future->arg_s1 = g60;
|
||||
future->arg_i2 = g61;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_iiS_v(prim_iiS_v f, int g61, int g62, Scheme_Object** g63)
|
||||
void scheme_rtcall_iiS_v(prim_iiS_v f, int g62, int g63, Scheme_Object** g64)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -186,17 +196,18 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_iiS_v;
|
||||
future->prim_func = f;
|
||||
future->arg_i0 = g61;
|
||||
future->arg_i1 = g62;
|
||||
future->arg_S2 = g63;
|
||||
future->arg_i0 = g62;
|
||||
future->arg_i1 = g63;
|
||||
future->arg_S2 = g64;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_ss_v(prim_ss_v f, Scheme_Object* g64, Scheme_Object* g65)
|
||||
void scheme_rtcall_ss_v(prim_ss_v f, Scheme_Object* g65, Scheme_Object* g66)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -205,16 +216,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_ss_v;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g64;
|
||||
future->arg_s1 = g65;
|
||||
future->arg_s0 = g65;
|
||||
future->arg_s1 = g66;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_b_v(prim_b_v f, Scheme_Bucket* g66)
|
||||
void scheme_rtcall_b_v(prim_b_v f, Scheme_Bucket* g67)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -223,15 +235,16 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_b_v;
|
||||
future->prim_func = f;
|
||||
future->arg_b0 = g66;
|
||||
future->arg_b0 = g67;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_sl_s(prim_sl_s f, Scheme_Object* g67, long g68)
|
||||
Scheme_Object* scheme_rtcall_sl_s(prim_sl_s f, Scheme_Object* g68, long g69)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -240,16 +253,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_sl_s;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g67;
|
||||
future->arg_l1 = g68;
|
||||
future->arg_s0 = g68;
|
||||
future->arg_l1 = g69;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_iS_s(prim_iS_s f, int g69, Scheme_Object** g70)
|
||||
Scheme_Object* scheme_rtcall_iS_s(prim_iS_s f, int g70, Scheme_Object** g71)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -258,16 +272,17 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_iS_s;
|
||||
future->prim_func = f;
|
||||
future->arg_i0 = g69;
|
||||
future->arg_S1 = g70;
|
||||
future->arg_i0 = g70;
|
||||
future->arg_S1 = g71;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_S_s(prim_S_s f, Scheme_Object** g71)
|
||||
Scheme_Object* scheme_rtcall_S_s(prim_S_s f, Scheme_Object** g72)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -276,15 +291,16 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_S_s;
|
||||
future->prim_func = f;
|
||||
future->arg_S0 = g71;
|
||||
future->arg_S0 = g72;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_s_v(prim_s_v f, Scheme_Object* g72)
|
||||
void scheme_rtcall_s_v(prim_s_v f, Scheme_Object* g73)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -293,15 +309,16 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_s_v;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g72;
|
||||
future->arg_s0 = g73;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
Scheme_Object* scheme_rtcall_iSi_s(prim_iSi_s f, int g73, Scheme_Object** g74, int g75)
|
||||
Scheme_Object* scheme_rtcall_iSi_s(prim_iSi_s f, int g74, Scheme_Object** g75, int g76)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -310,17 +327,18 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_iSi_s;
|
||||
future->prim_func = f;
|
||||
future->arg_i0 = g73;
|
||||
future->arg_S1 = g74;
|
||||
future->arg_i2 = g75;
|
||||
future->arg_i0 = g74;
|
||||
future->arg_S1 = g75;
|
||||
future->arg_i2 = g76;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_s;
|
||||
future->retval_s = NULL;
|
||||
future->retval_s = 0;
|
||||
receive_special_result(future, retval);
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void scheme_rtcall_siS_v(prim_siS_v f, Scheme_Object* g76, int g77, Scheme_Object** g78)
|
||||
void scheme_rtcall_siS_v(prim_siS_v f, Scheme_Object* g77, int g78, Scheme_Object** g79)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
|
@ -329,13 +347,32 @@
|
|||
future = current_ft;
|
||||
future->prim_protocol = SIG_siS_v;
|
||||
future->prim_func = f;
|
||||
future->arg_s0 = g76;
|
||||
future->arg_i1 = g77;
|
||||
future->arg_S2 = g78;
|
||||
future->arg_s0 = g77;
|
||||
future->arg_i1 = g78;
|
||||
future->arg_S2 = g79;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
|
||||
|
||||
|
||||
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
void* scheme_rtcall_z_p(prim_z_p f, size_t g80)
|
||||
{
|
||||
START_XFORM_SKIP;
|
||||
future_t *future;
|
||||
void* retval;
|
||||
|
||||
future = current_ft;
|
||||
future->prim_protocol = SIG_z_p;
|
||||
future->prim_func = f;
|
||||
future->arg_z0 = g80;
|
||||
future_do_runtimecall((void*)f, 0);
|
||||
future = current_ft;
|
||||
retval = future->retval_p;
|
||||
future->retval_p = 0;
|
||||
|
||||
return retval;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
|
|
|
@ -1,57 +1,60 @@
|
|||
#define SIG_siS_s 5
|
||||
typedef Scheme_Object* (*prim_siS_s)(Scheme_Object*, int, Scheme_Object**);
|
||||
Scheme_Object* scheme_rtcall_siS_s(prim_siS_s f, Scheme_Object* g115, int g116, Scheme_Object** g117);
|
||||
Scheme_Object* scheme_rtcall_siS_s(prim_siS_s f, Scheme_Object* g118, int g119, Scheme_Object** g120);
|
||||
#define SIG_iSs_s 6
|
||||
typedef Scheme_Object* (*prim_iSs_s)(int, Scheme_Object**, Scheme_Object*);
|
||||
Scheme_Object* scheme_rtcall_iSs_s(prim_iSs_s f, int g118, Scheme_Object** g119, Scheme_Object* g120);
|
||||
Scheme_Object* scheme_rtcall_iSs_s(prim_iSs_s f, int g121, Scheme_Object** g122, Scheme_Object* g123);
|
||||
#define SIG_s_s 7
|
||||
typedef Scheme_Object* (*prim_s_s)(Scheme_Object*);
|
||||
Scheme_Object* scheme_rtcall_s_s(prim_s_s f, Scheme_Object* g121);
|
||||
Scheme_Object* scheme_rtcall_s_s(prim_s_s f, Scheme_Object* g124);
|
||||
#define SIG_n_s 8
|
||||
typedef Scheme_Object* (*prim_n_s)(Scheme_Native_Closure_Data*);
|
||||
Scheme_Object* scheme_rtcall_n_s(prim_n_s f, Scheme_Native_Closure_Data* g122);
|
||||
Scheme_Object* scheme_rtcall_n_s(prim_n_s f, Scheme_Native_Closure_Data* g125);
|
||||
#define SIG__s 9
|
||||
typedef Scheme_Object* (*prim__s)();
|
||||
Scheme_Object* scheme_rtcall__s(prim__s f );
|
||||
#define SIG_ss_s 10
|
||||
typedef Scheme_Object* (*prim_ss_s)(Scheme_Object*, Scheme_Object*);
|
||||
Scheme_Object* scheme_rtcall_ss_s(prim_ss_s f, Scheme_Object* g123, Scheme_Object* g124);
|
||||
Scheme_Object* scheme_rtcall_ss_s(prim_ss_s f, Scheme_Object* g126, Scheme_Object* g127);
|
||||
#define SIG_ss_m 11
|
||||
typedef MZ_MARK_STACK_TYPE (*prim_ss_m)(Scheme_Object*, Scheme_Object*);
|
||||
MZ_MARK_STACK_TYPE scheme_rtcall_ss_m(prim_ss_m f, Scheme_Object* g125, Scheme_Object* g126);
|
||||
MZ_MARK_STACK_TYPE scheme_rtcall_ss_m(prim_ss_m f, Scheme_Object* g128, Scheme_Object* g129);
|
||||
#define SIG_Sl_s 12
|
||||
typedef Scheme_Object* (*prim_Sl_s)(Scheme_Object**, long);
|
||||
Scheme_Object* scheme_rtcall_Sl_s(prim_Sl_s f, Scheme_Object** g127, long g128);
|
||||
Scheme_Object* scheme_rtcall_Sl_s(prim_Sl_s f, Scheme_Object** g130, long g131);
|
||||
#define SIG_l_s 13
|
||||
typedef Scheme_Object* (*prim_l_s)(long);
|
||||
Scheme_Object* scheme_rtcall_l_s(prim_l_s f, long g129);
|
||||
Scheme_Object* scheme_rtcall_l_s(prim_l_s f, long g132);
|
||||
#define SIG_bsi_v 14
|
||||
typedef void (*prim_bsi_v)(Scheme_Bucket*, Scheme_Object*, int);
|
||||
void scheme_rtcall_bsi_v(prim_bsi_v f, Scheme_Bucket* g130, Scheme_Object* g131, int g132);
|
||||
void scheme_rtcall_bsi_v(prim_bsi_v f, Scheme_Bucket* g133, Scheme_Object* g134, int g135);
|
||||
#define SIG_iiS_v 15
|
||||
typedef void (*prim_iiS_v)(int, int, Scheme_Object**);
|
||||
void scheme_rtcall_iiS_v(prim_iiS_v f, int g133, int g134, Scheme_Object** g135);
|
||||
void scheme_rtcall_iiS_v(prim_iiS_v f, int g136, int g137, Scheme_Object** g138);
|
||||
#define SIG_ss_v 16
|
||||
typedef void (*prim_ss_v)(Scheme_Object*, Scheme_Object*);
|
||||
void scheme_rtcall_ss_v(prim_ss_v f, Scheme_Object* g136, Scheme_Object* g137);
|
||||
void scheme_rtcall_ss_v(prim_ss_v f, Scheme_Object* g139, Scheme_Object* g140);
|
||||
#define SIG_b_v 17
|
||||
typedef void (*prim_b_v)(Scheme_Bucket*);
|
||||
void scheme_rtcall_b_v(prim_b_v f, Scheme_Bucket* g138);
|
||||
void scheme_rtcall_b_v(prim_b_v f, Scheme_Bucket* g141);
|
||||
#define SIG_sl_s 18
|
||||
typedef Scheme_Object* (*prim_sl_s)(Scheme_Object*, long);
|
||||
Scheme_Object* scheme_rtcall_sl_s(prim_sl_s f, Scheme_Object* g139, long g140);
|
||||
Scheme_Object* scheme_rtcall_sl_s(prim_sl_s f, Scheme_Object* g142, long g143);
|
||||
#define SIG_iS_s 19
|
||||
typedef Scheme_Object* (*prim_iS_s)(int, Scheme_Object**);
|
||||
Scheme_Object* scheme_rtcall_iS_s(prim_iS_s f, int g141, Scheme_Object** g142);
|
||||
Scheme_Object* scheme_rtcall_iS_s(prim_iS_s f, int g144, Scheme_Object** g145);
|
||||
#define SIG_S_s 20
|
||||
typedef Scheme_Object* (*prim_S_s)(Scheme_Object**);
|
||||
Scheme_Object* scheme_rtcall_S_s(prim_S_s f, Scheme_Object** g143);
|
||||
Scheme_Object* scheme_rtcall_S_s(prim_S_s f, Scheme_Object** g146);
|
||||
#define SIG_s_v 21
|
||||
typedef void (*prim_s_v)(Scheme_Object*);
|
||||
void scheme_rtcall_s_v(prim_s_v f, Scheme_Object* g144);
|
||||
void scheme_rtcall_s_v(prim_s_v f, Scheme_Object* g147);
|
||||
#define SIG_iSi_s 22
|
||||
typedef Scheme_Object* (*prim_iSi_s)(int, Scheme_Object**, int);
|
||||
Scheme_Object* scheme_rtcall_iSi_s(prim_iSi_s f, int g145, Scheme_Object** g146, int g147);
|
||||
Scheme_Object* scheme_rtcall_iSi_s(prim_iSi_s f, int g148, Scheme_Object** g149, int g150);
|
||||
#define SIG_siS_v 23
|
||||
typedef void (*prim_siS_v)(Scheme_Object*, int, Scheme_Object**);
|
||||
void scheme_rtcall_siS_v(prim_siS_v f, Scheme_Object* g148, int g149, Scheme_Object** g150);
|
||||
void scheme_rtcall_siS_v(prim_siS_v f, Scheme_Object* g151, int g152, Scheme_Object** g153);
|
||||
#define SIG_z_p 24
|
||||
typedef void* (*prim_z_p)(size_t);
|
||||
void* scheme_rtcall_z_p(prim_z_p f, size_t g154);
|
||||
|
|
|
@ -5,6 +5,7 @@ case SIG_siS_s:
|
|||
retval =
|
||||
f(future->arg_s0, future->arg_i1, future->arg_S2);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_iSs_s:
|
||||
|
@ -14,6 +15,7 @@ case SIG_iSs_s:
|
|||
retval =
|
||||
f(future->arg_i0, future->arg_S1, future->arg_s2);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_s_s:
|
||||
|
@ -23,6 +25,7 @@ case SIG_s_s:
|
|||
retval =
|
||||
f(future->arg_s0);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_n_s:
|
||||
|
@ -32,6 +35,7 @@ case SIG_n_s:
|
|||
retval =
|
||||
f(future->arg_n0);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG__s:
|
||||
|
@ -41,6 +45,7 @@ case SIG__s:
|
|||
retval =
|
||||
f();
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_ss_s:
|
||||
|
@ -50,6 +55,7 @@ case SIG_ss_s:
|
|||
retval =
|
||||
f(future->arg_s0, future->arg_s1);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_ss_m:
|
||||
|
@ -59,6 +65,7 @@ case SIG_ss_m:
|
|||
retval =
|
||||
f(future->arg_s0, future->arg_s1);
|
||||
future->retval_m = retval;
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_Sl_s:
|
||||
|
@ -68,6 +75,7 @@ case SIG_Sl_s:
|
|||
retval =
|
||||
f(future->arg_S0, future->arg_l1);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_l_s:
|
||||
|
@ -77,6 +85,7 @@ case SIG_l_s:
|
|||
retval =
|
||||
f(future->arg_l0);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_bsi_v:
|
||||
|
@ -86,6 +95,7 @@ case SIG_bsi_v:
|
|||
|
||||
f(future->arg_b0, future->arg_s1, future->arg_i2);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_iiS_v:
|
||||
|
@ -95,6 +105,7 @@ case SIG_iiS_v:
|
|||
|
||||
f(future->arg_i0, future->arg_i1, future->arg_S2);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_ss_v:
|
||||
|
@ -104,6 +115,7 @@ case SIG_ss_v:
|
|||
|
||||
f(future->arg_s0, future->arg_s1);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_b_v:
|
||||
|
@ -113,6 +125,7 @@ case SIG_b_v:
|
|||
|
||||
f(future->arg_b0);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_sl_s:
|
||||
|
@ -122,6 +135,7 @@ case SIG_sl_s:
|
|||
retval =
|
||||
f(future->arg_s0, future->arg_l1);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_iS_s:
|
||||
|
@ -131,6 +145,7 @@ case SIG_iS_s:
|
|||
retval =
|
||||
f(future->arg_i0, future->arg_S1);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_S_s:
|
||||
|
@ -140,6 +155,7 @@ case SIG_S_s:
|
|||
retval =
|
||||
f(future->arg_S0);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_s_v:
|
||||
|
@ -149,6 +165,7 @@ case SIG_s_v:
|
|||
|
||||
f(future->arg_s0);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_iSi_s:
|
||||
|
@ -158,6 +175,7 @@ case SIG_iSi_s:
|
|||
retval =
|
||||
f(future->arg_i0, future->arg_S1, future->arg_i2);
|
||||
future->retval_s = retval;
|
||||
send_special_result(future, retval);
|
||||
break;
|
||||
}
|
||||
case SIG_siS_v:
|
||||
|
@ -167,5 +185,16 @@ case SIG_siS_v:
|
|||
|
||||
f(future->arg_s0, future->arg_i1, future->arg_S2);
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
case SIG_z_p:
|
||||
{
|
||||
prim_z_p f = (prim_z_p)future->prim_func;
|
||||
void* retval;
|
||||
retval =
|
||||
f(future->arg_z0);
|
||||
future->retval_p = retval;
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -5433,6 +5433,7 @@ static int future_MARK(void *p) {
|
|||
gcMARK(f->arg_S2);
|
||||
gcMARK(f->retval_s);
|
||||
gcMARK(f->retval);
|
||||
gcMARK(f->multiple_array);
|
||||
gcMARK(f->prev);
|
||||
gcMARK(f->next);
|
||||
gcMARK(f->next_waiting_atomic);
|
||||
|
@ -5455,6 +5456,7 @@ static int future_FIXUP(void *p) {
|
|||
gcFIXUP(f->arg_S2);
|
||||
gcFIXUP(f->retval_s);
|
||||
gcFIXUP(f->retval);
|
||||
gcFIXUP(f->multiple_array);
|
||||
gcFIXUP(f->prev);
|
||||
gcFIXUP(f->next);
|
||||
gcFIXUP(f->next_waiting_atomic);
|
||||
|
|
|
@ -2236,6 +2236,7 @@ future {
|
|||
gcMARK(f->arg_S2);
|
||||
gcMARK(f->retval_s);
|
||||
gcMARK(f->retval);
|
||||
gcMARK(f->multiple_array);
|
||||
gcMARK(f->prev);
|
||||
gcMARK(f->next);
|
||||
gcMARK(f->next_waiting_atomic);
|
||||
|
|
Loading…
Reference in New Issue
Block a user