aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-07 20:03:38 +0100
committerMike Pall <mike>2011-03-07 20:03:38 +0100
commit8eb09fe820fe8621e5e9684757ec21c633cf557a (patch)
treeafa9ed4de4131503defe96f122b9717ff8fca2cc /src
parentf29a9d4341c64fa47c735bdf6ae1f379b6b6464c (diff)
downloadluajit-8eb09fe820fe8621e5e9684757ec21c633cf557a.tar.gz
luajit-8eb09fe820fe8621e5e9684757ec21c633cf557a.tar.bz2
luajit-8eb09fe820fe8621e5e9684757ec21c633cf557a.zip
Suppress recording of retried fast functions.
Diffstat (limited to 'src')
-rw-r--r--src/lj_ffrecord.c4
-rw-r--r--src/lj_jit.h3
-rw-r--r--src/lj_record.c4
3 files changed, 9 insertions, 2 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index 5b618a80..631321d9 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -799,8 +799,10 @@ void lj_ffrecord_func(jit_State *J)
799 rd.argv = J->L->base; 799 rd.argv = J->L->base;
800 J->base[J->maxslot] = 0; /* Mark end of arguments. */ 800 J->base[J->maxslot] = 0; /* Mark end of arguments. */
801 (recff_func[m >> 8])(J, &rd); /* Call recff_* handler. */ 801 (recff_func[m >> 8])(J, &rd); /* Call recff_* handler. */
802 if (rd.nres >= 0) 802 if (rd.nres >= 0) {
803 if (J->postproc == LJ_POST_NONE) J->postproc = LJ_POST_FFRETRY;
803 lj_record_ret(J, 0, rd.nres); 804 lj_record_ret(J, 0, rd.nres);
805 }
804} 806}
805 807
806#undef IR 808#undef IR
diff --git a/src/lj_jit.h b/src/lj_jit.h
index e2dd5fb8..92631440 100644
--- a/src/lj_jit.h
+++ b/src/lj_jit.h
@@ -113,7 +113,8 @@ typedef enum {
113 LJ_POST_NONE, /* No action. */ 113 LJ_POST_NONE, /* No action. */
114 LJ_POST_FIXCOMP, /* Fixup comparison and emit pending guard. */ 114 LJ_POST_FIXCOMP, /* Fixup comparison and emit pending guard. */
115 LJ_POST_FIXGUARD, /* Fixup and emit pending guard. */ 115 LJ_POST_FIXGUARD, /* Fixup and emit pending guard. */
116 LJ_POST_FIXBOOL /* Fixup boolean result. */ 116 LJ_POST_FIXBOOL, /* Fixup boolean result. */
117 LJ_POST_FFRETRY /* Suppress recording of retried fast functions. */
117} PostProc; 118} PostProc;
118 119
119/* Machine code type. */ 120/* Machine code type. */
diff --git a/src/lj_record.c b/src/lj_record.c
index cfdd3e1a..e20d142a 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1400,6 +1400,10 @@ void lj_record_ins(jit_State *J)
1400 } 1400 }
1401 } 1401 }
1402 break; 1402 break;
1403 case LJ_POST_FFRETRY: /* Suppress recording of retried fast function. */
1404 if (bc_op(*J->pc) >= BC__MAX)
1405 return;
1406 break;
1403 default: lua_assert(0); break; 1407 default: lua_assert(0); break;
1404 } 1408 }
1405 J->postproc = LJ_POST_NONE; 1409 J->postproc = LJ_POST_NONE;