12 #include "ruby/internal/config.h"
19 # define MJIT_STATS RUBY_DEBUG
27 enum rb_mjit_func_state {
29 MJIT_FUNC_NOT_COMPILED = 0,
32 MJIT_FUNC_COMPILING = 1,
38 #define MJIT_FUNC_STATE_P(jit_func) ((uintptr_t)(jit_func) <= (uintptr_t)MJIT_FUNC_FAILED)
59 unsigned int call_threshold;
77 struct rb_mjit_compile_info {
79 bool disable_ivar_cache;
81 bool disable_exivar_cache;
83 bool disable_send_cache;
85 bool disable_inlining;
87 bool disable_const_cache;
92 RUBY_SYMBOL_EXPORT_BEGIN
96 extern void rb_mjit_compile(
const rb_iseq_t *iseq);
97 extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(
const struct rb_iseq_constant_body *body);
98 extern void rb_mjit_recompile_send(
const rb_iseq_t *iseq);
99 extern void rb_mjit_recompile_ivar(
const rb_iseq_t *iseq);
100 extern void rb_mjit_recompile_exivar(
const rb_iseq_t *iseq);
101 extern void rb_mjit_recompile_inlining(
const rb_iseq_t *iseq);
102 extern void rb_mjit_recompile_const(
const rb_iseq_t *iseq);
103 RUBY_SYMBOL_EXPORT_END
105 extern void mjit_cancel_all(
const char *reason);
106 extern bool mjit_compile(
FILE *f,
const rb_iseq_t *iseq,
const char *funcname,
int id);
107 extern void mjit_init(
const struct mjit_options *opts);
108 extern void mjit_free_iseq(
const rb_iseq_t *iseq);
110 extern void mjit_mark(
void);
111 extern void rb_mjit_iseq_mark(
VALUE mjit_blocks);
112 extern void mjit_notify_waitpid(
int exit_code);
114 extern void rb_mjit_bop_redefined(
int redefined_flag,
enum ruby_basic_operators bop);
116 extern void rb_mjit_before_ractor_spawn(
void);
117 extern void rb_mjit_constant_state_changed(
ID id);
118 extern void rb_mjit_constant_ic_update(
const rb_iseq_t *
const iseq,
IC ic,
unsigned insn_idx);
119 extern void rb_mjit_tracing_invalidate_all(
rb_event_flag_t new_iseq_events);
121 void mjit_child_after_fork(
void);
123 extern void rb_mjit_bop_redefined(
int redefined_flag,
enum ruby_basic_operators bop);
124 extern void rb_mjit_before_ractor_spawn(
void);
125 extern void rb_mjit_tracing_invalidate_all(
rb_event_flag_t new_iseq_events);
126 extern void rb_mjit_collect_vm_usage_insn(
int insn);
128 extern bool mjit_enabled;
129 extern bool mjit_stats_enabled;
130 VALUE mjit_pause(
bool wait_p);
131 VALUE mjit_resume(
void);
132 void mjit_finish(
bool close_handle_p);
136 static inline void mjit_cancel_all(
const char *reason){}
137 static inline void mjit_free_iseq(
const rb_iseq_t *iseq){}
138 static inline void mjit_mark(
void){}
140 static inline void mjit_child_after_fork(
void){}
142 static inline void rb_mjit_bop_redefined(
int redefined_flag,
enum ruby_basic_operators bop) {}
144 static inline void rb_mjit_before_ractor_spawn(
void) {}
145 static inline void rb_mjit_constant_state_changed(
ID id) {}
146 static inline void rb_mjit_constant_ic_update(
const rb_iseq_t *
const iseq,
IC ic,
unsigned insn_idx) {}
147 static inline void rb_mjit_tracing_invalidate_all(
rb_event_flag_t new_iseq_events) {}
149 #define mjit_enabled false
150 #define mjit_stats_enabled false
151 static inline VALUE mjit_pause(
bool wait_p){
return Qnil; }
152 static inline VALUE mjit_resume(
void){
return Qnil; }
153 static inline void mjit_finish(
bool close_handle_p){}
155 static inline void rb_mjit_collect_vm_usage_insn(
int insn) {}
#define RUBY_EXTERN
Declaration of externally visible global variables.
uint32_t rb_event_flag_t
Represents event(s).
#define Qundef
Old name of RUBY_Qundef.
#define Qnil
Old name of RUBY_Qnil.
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
uintptr_t VALUE
Type that represents a Ruby object.