fix placement of future pause-for-gc loop in JIT-generated code
svn: r18429
This commit is contained in:
parent
0197183739
commit
2ea9c6e02b
|
@ -1202,7 +1202,6 @@ static void invoke_rtcall(Scheme_Future_State * volatile fs, future_t * volatile
|
|||
if (scheme_setjmp(newbuf)) {
|
||||
mzrt_mutex_lock(fs->future_mutex);
|
||||
future->no_retval = 1;
|
||||
future->work_completed = 1;
|
||||
//Signal the waiting worker thread that it
|
||||
//can continue running machine code
|
||||
mzrt_sema_post(future->can_continue_sema);
|
||||
|
|
|
@ -3463,6 +3463,12 @@ static int generate_self_tail_call(Scheme_Object *rator, mz_jit_state *jitter, i
|
|||
mz_patch_branch(refslow);
|
||||
__END_TINY_OR_SHORT_JUMPS__(jmp_tiny, jmp_short);
|
||||
|
||||
generate_pause_for_gc_and_retry(jitter,
|
||||
0, /* in short jumps */
|
||||
JIT_R0, /* expose R0 to GC */
|
||||
refagain); /* retry code pointer */
|
||||
CHECK_LIMIT();
|
||||
|
||||
jitter->flostack_offset = offset;
|
||||
jitter->flostack_space = space;
|
||||
|
||||
|
@ -3544,10 +3550,6 @@ static int generate_self_tail_call(Scheme_Object *rator, mz_jit_state *jitter, i
|
|||
|
||||
mz_flostack_restore(jitter, 0, 0, 1, 1);
|
||||
|
||||
generate_pause_for_gc_and_retry(jitter,
|
||||
0, /* in short jumps */
|
||||
JIT_R0, /* expose R0 to GC */
|
||||
refagain); /* retry code pointer */
|
||||
CHECK_LIMIT();
|
||||
|
||||
if (args_already_in_place) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user