fix use of multiple values in futures

svn: r16907
This commit is contained in:
Matthew Flatt 2009-11-19 23:39:31 +00:00
parent ec1cfb5a12
commit 2781f1a4b8
10 changed files with 220 additions and 90 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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; \
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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);