diff options
author | Mike Pall <mike> | 2011-03-07 20:03:38 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-03-07 20:03:38 +0100 |
commit | 8eb09fe820fe8621e5e9684757ec21c633cf557a (patch) | |
tree | afa9ed4de4131503defe96f122b9717ff8fca2cc /src | |
parent | f29a9d4341c64fa47c735bdf6ae1f379b6b6464c (diff) | |
download | luajit-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.c | 4 | ||||
-rw-r--r-- | src/lj_jit.h | 3 | ||||
-rw-r--r-- | src/lj_record.c | 4 |
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; |