summaryrefslogtreecommitdiff
path: root/mjit.h
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2021-10-05 16:56:53 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:42 -0400
commit735b3a7748c5dfb1ee5e67962d3b86333fbe5212 (patch)
treeba7b567b92d9460234addc378c0689f9692d9e4f /mjit.h
parentb242ea87da6fabba04bc515b7bce26dc1ce0199e (diff)
Tweak mjit_exec() to remove YJIT symbol exports
We were exporting a couple of symbols in yjit.h because they could be used by code generated by MJIT. We don't want MJIT calling into YJIT code anyways so let's stop exporting them to libruby.so. Also adjust indentation and comments in mjit_exec().
Diffstat (limited to 'mjit.h')
-rw-r--r--mjit.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/mjit.h b/mjit.h
index 1694fcba88..acb8b22e25 100644
--- a/mjit.h
+++ b/mjit.h
@@ -137,28 +137,35 @@ mjit_exec_slowpath(rb_execution_context_t *ec, const rb_iseq_t *iseq, struct rb_
}
// Try to execute the current iseq in ec. Use JIT code if it is ready.
-// If it is not, add ISEQ to the compilation queue and return Qundef.
+// If it is not, add ISEQ to the compilation queue and return Qundef for MJIT.
+// YJIT compiles on the thread running the iseq.
static inline VALUE
mjit_exec(rb_execution_context_t *ec)
{
const rb_iseq_t *iseq = ec->cfp->iseq;
struct rb_iseq_constant_body *body = iseq->body;
+ bool yjit_enabled = false;
+#ifndef MJIT_HEADER
+ // Don't want to compile with YJIT or use code generated by YJIT
+ // when running inside code generated by MJIT.
+ yjit_enabled = rb_yjit_enabled_p();
+#endif
- if (mjit_call_p || rb_yjit_enabled_p()) {
+ if (mjit_call_p || yjit_enabled) {
body->total_calls++;
}
#ifndef MJIT_HEADER
- if (rb_yjit_enabled_p() && !mjit_call_p && body->total_calls == rb_yjit_call_threshold()) {
+ if (yjit_enabled && !mjit_call_p && body->total_calls == rb_yjit_call_threshold()) {
// If we couldn't generate any code for this iseq, then return
// Qundef so the interpreter will handle the call.
if (!rb_yjit_compile_iseq(iseq, ec)) {
- return Qundef;
+ return Qundef;
}
}
#endif
- if (!(mjit_call_p || rb_yjit_enabled_p()))
+ if (!(mjit_call_p || yjit_enabled))
return Qundef;
RB_DEBUG_COUNTER_INC(mjit_exec);
@@ -167,8 +174,8 @@ mjit_exec(rb_execution_context_t *ec)
// YJIT tried compiling this function once before and couldn't do
// it, so return Qundef so the interpreter handles it.
- if (rb_yjit_enabled_p() && func == 0) {
- return Qundef;
+ if (yjit_enabled && func == 0) {
+ return Qundef;
}
if (UNLIKELY((uintptr_t)func <= LAST_JIT_ISEQ_FUNC)) {