Fix MicroJIT logic in MJIT exec

This commit is contained in:
Alan Wu 2020-10-19 11:42:05 -04:00
parent 6f4d17d622
commit 595e3a94fd
1 changed files with 12 additions and 8 deletions

20
mjit.h
View File

@ -143,21 +143,25 @@ mjit_exec(rb_execution_context_t *ec)
const rb_iseq_t *iseq;
struct rb_iseq_constant_body *body;
if (!mjit_call_p && !rb_ujit_enabled_p())
return Qundef;
RB_DEBUG_COUNTER_INC(mjit_exec);
iseq = ec->cfp->iseq;
body = iseq->body;
body->total_calls++;
if (mjit_call_p || rb_ujit_enabled_p()) {
iseq = ec->cfp->iseq;
body = iseq->body;
body->total_calls++;
}
#ifndef MJIT_HEADER
const int ujit_call_threashold = 10;
if (body->total_calls == ujit_call_threashold && !mjit_call_p) {
if (rb_ujit_enabled_p() && !mjit_call_p && body->total_calls == ujit_call_threashold) {
rb_ujit_compile_iseq(iseq);
return Qundef;
}
#endif
if (!mjit_call_p)
return Qundef;
RB_DEBUG_COUNTER_INC(mjit_exec);
mjit_func_t func = body->jit_func;
if (UNLIKELY((uintptr_t)func <= LAST_JIT_ISEQ_FUNC)) {
# ifdef MJIT_HEADER