aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-06-28 23:19:36 +0200
committerMike Pall <mike>2011-06-28 23:19:36 +0200
commit3dbae4ffc2ba8f6ebf8adf86742521bce6dbf8f8 (patch)
treeaeb8aac9e20323ee0a4ee8fa50dba8afdd2c9d6a /src
parent999d95253ab3770ca406bbc12e62aec029095239 (diff)
downloadluajit-3dbae4ffc2ba8f6ebf8adf86742521bce6dbf8f8.tar.gz
luajit-3dbae4ffc2ba8f6ebf8adf86742521bce6dbf8f8.tar.bz2
luajit-3dbae4ffc2ba8f6ebf8adf86742521bce6dbf8f8.zip
Clean up temporary bytecode patching.
Diffstat (limited to 'src')
-rw-r--r--src/lj_trace.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c
index 2bb2075d..0542ea1f 100644
--- a/src/lj_trace.c
+++ b/src/lj_trace.c
@@ -545,9 +545,13 @@ static int trace_abort(jit_State *J)
545/* Perform pending re-patch of a bytecode instruction. */ 545/* Perform pending re-patch of a bytecode instruction. */
546static LJ_AINLINE void trace_pendpatch(jit_State *J, int force) 546static LJ_AINLINE void trace_pendpatch(jit_State *J, int force)
547{ 547{
548 if (LJ_UNLIKELY(J->patchpc) && (force || J->chain[IR_RETF])) { 548 if (LJ_UNLIKELY(J->patchpc)) {
549 *J->patchpc = J->patchins; 549 if (force || J->bcskip == 0) {
550 J->patchpc = NULL; 550 *J->patchpc = J->patchins;
551 J->patchpc = NULL;
552 } else {
553 J->bcskip = 0;
554 }
551 } 555 }
552} 556}
553 557
@@ -769,6 +773,7 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
769 J->patchins = *pc; 773 J->patchins = *pc;
770 J->patchpc = (BCIns *)pc; 774 J->patchpc = (BCIns *)pc;
771 *J->patchpc = *retpc; 775 *J->patchpc = *retpc;
776 J->bcskip = 1;
772 } else { 777 } else {
773 pc = retpc; 778 pc = retpc;
774 setcframe_pc(cf, pc); 779 setcframe_pc(cf, pc);