fix JIT bug related to inlining `variable-reference-constant?'

This commit is contained in:
Matthew Flatt 2012-03-21 19:37:14 -06:00
parent 5cb3422ea9
commit 16ef341e98
2 changed files with 5 additions and 5 deletions

View File

@ -2096,10 +2096,10 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
CHECK_LIMIT(); CHECK_LIMIT();
mz_rs_sync(); mz_rs_sync();
/* Load global+stx array: */ /* Load prefix: */
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(v)); pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(v));
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); mz_rs_ldxi(JIT_R2, pos);
/* Try already-renamed stx: */ /* Extract bucket from prefix: */
pos = SCHEME_TOPLEVEL_POS(v); pos = SCHEME_TOPLEVEL_POS(v);
jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); jit_ldxi_p(JIT_R2, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));
CHECK_LIMIT(); CHECK_LIMIT();
@ -2115,7 +2115,7 @@ int scheme_generate(Scheme_Object *obj, mz_jit_state *jitter, int is_tail, int w
jit_stxi_p(&((Scheme_Bucket *)0x0)->val, JIT_R2, JIT_R0); jit_stxi_p(&((Scheme_Bucket *)0x0)->val, JIT_R2, JIT_R0);
ref3 = jit_jmpi(jit_forward()); ref3 = jit_jmpi(jit_forward());
/* slow path: */ /* Slow path: */
mz_patch_branch(ref1); mz_patch_branch(ref1);
mz_patch_branch(ref2); mz_patch_branch(ref2);
__END_SHORT_JUMPS__(1); __END_SHORT_JUMPS__(1);

View File

@ -451,7 +451,7 @@ static int generate_inlined_constant_varref_test(mz_jit_state *jitter, Scheme_Ob
/* Load global array: */ /* Load global array: */
pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj)); pos = mz_remap(SCHEME_TOPLEVEL_DEPTH(obj));
jit_ldxi_p(JIT_R2, JIT_RUNSTACK, WORDS_TO_BYTES(pos)); mz_rs_ldxi(JIT_R2, pos);
/* Load bucket: */ /* Load bucket: */
pos = SCHEME_TOPLEVEL_POS(obj); pos = SCHEME_TOPLEVEL_POS(obj);
jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos])); jit_ldxi_p(JIT_R1, JIT_R2, &(((Scheme_Prefix *)0x0)->a[pos]));