diff options
author | Mike Pall <mike> | 2011-06-28 23:19:36 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2011-06-28 23:19:36 +0200 |
commit | 3dbae4ffc2ba8f6ebf8adf86742521bce6dbf8f8 (patch) | |
tree | aeb8aac9e20323ee0a4ee8fa50dba8afdd2c9d6a /src | |
parent | 999d95253ab3770ca406bbc12e62aec029095239 (diff) | |
download | luajit-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.c | 11 |
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. */ |
546 | static LJ_AINLINE void trace_pendpatch(jit_State *J, int force) | 546 | static 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); |