19 enum rb_mjit_iseq_func {
21 NOT_ADDED_JIT_ISEQ_FUNC = 0,
24 NOT_READY_JIT_ISEQ_FUNC = 1,
27 NOT_COMPILED_JIT_ISEQ_FUNC = 2,
29 LAST_JIT_ISEQ_FUNC = 3
51 unsigned int min_calls;
61 struct rb_mjit_compile_info {
63 bool disable_ivar_cache;
65 bool disable_send_cache;
67 bool disable_inlining;
76 extern void rb_mjit_add_iseq_to_process(
const rb_iseq_t *iseq);
78 extern struct rb_mjit_compile_info* rb_mjit_iseq_compile_info(
const struct rb_iseq_constant_body *body);
79 extern void rb_mjit_recompile_iseq(
const rb_iseq_t *iseq);
82 extern bool mjit_compile(
FILE *
f,
const rb_iseq_t *iseq,
const char *funcname);
83 extern void mjit_init(
const struct mjit_options *opts);
84 extern void mjit_gc_start_hook(
void);
85 extern void mjit_gc_exit_hook(
void);
86 extern void mjit_free_iseq(
const rb_iseq_t *iseq);
87 extern void mjit_update_references(
const rb_iseq_t *iseq);
88 extern void mjit_mark(
void);
90 extern void mjit_cont_free(
struct mjit_cont *cont);
91 extern void mjit_add_class_serial(
rb_serial_t class_serial);
92 extern void mjit_remove_class_serial(
rb_serial_t class_serial);
96 #define JIT_ISEQ_SIZE_THRESHOLD 1000
102 return (body->
type == ISEQ_TYPE_METHOD || body->
type == ISEQ_TYPE_BLOCK)
103 && body->
iseq_size < JIT_ISEQ_SIZE_THRESHOLD;
113 long unsigned total_calls;
122 total_calls = ++body->total_calls;
124 func = body->jit_func;
131 switch ((
enum rb_mjit_iseq_func)func) {
132 case NOT_ADDED_JIT_ISEQ_FUNC:
134 if (total_calls ==
mjit_opts.min_calls && mjit_target_iseq_p(body)) {
136 rb_mjit_add_iseq_to_process(iseq);
138 return rb_mjit_wait_call(ec, body);
142 case NOT_READY_JIT_ISEQ_FUNC:
145 case NOT_COMPILED_JIT_ISEQ_FUNC:
159 return func(ec, ec->
cfp);
162 void mjit_child_after_fork(
void);
166 static inline void mjit_cont_free(
struct mjit_cont *cont){}
167 static inline void mjit_gc_start_hook(
void){}
168 static inline void mjit_gc_exit_hook(
void){}
169 static inline void mjit_free_iseq(
const rb_iseq_t *iseq){}
170 static inline void mjit_mark(
void){}
171 static inline void mjit_add_class_serial(
rb_serial_t class_serial){}
172 static inline void mjit_remove_class_serial(
rb_serial_t class_serial){}
174 static inline void mjit_child_after_fork(
void){}
177 #endif // RUBY_MJIT_H