aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/lj_jit.h2
-rw-r--r--src/lj_record.c6
-rw-r--r--src/lj_traceerr.h1
3 files changed, 5 insertions, 4 deletions
diff --git a/src/lj_jit.h b/src/lj_jit.h
index 41a3fe9a..69a066ce 100644
--- a/src/lj_jit.h
+++ b/src/lj_jit.h
@@ -76,7 +76,7 @@
76 _(\012, instunroll, 4) /* Max. unroll for instable loops. */ \ 76 _(\012, instunroll, 4) /* Max. unroll for instable loops. */ \
77 _(\012, loopunroll, 7) /* Max. unroll for loop ops in side traces. */ \ 77 _(\012, loopunroll, 7) /* Max. unroll for loop ops in side traces. */ \
78 _(\012, callunroll, 3) /* Max. unroll for recursive calls. */ \ 78 _(\012, callunroll, 3) /* Max. unroll for recursive calls. */ \
79 _(\011, recunroll, 0) /* Max. unroll for true recursion. */ \ 79 _(\011, recunroll, 2) /* Max. unroll for true recursion. */ \
80 \ 80 \
81 /* Size of each machine code area (in KBytes). */ \ 81 /* Size of each machine code area (in KBytes). */ \
82 _(\011, sizemcode, JIT_P_sizemcode_DEFAULT) \ 82 _(\011, sizemcode, JIT_P_sizemcode_DEFAULT) \
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);
diff --git a/src/lj_traceerr.h b/src/lj_traceerr.h
index 89ab04d1..abc53024 100644
--- a/src/lj_traceerr.h
+++ b/src/lj_traceerr.h
@@ -22,7 +22,6 @@ TREDEF(LBLACKL, "blacklisted loop")
22TREDEF(BADTYPE, "bad argument type") 22TREDEF(BADTYPE, "bad argument type")
23TREDEF(CJITOFF, "call to JIT-disabled function") 23TREDEF(CJITOFF, "call to JIT-disabled function")
24TREDEF(CUNROLL, "call unroll limit reached") 24TREDEF(CUNROLL, "call unroll limit reached")
25TREDEF(NYIRECU, "NYI: recursive calls")
26TREDEF(NYIVF, "NYI: vararg function") 25TREDEF(NYIVF, "NYI: vararg function")
27TREDEF(NYICF, "NYI: C function %p") 26TREDEF(NYICF, "NYI: C function %p")
28TREDEF(NYIFF, "NYI: FastFunc %s") 27TREDEF(NYIFF, "NYI: FastFunc %s")