summaryrefslogtreecommitdiff
path: root/src/lj_record.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-02-22 14:35:47 +0100
committerMike Pall <mike>2010-02-22 14:35:47 +0100
commit19af48316655fac73f6a75a03d65fc6c9a4c7c1a (patch)
tree3f751d238ba50ca8e49c379d351ddd961f25120c /src/lj_record.c
parente76bcd2914a2a56ed5db44822d141bd7820d3f4e (diff)
downloadluajit-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.c6
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);