diff options
author | Mike Pall <mike> | 2010-02-22 14:35:47 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-02-22 14:35:47 +0100 |
commit | 19af48316655fac73f6a75a03d65fc6c9a4c7c1a (patch) | |
tree | 3f751d238ba50ca8e49c379d351ddd961f25120c /src/lj_record.c | |
parent | e76bcd2914a2a56ed5db44822d141bd7820d3f4e (diff) | |
download | luajit-19af48316655fac73f6a75a03d65fc6c9a4c7c1a.tar.gz luajit-19af48316655fac73f6a75a03d65fc6c9a4c7c1a.tar.bz2 luajit-19af48316655fac73f6a75a03d65fc6c9a4c7c1a.zip |
Add region selection for up-recursion and tail-recursion.
Diffstat (limited to 'src/lj_record.c')
-rw-r--r-- | src/lj_record.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index 42f9a8ae..45a8ef5f 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -1726,8 +1726,10 @@ static void check_call_unroll(jit_State *J) | |||
1726 | if ((J->slot[s] & TREF_FRAME) && tref_ref(J->slot[s]) == fref) | 1726 | if ((J->slot[s] & TREF_FRAME) && tref_ref(J->slot[s]) == fref) |
1727 | count++; | 1727 | count++; |
1728 | if (J->pc == J->startpc) { | 1728 | if (J->pc == J->startpc) { |
1729 | if (count + (int32_t)(J->tailcalled & 0xff) > J->param[JIT_P_recunroll]) | 1729 | if (count + (int32_t)(J->tailcalled & 0xff) > J->param[JIT_P_recunroll]) { |
1730 | lj_trace_err(J, LJ_TRERR_NYIRECU); | 1730 | J->pc++; |
1731 | rec_stop(J, J->curtrace); /* Up-recursion or tail-recursion. */ | ||
1732 | } | ||
1731 | } else { | 1733 | } else { |
1732 | if (count > J->param[JIT_P_callunroll]) | 1734 | if (count > J->param[JIT_P_callunroll]) |
1733 | lj_trace_err(J, LJ_TRERR_CUNROLL); | 1735 | lj_trace_err(J, LJ_TRERR_CUNROLL); |