diff options
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; |
