From 202af50a5ab54a1a37c397725f1c25437c6d9289 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 28 Sep 2010 12:07:15 -0400 Subject: [PATCH] fix JIT problem with proxies and `vector-set!' Closes PR 11263 --- src/racket/src/jit.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/racket/src/jit.c b/src/racket/src/jit.c index 7eaf8a7d54..77d1de22e0 100644 --- a/src/racket/src/jit.c +++ b/src/racket/src/jit.c @@ -6936,7 +6936,6 @@ static int generate_inlined_unary(mz_jit_state *jitter, Scheme_App2_Rec *app, in } if (name[0] != 'f') { /* can return */ - jit_retval(JIT_R0); CHECK_LIMIT(); __START_TINY_JUMPS__(1); refdone = jit_jmpi(jit_forward()); @@ -7439,9 +7438,9 @@ static int generate_vector_op(mz_jit_state *jitter, int set, int int_ready, int else generate_alloc_double(jitter, 0); } - if (can_chaperone) - mz_patch_ucbranch(pref); } + if (can_chaperone) + mz_patch_ucbranch(pref); return 1; } @@ -11072,6 +11071,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) case 8: case 9: jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(1)); + JIT_UPDATE_THREAD_RSPTR(); jit_retval(JIT_R0); mz_epilog(JIT_R1); break; @@ -11612,19 +11612,16 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) case 0: if (!iii) { (void)mz_finish(ts_scheme_checked_vector_ref); - CHECK_LIMIT(); - /* Might return, if arg was chaperone */ - jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(2)); - JIT_UPDATE_THREAD_RSPTR(); - jit_retval(JIT_R0); - mz_epilog(JIT_R2); } else { (void)mz_finish(ts_scheme_checked_vector_set); - /* Might return, if arg was chaperone */ - jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(3)); - JIT_UPDATE_THREAD_RSPTR(); - mz_epilog(JIT_R2); } + CHECK_LIMIT(); + /* Might return, if arg was chaperone */ + jit_addi_p(JIT_RUNSTACK, JIT_RUNSTACK, WORDS_TO_BYTES(2)); + JIT_UPDATE_THREAD_RSPTR(); + if (!iii) + jit_retval(JIT_R0); + mz_epilog(JIT_R2); break; case 1: if (!iii) {