diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index 6810b1b05c..69e9efaff0 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -1957,16 +1957,18 @@ static jit_insn *generate_proc_struct_retry(mz_jit_state *jitter, int num_rands, #if 1 # define mz_prepare_direct_prim(n) mz_prepare(n) # define mz_finishr_direct_prim(reg, proc) mz_finishr(reg) +# define mz_direct_only(p) p #else -# define mz_prepare_direct_prim(n) mz_prepare(n+1) +# define mz_prepare_direct_prim(n) mz_prepare(n) # define mz_finishr_direct_prim(reg, proc) (jit_pusharg_p(reg), (void)mz_finish(proc)) -static Scheme_Object *noncm_prim_indirect(Scheme_Prim proc, int argc, Scheme_Object **argv) +# define mz_direct_only(p) /* skip this arg, so that total count <= 3 args */ +static Scheme_Object *noncm_prim_indirect(Scheme_Prim proc, int argc) { - return proc(argc, argv); + return proc(argc, MZ_RUNSTACK); } -static Scheme_Object *prim_indirect(Scheme_Primitive_Closure_Proc proc, int argc, Scheme_Object **argv, Scheme_Object *self) +static Scheme_Object *prim_indirect(Scheme_Primitive_Closure_Proc proc, int argc, Scheme_Object *self) { - return proc(argc, argv, self); + return proc(argc, MZ_RUNSTACK, self); } #endif @@ -1985,7 +1987,7 @@ static int generate_direct_prim_tail_call(mz_jit_state *jitter, int num_rands) jit_movi_i(JIT_R1, num_rands); mz_prepare_direct_prim(2); /* a prim takes 3 args, but a NONCM prim ignores the 3rd */ CHECK_LIMIT(); - jit_pusharg_p(JIT_RUNSTACK); + mz_direct_only(jit_pusharg_p(JIT_RUNSTACK)); jit_pusharg_i(JIT_R1); mz_finishr_direct_prim(JIT_V1, noncm_prim_indirect); CHECK_LIMIT(); @@ -2178,7 +2180,7 @@ static int generate_direct_prim_non_tail_call(mz_jit_state *jitter, int num_rand jit_movi_i(JIT_R1, num_rands); mz_prepare_direct_prim(2); /* a prim takes 3 args, but a NONCM prim ignores the 3rd */ CHECK_LIMIT(); - jit_pusharg_p(JIT_RUNSTACK); + mz_direct_only(jit_pusharg_p(JIT_RUNSTACK)); jit_pusharg_i(JIT_R1); mz_finishr_direct_prim(JIT_V1, noncm_prim_indirect); CHECK_LIMIT(); @@ -2471,7 +2473,7 @@ static int generate_non_tail_call(mz_jit_state *jitter, int num_rands, int direc mz_prepare_direct_prim(3); jit_pusharg_p(JIT_V1); if (num_rands < 0) { jit_movr_p(JIT_V1, JIT_R0); } /* save argc to manually pop runstack */ - jit_pusharg_p(JIT_RUNSTACK); + mz_direct_only(jit_pusharg_p(JIT_RUNSTACK)); jit_pusharg_i(JIT_R2); mz_finishr_direct_prim(JIT_R1, prim_indirect); CHECK_LIMIT(); @@ -7207,7 +7209,7 @@ static int do_generate_common(mz_jit_state *jitter, void *_data) } JIT_UPDATE_THREAD_RSPTR(); mz_prepare_direct_prim(2); - jit_pusharg_p(JIT_RUNSTACK); + mz_direct_only(jit_pusharg_p(JIT_RUNSTACK)); jit_pusharg_p(JIT_R1); mz_finishr_direct_prim(JIT_R2, noncm_prim_indirect); CHECK_LIMIT();