fix direct-prim interception code to not use 4 arguments

svn: r15673
This commit is contained in:
Matthew Flatt 2009-08-05 12:30:35 +00:00
parent 160d30d81d
commit 7616035dc0

View File

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