summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2021-03-12 12:22:19 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:31 -0400
commit5d834bcf9fb9596fd15f9e657a94caa8716b3f10 (patch)
tree6ae91f07eb1172c40966f7631e204d827a0f17f0
parent439db7b81b588a1ee12475568cab7b8dab4e2cd3 (diff)
YJIT: lazy polymorphic getinstancevariable
Lazily compile out a chain of checks for different known classes and whether `self` embeds its ivars or not. * Remove trailing whitespaces * Get proper addresss in Capstone disassembly * Lowercase address in Capstone disassembly Capstone uses lowercase for jump targets in generated listings. Let's match it. * Use the same successor in getivar guard chains Cuts down on duplication * Address reviews * Fix copypasta error * Add a comment
-rw-r--r--bootstraptest/test_yjit.rb60
-rw-r--r--common.mk1631
-rw-r--r--tool/ruby_vm/models/instructions.rb1
-rw-r--r--vm_insnhelper.c6
-rw-r--r--yjit.rb9
-rw-r--r--yjit_codegen.c247
-rw-r--r--yjit_core.c17
-rw-r--r--yjit_iface.c6
-rw-r--r--yjit_iface.h4
9 files changed, 1093 insertions, 888 deletions
diff --git a/bootstraptest/test_yjit.rb b/bootstraptest/test_yjit.rb
index eac75d38a5..4750ac5fe8 100644
--- a/bootstraptest/test_yjit.rb
+++ b/bootstraptest/test_yjit.rb
@@ -301,3 +301,63 @@ assert_equal "good", %q{
foo
}
+
+# Test polymorphic getinstancevariable. T_OBJECT -> T_STRING
+assert_equal 'ok', %q{
+ @hello = @h1 = @h2 = @h3 = @h4 = 'ok'
+ str = ""
+ str.instance_variable_set(:@hello, 'ok')
+
+ public def get
+ @hello
+ end
+
+ get
+ get
+ str.get
+ str.get
+}
+
+# Test polymorphic getinstancevariable, two different classes
+assert_equal 'ok', %q{
+ class Embedded
+ def initialize
+ @ivar = 0
+ end
+
+ def get
+ @ivar
+ end
+ end
+
+ class Extended < Embedded
+ def initialize
+ @v1 = @v2 = @v3 = @v4 = @ivar = 'ok'
+ end
+ end
+
+ embed = Embedded.new
+ extend = Extended.new
+
+ embed.get
+ embed.get
+ extend.get
+ extend.get
+}
+
+# Test megamorphic getinstancevariable
+assert_equal 'ok', %q{
+ parent = Class.new do
+ def initialize
+ @hello = @h1 = @h2 = @h3 = @h4 = 'ok'
+ end
+
+ def get
+ @hello
+ end
+ end
+
+ subclasses = 300.times.map { Class.new(parent) }
+ subclasses.each { _1.new.get }
+ parent.new.get
+}
diff --git a/common.mk b/common.mk
index 2d2264e6e4..d78351bb28 100644
--- a/common.mk
+++ b/common.mk
@@ -3102,12 +3102,12 @@ compile.$(OBJEXT): {$(VPATH)}st.h
compile.$(OBJEXT): {$(VPATH)}subst.h
compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
compile.$(OBJEXT): {$(VPATH)}thread_native.h
-compile.$(OBJEXT): {$(VPATH)}yjit.h
compile.$(OBJEXT): {$(VPATH)}util.h
compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h
compile.$(OBJEXT): {$(VPATH)}vm_core.h
compile.$(OBJEXT): {$(VPATH)}vm_debug.h
compile.$(OBJEXT): {$(VPATH)}vm_opts.h
+compile.$(OBJEXT): {$(VPATH)}yjit.h
complex.$(OBJEXT): $(hdrdir)/ruby.h
complex.$(OBJEXT): $(hdrdir)/ruby/ruby.h
complex.$(OBJEXT): $(top_srcdir)/internal/array.h
@@ -3483,10 +3483,10 @@ cont.$(OBJEXT): {$(VPATH)}st.h
cont.$(OBJEXT): {$(VPATH)}subst.h
cont.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
cont.$(OBJEXT): {$(VPATH)}thread_native.h
-cont.$(OBJEXT): {$(VPATH)}yjit.h
cont.$(OBJEXT): {$(VPATH)}vm_core.h
cont.$(OBJEXT): {$(VPATH)}vm_debug.h
cont.$(OBJEXT): {$(VPATH)}vm_opts.h
+cont.$(OBJEXT): {$(VPATH)}yjit.h
debug.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
debug.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
debug.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -5577,11 +5577,11 @@ eval.$(OBJEXT): {$(VPATH)}st.h
eval.$(OBJEXT): {$(VPATH)}subst.h
eval.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
eval.$(OBJEXT): {$(VPATH)}thread_native.h
-eval.$(OBJEXT): {$(VPATH)}yjit.h
eval.$(OBJEXT): {$(VPATH)}vm.h
eval.$(OBJEXT): {$(VPATH)}vm_core.h
eval.$(OBJEXT): {$(VPATH)}vm_debug.h
eval.$(OBJEXT): {$(VPATH)}vm_opts.h
+eval.$(OBJEXT): {$(VPATH)}yjit.h
explicit_bzero.$(OBJEXT): {$(VPATH)}config.h
explicit_bzero.$(OBJEXT): {$(VPATH)}explicit_bzero.c
explicit_bzero.$(OBJEXT): {$(VPATH)}internal/attr/format.h
@@ -6027,13 +6027,13 @@ gc.$(OBJEXT): {$(VPATH)}thread.h
gc.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
gc.$(OBJEXT): {$(VPATH)}thread_native.h
gc.$(OBJEXT): {$(VPATH)}transient_heap.h
-gc.$(OBJEXT): {$(VPATH)}yjit.h
gc.$(OBJEXT): {$(VPATH)}util.h
gc.$(OBJEXT): {$(VPATH)}vm_callinfo.h
gc.$(OBJEXT): {$(VPATH)}vm_core.h
gc.$(OBJEXT): {$(VPATH)}vm_debug.h
gc.$(OBJEXT): {$(VPATH)}vm_opts.h
gc.$(OBJEXT): {$(VPATH)}vm_sync.h
+gc.$(OBJEXT): {$(VPATH)}yjit.h
goruby.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
goruby.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
goruby.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -7020,12 +7020,12 @@ iseq.$(OBJEXT): {$(VPATH)}st.h
iseq.$(OBJEXT): {$(VPATH)}subst.h
iseq.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
iseq.$(OBJEXT): {$(VPATH)}thread_native.h
-iseq.$(OBJEXT): {$(VPATH)}yjit.h
-iseq.$(OBJEXT): {$(VPATH)}yjit_asm.h
iseq.$(OBJEXT): {$(VPATH)}util.h
iseq.$(OBJEXT): {$(VPATH)}vm_callinfo.h
iseq.$(OBJEXT): {$(VPATH)}vm_core.h
iseq.$(OBJEXT): {$(VPATH)}vm_opts.h
+iseq.$(OBJEXT): {$(VPATH)}yjit.h
+iseq.$(OBJEXT): {$(VPATH)}yjit_asm.h
load.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
load.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
load.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -8474,10 +8474,10 @@ miniinit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
miniinit.$(OBJEXT): {$(VPATH)}thread_native.h
miniinit.$(OBJEXT): {$(VPATH)}timev.rb
miniinit.$(OBJEXT): {$(VPATH)}trace_point.rb
-miniinit.$(OBJEXT): {$(VPATH)}yjit.rb
miniinit.$(OBJEXT): {$(VPATH)}vm_core.h
miniinit.$(OBJEXT): {$(VPATH)}vm_opts.h
miniinit.$(OBJEXT): {$(VPATH)}warning.rb
+miniinit.$(OBJEXT): {$(VPATH)}yjit.rb
miniprelude.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
miniprelude.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
miniprelude.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -8723,13 +8723,13 @@ mjit.$(OBJEXT): {$(VPATH)}subst.h
mjit.$(OBJEXT): {$(VPATH)}thread.h
mjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
mjit.$(OBJEXT): {$(VPATH)}thread_native.h
-mjit.$(OBJEXT): {$(VPATH)}yjit.h
mjit.$(OBJEXT): {$(VPATH)}util.h
mjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
mjit.$(OBJEXT): {$(VPATH)}vm_core.h
mjit.$(OBJEXT): {$(VPATH)}vm_debug.h
mjit.$(OBJEXT): {$(VPATH)}vm_opts.h
mjit.$(OBJEXT): {$(VPATH)}vm_sync.h
+mjit.$(OBJEXT): {$(VPATH)}yjit.h
mjit_build_dir.$(OBJEXT): {$(VPATH)}config.h
mjit_build_dir.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
mjit_build_dir.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
@@ -8937,12 +8937,12 @@ mjit_compile.$(OBJEXT): {$(VPATH)}st.h
mjit_compile.$(OBJEXT): {$(VPATH)}subst.h
mjit_compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
mjit_compile.$(OBJEXT): {$(VPATH)}thread_native.h
-mjit_compile.$(OBJEXT): {$(VPATH)}yjit.h
mjit_compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h
mjit_compile.$(OBJEXT): {$(VPATH)}vm_core.h
mjit_compile.$(OBJEXT): {$(VPATH)}vm_exec.h
mjit_compile.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
mjit_compile.$(OBJEXT): {$(VPATH)}vm_opts.h
+mjit_compile.$(OBJEXT): {$(VPATH)}yjit.h
node.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
node.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
node.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -10372,10 +10372,10 @@ process.$(OBJEXT): {$(VPATH)}subst.h
process.$(OBJEXT): {$(VPATH)}thread.h
process.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
process.$(OBJEXT): {$(VPATH)}thread_native.h
-process.$(OBJEXT): {$(VPATH)}yjit.h
process.$(OBJEXT): {$(VPATH)}util.h
process.$(OBJEXT): {$(VPATH)}vm_core.h
process.$(OBJEXT): {$(VPATH)}vm_opts.h
+process.$(OBJEXT): {$(VPATH)}yjit.h
ractor.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
ractor.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
ractor.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -10590,12 +10590,12 @@ ractor.$(OBJEXT): {$(VPATH)}thread.h
ractor.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
ractor.$(OBJEXT): {$(VPATH)}thread_native.h
ractor.$(OBJEXT): {$(VPATH)}transient_heap.h
-ractor.$(OBJEXT): {$(VPATH)}yjit.h
ractor.$(OBJEXT): {$(VPATH)}variable.h
ractor.$(OBJEXT): {$(VPATH)}vm_core.h
ractor.$(OBJEXT): {$(VPATH)}vm_debug.h
ractor.$(OBJEXT): {$(VPATH)}vm_opts.h
ractor.$(OBJEXT): {$(VPATH)}vm_sync.h
+ractor.$(OBJEXT): {$(VPATH)}yjit.h
random.$(OBJEXT): $(hdrdir)/ruby.h
random.$(OBJEXT): $(hdrdir)/ruby/ruby.h
random.$(OBJEXT): $(top_srcdir)/internal/array.h
@@ -12533,10 +12533,10 @@ ruby.$(OBJEXT): {$(VPATH)}subst.h
ruby.$(OBJEXT): {$(VPATH)}thread.h
ruby.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
ruby.$(OBJEXT): {$(VPATH)}thread_native.h
-ruby.$(OBJEXT): {$(VPATH)}yjit.h
ruby.$(OBJEXT): {$(VPATH)}util.h
ruby.$(OBJEXT): {$(VPATH)}vm_core.h
ruby.$(OBJEXT): {$(VPATH)}vm_opts.h
+ruby.$(OBJEXT): {$(VPATH)}yjit.h
scheduler.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
scheduler.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
scheduler.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -14500,11 +14500,11 @@ thread.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
thread.$(OBJEXT): {$(VPATH)}thread_native.h
thread.$(OBJEXT): {$(VPATH)}thread_sync.c
thread.$(OBJEXT): {$(VPATH)}timev.h
-thread.$(OBJEXT): {$(VPATH)}yjit.h
thread.$(OBJEXT): {$(VPATH)}vm_core.h
thread.$(OBJEXT): {$(VPATH)}vm_debug.h
thread.$(OBJEXT): {$(VPATH)}vm_opts.h
thread.$(OBJEXT): {$(VPATH)}vm_sync.h
+thread.$(OBJEXT): {$(VPATH)}yjit.h
time.$(OBJEXT): $(hdrdir)/ruby.h
time.$(OBJEXT): $(hdrdir)/ruby/ruby.h
time.$(OBJEXT): $(top_srcdir)/internal/array.h
@@ -15077,802 +15077,6 @@ transient_heap.$(OBJEXT): {$(VPATH)}vm_core.h
transient_heap.$(OBJEXT): {$(VPATH)}vm_debug.h
transient_heap.$(OBJEXT): {$(VPATH)}vm_opts.h
transient_heap.$(OBJEXT): {$(VPATH)}vm_sync.h
-yjit_asm.$(OBJEXT): {$(VPATH)}yjit_asm.c
-yjit_asm.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_codegen.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-yjit_codegen.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-yjit_codegen.$(OBJEXT): $(CCAN_DIR)/list/list.h
-yjit_codegen.$(OBJEXT): $(CCAN_DIR)/str/str.h
-yjit_codegen.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/array.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/class.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/compile.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/gc.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/serial.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/vm.h
-yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}assert.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}atomic.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}builtin.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}config.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}darray.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}debug_counter.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}defines.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}id.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}id_table.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}insns.def
-yjit_codegen.$(OBJEXT): {$(VPATH)}insns.inc
-yjit_codegen.$(OBJEXT): {$(VPATH)}insns_info.inc
-yjit_codegen.$(OBJEXT): {$(VPATH)}intern.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/assume.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/cast.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/config.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/ctype.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/dosish.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/error.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/eval.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/event.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/gc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/glob.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/globals.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/iterator.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/memory.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/method.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/module.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/newobj.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/rgengc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/symbol.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/token_paste.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/value.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/value_type.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/variable.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}iseq.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}method.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}missing.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}node.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}ruby_assert.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}st.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}subst.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-yjit_codegen.$(OBJEXT): {$(VPATH)}thread_native.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_codegen.c
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_codegen.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_core.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_iface.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_utils.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}vm_core.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}vm_debug.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}vm_opts.h
-yjit_codegen.$(OBJEXT): {$(VPATH)}vm_sync.h
-yjit_compile.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-yjit_compile.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-yjit_compile.$(OBJEXT): $(CCAN_DIR)/list/list.h
-yjit_compile.$(OBJEXT): $(CCAN_DIR)/str/str.h
-yjit_compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/array.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/compile.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/gc.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/serial.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/vm.h
-yjit_compile.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-yjit_compile.$(OBJEXT): {$(VPATH)}assert.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-yjit_compile.$(OBJEXT): {$(VPATH)}builtin.h
-yjit_compile.$(OBJEXT): {$(VPATH)}config.h
-yjit_compile.$(OBJEXT): {$(VPATH)}debug_counter.h
-yjit_compile.$(OBJEXT): {$(VPATH)}defines.h
-yjit_compile.$(OBJEXT): {$(VPATH)}id.h
-yjit_compile.$(OBJEXT): {$(VPATH)}insns.def
-yjit_compile.$(OBJEXT): {$(VPATH)}insns.inc
-yjit_compile.$(OBJEXT): {$(VPATH)}insns_info.inc
-yjit_compile.$(OBJEXT): {$(VPATH)}intern.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/assume.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/cast.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/config.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/ctype.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/dosish.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/error.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/eval.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/event.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/gc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/glob.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/globals.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/iterator.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/memory.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/method.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/module.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/newobj.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/rgengc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/symbol.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/token_paste.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/value.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/value_type.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/variable.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-yjit_compile.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-yjit_compile.$(OBJEXT): {$(VPATH)}iseq.h
-yjit_compile.$(OBJEXT): {$(VPATH)}method.h
-yjit_compile.$(OBJEXT): {$(VPATH)}missing.h
-yjit_compile.$(OBJEXT): {$(VPATH)}node.h
-yjit_compile.$(OBJEXT): {$(VPATH)}ruby_assert.h
-yjit_compile.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-yjit_compile.$(OBJEXT): {$(VPATH)}st.h
-yjit_compile.$(OBJEXT): {$(VPATH)}subst.h
-yjit_compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-yjit_compile.$(OBJEXT): {$(VPATH)}thread_native.h
-yjit_compile.$(OBJEXT): {$(VPATH)}yjit.h
-yjit_compile.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_compile.$(OBJEXT): {$(VPATH)}yjit_compile.c
-yjit_compile.$(OBJEXT): {$(VPATH)}yjit_hooks.inc
-yjit_compile.$(OBJEXT): {$(VPATH)}yjit_utils.h
-yjit_compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-yjit_compile.$(OBJEXT): {$(VPATH)}vm_core.h
-yjit_compile.$(OBJEXT): {$(VPATH)}vm_debug.h
-yjit_compile.$(OBJEXT): {$(VPATH)}vm_opts.h
-yjit_compile.$(OBJEXT): {$(VPATH)}vm_sync.h
-yjit_core.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-yjit_core.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-yjit_core.$(OBJEXT): $(CCAN_DIR)/list/list.h
-yjit_core.$(OBJEXT): $(CCAN_DIR)/str/str.h
-yjit_core.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/array.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/gc.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/serial.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/vm.h
-yjit_core.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-yjit_core.$(OBJEXT): {$(VPATH)}assert.h
-yjit_core.$(OBJEXT): {$(VPATH)}atomic.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-yjit_core.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-yjit_core.$(OBJEXT): {$(VPATH)}builtin.h
-yjit_core.$(OBJEXT): {$(VPATH)}config.h
-yjit_core.$(OBJEXT): {$(VPATH)}darray.h
-yjit_core.$(OBJEXT): {$(VPATH)}debug_counter.h
-yjit_core.$(OBJEXT): {$(VPATH)}defines.h
-yjit_core.$(OBJEXT): {$(VPATH)}id.h
-yjit_core.$(OBJEXT): {$(VPATH)}insns.def
-yjit_core.$(OBJEXT): {$(VPATH)}insns.inc
-yjit_core.$(OBJEXT): {$(VPATH)}insns_info.inc
-yjit_core.$(OBJEXT): {$(VPATH)}intern.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/assume.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/cast.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/config.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/ctype.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/dosish.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/error.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/eval.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/event.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/gc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/glob.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/globals.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/iterator.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/memory.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/method.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/module.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/newobj.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/rgengc.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/symbol.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/token_paste.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/value.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/value_type.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/variable.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-yjit_core.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-yjit_core.$(OBJEXT): {$(VPATH)}iseq.h
-yjit_core.$(OBJEXT): {$(VPATH)}method.h
-yjit_core.$(OBJEXT): {$(VPATH)}missing.h
-yjit_core.$(OBJEXT): {$(VPATH)}node.h
-yjit_core.$(OBJEXT): {$(VPATH)}ruby_assert.h
-yjit_core.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-yjit_core.$(OBJEXT): {$(VPATH)}st.h
-yjit_core.$(OBJEXT): {$(VPATH)}subst.h
-yjit_core.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-yjit_core.$(OBJEXT): {$(VPATH)}thread_native.h
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_codegen.h
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_core.c
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_core.h
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_iface.h
-yjit_core.$(OBJEXT): {$(VPATH)}yjit_utils.h
-yjit_core.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-yjit_core.$(OBJEXT): {$(VPATH)}vm_core.h
-yjit_core.$(OBJEXT): {$(VPATH)}vm_debug.h
-yjit_core.$(OBJEXT): {$(VPATH)}vm_opts.h
-yjit_core.$(OBJEXT): {$(VPATH)}vm_sync.h
-yjit_iface.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-yjit_iface.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-yjit_iface.$(OBJEXT): $(CCAN_DIR)/list/list.h
-yjit_iface.$(OBJEXT): $(CCAN_DIR)/str/str.h
-yjit_iface.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/array.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/class.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/compile.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/gc.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/serial.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/vm.h
-yjit_iface.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-yjit_iface.$(OBJEXT): {$(VPATH)}assert.h
-yjit_iface.$(OBJEXT): {$(VPATH)}atomic.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-yjit_iface.$(OBJEXT): {$(VPATH)}builtin.h
-yjit_iface.$(OBJEXT): {$(VPATH)}config.h
-yjit_iface.$(OBJEXT): {$(VPATH)}darray.h
-yjit_iface.$(OBJEXT): {$(VPATH)}debug_counter.h
-yjit_iface.$(OBJEXT): {$(VPATH)}defines.h
-yjit_iface.$(OBJEXT): {$(VPATH)}id.h
-yjit_iface.$(OBJEXT): {$(VPATH)}id_table.h
-yjit_iface.$(OBJEXT): {$(VPATH)}insns.def
-yjit_iface.$(OBJEXT): {$(VPATH)}insns.inc
-yjit_iface.$(OBJEXT): {$(VPATH)}insns_info.inc
-yjit_iface.$(OBJEXT): {$(VPATH)}intern.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/assume.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/cast.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/config.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/ctype.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/dosish.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/error.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/eval.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/event.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/gc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/glob.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/globals.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/iterator.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/memory.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/method.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/module.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/newobj.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/rgengc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/symbol.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/token_paste.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/value.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/value_type.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/variable.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-yjit_iface.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-yjit_iface.$(OBJEXT): {$(VPATH)}iseq.h
-yjit_iface.$(OBJEXT): {$(VPATH)}method.h
-yjit_iface.$(OBJEXT): {$(VPATH)}missing.h
-yjit_iface.$(OBJEXT): {$(VPATH)}node.h
-yjit_iface.$(OBJEXT): {$(VPATH)}ruby_assert.h
-yjit_iface.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-yjit_iface.$(OBJEXT): {$(VPATH)}st.h
-yjit_iface.$(OBJEXT): {$(VPATH)}subst.h
-yjit_iface.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-yjit_iface.$(OBJEXT): {$(VPATH)}thread_native.h
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit.h
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit.rbinc
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_codegen.h
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_core.h
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_hooks.inc
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_iface.c
-yjit_iface.$(OBJEXT): {$(VPATH)}yjit_iface.h
-yjit_iface.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-yjit_iface.$(OBJEXT): {$(VPATH)}vm_core.h
-yjit_iface.$(OBJEXT): {$(VPATH)}vm_debug.h
-yjit_iface.$(OBJEXT): {$(VPATH)}vm_opts.h
-yjit_iface.$(OBJEXT): {$(VPATH)}vm_sync.h
-yjit_utils.$(OBJEXT): {$(VPATH)}yjit_asm.h
-yjit_utils.$(OBJEXT): {$(VPATH)}yjit_utils.c
-yjit_utils.$(OBJEXT): {$(VPATH)}yjit_utils.h
util.$(OBJEXT): $(hdrdir)/ruby.h
util.$(OBJEXT): $(hdrdir)/ruby/ruby.h
util.$(OBJEXT): $(top_srcdir)/internal/compilers.h
@@ -16439,14 +15643,14 @@ version.$(OBJEXT): {$(VPATH)}st.h
version.$(OBJEXT): {$(VPATH)}subst.h
version.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
version.$(OBJEXT): {$(VPATH)}thread_native.h
-version.$(OBJEXT): {$(VPATH)}yjit.h
-version.$(OBJEXT): {$(VPATH)}yjit_asm.h
-version.$(OBJEXT): {$(VPATH)}yjit_core.h
-version.$(OBJEXT): {$(VPATH)}yjit_iface.h
version.$(OBJEXT): {$(VPATH)}version.c
version.$(OBJEXT): {$(VPATH)}vm_callinfo.h
version.$(OBJEXT): {$(VPATH)}vm_core.h
version.$(OBJEXT): {$(VPATH)}vm_opts.h
+version.$(OBJEXT): {$(VPATH)}yjit.h
+version.$(OBJEXT): {$(VPATH)}yjit_asm.h
+version.$(OBJEXT): {$(VPATH)}yjit_core.h
+version.$(OBJEXT): {$(VPATH)}yjit_iface.h
vm.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
vm.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
vm.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -16677,7 +15881,6 @@ vm.$(OBJEXT): {$(VPATH)}st.h
vm.$(OBJEXT): {$(VPATH)}subst.h
vm.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
vm.$(OBJEXT): {$(VPATH)}thread_native.h
-vm.$(OBJEXT): {$(VPATH)}yjit.h
vm.$(OBJEXT): {$(VPATH)}variable.h
vm.$(OBJEXT): {$(VPATH)}vm.c
vm.$(OBJEXT): {$(VPATH)}vm.h
@@ -16696,6 +15899,7 @@ vm.$(OBJEXT): {$(VPATH)}vm_method.c
vm.$(OBJEXT): {$(VPATH)}vm_opts.h
vm.$(OBJEXT): {$(VPATH)}vm_sync.h
vm.$(OBJEXT): {$(VPATH)}vmtc.inc
+vm.$(OBJEXT): {$(VPATH)}yjit.h
vm_backtrace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
vm_backtrace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
vm_backtrace.$(OBJEXT): $(CCAN_DIR)/list/list.h
@@ -17487,8 +16691,805 @@ vm_trace.$(OBJEXT): {$(VPATH)}subst.h
vm_trace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
vm_trace.$(OBJEXT): {$(VPATH)}thread_native.h
vm_trace.$(OBJEXT): {$(VPATH)}trace_point.rbinc
-vm_trace.$(OBJEXT): {$(VPATH)}yjit.h
vm_trace.$(OBJEXT): {$(VPATH)}vm_core.h
vm_trace.$(OBJEXT): {$(VPATH)}vm_opts.h
vm_trace.$(OBJEXT): {$(VPATH)}vm_trace.c
+vm_trace.$(OBJEXT): {$(VPATH)}yjit.h
+yjit_asm.$(OBJEXT): {$(VPATH)}yjit_asm.c
+yjit_asm.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_codegen.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+yjit_codegen.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+yjit_codegen.$(OBJEXT): $(CCAN_DIR)/list/list.h
+yjit_codegen.$(OBJEXT): $(CCAN_DIR)/str/str.h
+yjit_codegen.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/array.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/class.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/compile.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/gc.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/object.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/serial.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/vm.h
+yjit_codegen.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}assert.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}atomic.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}builtin.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}config.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}darray.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}debug_counter.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}defines.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}id.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}id_table.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}insns.def
+yjit_codegen.$(OBJEXT): {$(VPATH)}insns.inc
+yjit_codegen.$(OBJEXT): {$(VPATH)}insns_info.inc
+yjit_codegen.$(OBJEXT): {$(VPATH)}intern.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/assume.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/cast.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/config.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/ctype.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/dosish.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/error.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/eval.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/event.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/gc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/glob.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/globals.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/iterator.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/memory.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/method.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/module.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/newobj.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/rgengc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/symbol.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/token_paste.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/value.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/value_type.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/variable.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}iseq.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}method.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}missing.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}node.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}ruby_assert.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}st.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}subst.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+yjit_codegen.$(OBJEXT): {$(VPATH)}thread_native.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}vm_core.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}vm_debug.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}vm_opts.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}vm_sync.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_codegen.c
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_codegen.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_core.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_iface.h
+yjit_codegen.$(OBJEXT): {$(VPATH)}yjit_utils.h
+yjit_compile.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+yjit_compile.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+yjit_compile.$(OBJEXT): $(CCAN_DIR)/list/list.h
+yjit_compile.$(OBJEXT): $(CCAN_DIR)/str/str.h
+yjit_compile.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/array.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/compile.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/gc.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/serial.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/vm.h
+yjit_compile.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+yjit_compile.$(OBJEXT): {$(VPATH)}assert.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+yjit_compile.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+yjit_compile.$(OBJEXT): {$(VPATH)}builtin.h
+yjit_compile.$(OBJEXT): {$(VPATH)}config.h
+yjit_compile.$(OBJEXT): {$(VPATH)}debug_counter.h
+yjit_compile.$(OBJEXT): {$(VPATH)}defines.h
+yjit_compile.$(OBJEXT): {$(VPATH)}id.h
+yjit_compile.$(OBJEXT): {$(VPATH)}insns.def
+yjit_compile.$(OBJEXT): {$(VPATH)}insns.inc
+yjit_compile.$(OBJEXT): {$(VPATH)}insns_info.inc
+yjit_compile.$(OBJEXT): {$(VPATH)}intern.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/assume.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/cast.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/config.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/ctype.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/dosish.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/error.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/eval.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/event.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/gc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/glob.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/globals.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/iterator.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/memory.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/method.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/module.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/newobj.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/rgengc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/symbol.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/token_paste.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/value.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/value_type.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/variable.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+yjit_compile.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+yjit_compile.$(OBJEXT): {$(VPATH)}iseq.h
+yjit_compile.$(OBJEXT): {$(VPATH)}method.h
+yjit_compile.$(OBJEXT): {$(VPATH)}missing.h
+yjit_compile.$(OBJEXT): {$(VPATH)}node.h
+yjit_compile.$(OBJEXT): {$(VPATH)}ruby_assert.h
+yjit_compile.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+yjit_compile.$(OBJEXT): {$(VPATH)}st.h
+yjit_compile.$(OBJEXT): {$(VPATH)}subst.h
+yjit_compile.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+yjit_compile.$(OBJEXT): {$(VPATH)}thread_native.h
+yjit_compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+yjit_compile.$(OBJEXT): {$(VPATH)}vm_core.h
+yjit_compile.$(OBJEXT): {$(VPATH)}vm_debug.h
+yjit_compile.$(OBJEXT): {$(VPATH)}vm_opts.h
+yjit_compile.$(OBJEXT): {$(VPATH)}vm_sync.h
+yjit_compile.$(OBJEXT): {$(VPATH)}yjit.h
+yjit_compile.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_compile.$(OBJEXT): {$(VPATH)}yjit_compile.c
+yjit_compile.$(OBJEXT): {$(VPATH)}yjit_hooks.inc
+yjit_compile.$(OBJEXT): {$(VPATH)}yjit_utils.h
+yjit_core.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+yjit_core.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+yjit_core.$(OBJEXT): $(CCAN_DIR)/list/list.h
+yjit_core.$(OBJEXT): $(CCAN_DIR)/str/str.h
+yjit_core.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/array.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/gc.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/serial.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/vm.h
+yjit_core.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+yjit_core.$(OBJEXT): {$(VPATH)}assert.h
+yjit_core.$(OBJEXT): {$(VPATH)}atomic.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+yjit_core.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+yjit_core.$(OBJEXT): {$(VPATH)}builtin.h
+yjit_core.$(OBJEXT): {$(VPATH)}config.h
+yjit_core.$(OBJEXT): {$(VPATH)}darray.h
+yjit_core.$(OBJEXT): {$(VPATH)}debug_counter.h
+yjit_core.$(OBJEXT): {$(VPATH)}defines.h
+yjit_core.$(OBJEXT): {$(VPATH)}id.h
+yjit_core.$(OBJEXT): {$(VPATH)}insns.def
+yjit_core.$(OBJEXT): {$(VPATH)}insns.inc
+yjit_core.$(OBJEXT): {$(VPATH)}insns_info.inc
+yjit_core.$(OBJEXT): {$(VPATH)}intern.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/assume.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/cast.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/config.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/ctype.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/dosish.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/error.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/eval.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/event.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/gc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/glob.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/globals.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/iterator.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/memory.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/method.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/module.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/newobj.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/rgengc.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/symbol.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/token_paste.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/value.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/value_type.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/variable.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+yjit_core.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+yjit_core.$(OBJEXT): {$(VPATH)}iseq.h
+yjit_core.$(OBJEXT): {$(VPATH)}method.h
+yjit_core.$(OBJEXT): {$(VPATH)}missing.h
+yjit_core.$(OBJEXT): {$(VPATH)}node.h
+yjit_core.$(OBJEXT): {$(VPATH)}ruby_assert.h
+yjit_core.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+yjit_core.$(OBJEXT): {$(VPATH)}st.h
+yjit_core.$(OBJEXT): {$(VPATH)}subst.h
+yjit_core.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+yjit_core.$(OBJEXT): {$(VPATH)}thread_native.h
+yjit_core.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+yjit_core.$(OBJEXT): {$(VPATH)}vm_core.h
+yjit_core.$(OBJEXT): {$(VPATH)}vm_debug.h
+yjit_core.$(OBJEXT): {$(VPATH)}vm_opts.h
+yjit_core.$(OBJEXT): {$(VPATH)}vm_sync.h
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_codegen.h
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_core.c
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_core.h
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_iface.h
+yjit_core.$(OBJEXT): {$(VPATH)}yjit_utils.h
+yjit_iface.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+yjit_iface.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+yjit_iface.$(OBJEXT): $(CCAN_DIR)/list/list.h
+yjit_iface.$(OBJEXT): $(CCAN_DIR)/str/str.h
+yjit_iface.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/array.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/class.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/compile.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/gc.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/serial.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/vm.h
+yjit_iface.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+yjit_iface.$(OBJEXT): {$(VPATH)}assert.h
+yjit_iface.$(OBJEXT): {$(VPATH)}atomic.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+yjit_iface.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+yjit_iface.$(OBJEXT): {$(VPATH)}builtin.h
+yjit_iface.$(OBJEXT): {$(VPATH)}config.h
+yjit_iface.$(OBJEXT): {$(VPATH)}darray.h
+yjit_iface.$(OBJEXT): {$(VPATH)}debug_counter.h
+yjit_iface.$(OBJEXT): {$(VPATH)}defines.h
+yjit_iface.$(OBJEXT): {$(VPATH)}id.h
+yjit_iface.$(OBJEXT): {$(VPATH)}id_table.h
+yjit_iface.$(OBJEXT): {$(VPATH)}insns.def
+yjit_iface.$(OBJEXT): {$(VPATH)}insns.inc
+yjit_iface.$(OBJEXT): {$(VPATH)}insns_info.inc
+yjit_iface.$(OBJEXT): {$(VPATH)}intern.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/assume.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/cast.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/config.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/ctype.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/dosish.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/error.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/eval.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/event.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/gc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/glob.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/globals.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/gc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/iterator.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/memory.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/method.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/module.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/newobj.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/rgengc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/symbol.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/token_paste.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/value.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/value_type.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/variable.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+yjit_iface.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+yjit_iface.$(OBJEXT): {$(VPATH)}iseq.h
+yjit_iface.$(OBJEXT): {$(VPATH)}method.h
+yjit_iface.$(OBJEXT): {$(VPATH)}missing.h
+yjit_iface.$(OBJEXT): {$(VPATH)}node.h
+yjit_iface.$(OBJEXT): {$(VPATH)}ruby_assert.h
+yjit_iface.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+yjit_iface.$(OBJEXT): {$(VPATH)}st.h
+yjit_iface.$(OBJEXT): {$(VPATH)}subst.h
+yjit_iface.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+yjit_iface.$(OBJEXT): {$(VPATH)}thread_native.h
+yjit_iface.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+yjit_iface.$(OBJEXT): {$(VPATH)}vm_core.h
+yjit_iface.$(OBJEXT): {$(VPATH)}vm_debug.h
+yjit_iface.$(OBJEXT): {$(VPATH)}vm_opts.h
+yjit_iface.$(OBJEXT): {$(VPATH)}vm_sync.h
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit.h
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit.rbinc
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_codegen.h
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_core.h
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_hooks.inc
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_iface.c
+yjit_iface.$(OBJEXT): {$(VPATH)}yjit_iface.h
+yjit_utils.$(OBJEXT): {$(VPATH)}yjit_asm.h
+yjit_utils.$(OBJEXT): {$(VPATH)}yjit_utils.c
+yjit_utils.$(OBJEXT): {$(VPATH)}yjit_utils.h
# AUTOGENERATED DEPENDENCIES END
diff --git a/tool/ruby_vm/models/instructions.rb b/tool/ruby_vm/models/instructions.rb
index ecf9fe7b6b..1533872d66 100644
--- a/tool/ruby_vm/models/instructions.rb
+++ b/tool/ruby_vm/models/instructions.rb
@@ -21,6 +21,5 @@ RubyVM::Instructions = RubyVM::BareInstructions.to_a + \
RubyVM::MicroJIT::ExampleInstructions.to_a
-
require_relative 'trace_instructions'
RubyVM::Instructions.freeze
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index f743e07e03..16f46e50d3 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1099,6 +1099,12 @@ iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl
return found ? true : false;
}
+bool
+rb_iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl_entry **ent)
+{
+ return iv_index_tbl_lookup(iv_index_tbl, id, ent);
+}
+
ALWAYS_INLINE(static void fill_ivar_cache(const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr, struct rb_iv_index_tbl_entry *ent));
static inline void
diff --git a/yjit.rb b/yjit.rb
index 487399e1b5..323d6bfea9 100644
--- a/yjit.rb
+++ b/yjit.rb
@@ -14,13 +14,13 @@ module YJIT
# Sort the blocks by increasing addresses
blocks.sort_by(&:address).each_with_index do |block, i|
- str << "== BLOCK #{i+1}/#{blocks.length}: #{block.code.length} BYTES, ISEQ RANGE [#{block.iseq_start_index},#{block.iseq_end_index}[ ".ljust(80, "=")
+ str << "== BLOCK #{i+1}/#{blocks.length}: #{block.code.length} BYTES, ISEQ RANGE [#{block.iseq_start_index},#{block.iseq_end_index}] ".ljust(80, "=")
str << "\n"
- cs.disasm(block.code, 0).each do |i|
+ cs.disasm(block.code, block.address).each do |i|
str << sprintf(
- " %<address>08X: %<instruction>s\t%<details>s\n",
- address: block.address + i.address,
+ " %<address>08x: %<instruction>s\t%<details>s\n",
+ address: i.address,
instruction: i.mnemonic,
details: i.op_str
)
@@ -62,6 +62,7 @@ module YJIT
print_counters(counters, prefix: 'oswb_', prompt: 'opt_send_without_block exit reasons: ')
print_counters(counters, prefix: 'leave_', prompt: 'leave exit reasons: ')
+ print_counters(counters, prefix: 'getivar_', prompt: 'getinstancevariable exit reasons:')
end
def print_counters(counters, prefix:, prompt:)
diff --git a/yjit_codegen.c b/yjit_codegen.c
index 3ece2b9fe8..5081e2c19f 100644
--- a/yjit_codegen.c
+++ b/yjit_codegen.c
@@ -7,6 +7,7 @@
#include "builtin.h"
#include "internal/compile.h"
#include "internal/class.h"
+#include "internal/object.h"
#include "insns_info.inc"
#include "yjit.h"
#include "yjit_iface.h"
@@ -99,6 +100,12 @@ jit_peek_at_stack(jitstate_t* jit, ctx_t* ctx)
return *(sp - 1);
}
+static VALUE
+jit_peek_at_self(jitstate_t *jit, ctx_t *ctx)
+{
+ return jit->ec->cfp->self;
+}
+
// Save YJIT registers prior to a C call
static void
yjit_save_regs(codeblock_t* cb)
@@ -564,102 +571,226 @@ guard_self_is_object(codeblock_t *cb, x86opnd_t self_opnd, uint8_t *side_exit, c
je_ptr(cb, side_exit);
cmp(cb, self_opnd, imm_opnd(Qnil));
je_ptr(cb, side_exit);
+
+ // maybe we can do
+ // RUBY_ASSERT(Qfalse < Qnil);
+ // cmp(cb, self_opnd, imm_opnd(Qnil));
+ // jbe(cb, side_exit);
+
+
ctx->self_is_object = true;
}
}
-static codegen_status_t
-gen_getinstancevariable(jitstate_t* jit, ctx_t* ctx)
+static void
+gen_jnz_to_target0(codeblock_t *cb, uint8_t *target0, uint8_t *target1, uint8_t shape)
{
- IVC ic = (IVC)jit_get_arg(jit, 1);
+ switch (shape)
+ {
+ case SHAPE_NEXT0:
+ case SHAPE_NEXT1:
+ RUBY_ASSERT(false);
+ break;
- // Check that the inline cache has been set, slot index is known
- if (!ic->entry) {
- return YJIT_CANT_COMPILE;
+ case SHAPE_DEFAULT:
+ jnz_ptr(cb, target0);
+ break;
}
+}
- // Defer compilation so we can peek at the topmost object
- if (!jit_at_current_insn(jit))
+static void
+gen_jz_to_target0(codeblock_t *cb, uint8_t *target0, uint8_t *target1, uint8_t shape)
+{
+ switch (shape)
{
- defer_compilation(jit->block, jit->insn_idx, ctx);
- return YJIT_END_BLOCK;
- }
-
- // Peek at the topmost value on the stack at compilation time
- VALUE top_val = jit_peek_at_stack(jit, ctx);
-
- // TODO: play with deferred compilation and sidechains! :)
-
-
-
+ case SHAPE_NEXT0:
+ case SHAPE_NEXT1:
+ RUBY_ASSERT(false);
+ break;
+ case SHAPE_DEFAULT:
+ jz_ptr(cb, target0);
+ break;
+ }
+}
+enum jcc_kinds {
+ JCC_JNE,
+ JCC_JNZ,
+ JCC_JZ,
+ JCC_JE,
+};
+// Generate a jump to a stub that recompiles the current YARV instruction on failure.
+// When depth_limitk is exceeded, generate a jump to a side exit.
+static void
+jit_chain_guard(enum jcc_kinds jcc, jitstate_t *jit, ctx_t *ctx, uint8_t depth_limit, uint8_t *side_exit)
+{
+ branchgen_fn target0_gen_fn;
+ switch (jcc) {
+ case JCC_JNE:
+ case JCC_JNZ:
+ target0_gen_fn = gen_jnz_to_target0;
+ break;
+ case JCC_JZ:
+ case JCC_JE:
+ target0_gen_fn = gen_jz_to_target0;
+ break;
+ default:
+ RUBY_ASSERT(false && "unimplemented jump kind");
+ break;
+ };
+ if (ctx->chain_depth < depth_limit) {
+ ctx_t deeper = *ctx;
+ deeper.chain_depth++;
+
+ gen_branch(
+ ctx,
+ (blockid_t) { jit->iseq, jit->insn_idx },
+ &deeper,
+ BLOCKID_NULL,
+ NULL,
+ target0_gen_fn
+ );
+ }
+ else {
+ target0_gen_fn(cb, side_exit, NULL, SHAPE_DEFAULT);
+ }
+}
+bool rb_iv_index_tbl_lookup(struct st_table *iv_index_tbl, ID id, struct rb_iv_index_tbl_entry **ent); // vm_insnhelper.c
+enum {
+ GETIVAR_MAX_DEPTH = 10 // up to 5 different classes, and embedded or not for each
+};
+static codegen_status_t
+gen_getinstancevariable(jitstate_t* jit, ctx_t* ctx)
+{
+ // Defer compilation so we can specialize a runtime `self`
+ if (!jit_at_current_insn(jit)) {
+ defer_compilation(jit->block, jit->insn_idx, ctx);
+ return YJIT_END_BLOCK;
+ }
+ // Specialize base on the compile time self
+ VALUE self_val = jit_peek_at_self(jit, ctx);
+ VALUE self_klass = rb_class_of(self_val);
+ // Create a size-exit to fall back to the interpreter
+ uint8_t *side_exit = yjit_side_exit(jit, ctx);
// If the class uses the default allocator, instances should all be T_OBJECT
// NOTE: This assumes nobody changes the allocator of the class after allocation.
// Eventually, we can encode whether an object is T_OBJECT or not
// inside object shapes.
- if (rb_get_alloc_func(ic->entry->class_value) != rb_class_allocate_instance) {
- return YJIT_CANT_COMPILE;
+ if (rb_get_alloc_func(self_klass) != rb_class_allocate_instance) {
+ jmp_ptr(cb, side_exit);
+ return YJIT_END_BLOCK;
}
+ RUBY_ASSERT(BUILTIN_TYPE(self_val) == T_OBJECT); // because we checked the allocator
- uint32_t ivar_index = ic->entry->index;
+ ID id = (ID)jit_get_arg(jit, 0);
+ struct rb_iv_index_tbl_entry *ent;
+ struct st_table *iv_index_tbl = ROBJECT_IV_INDEX_TBL(self_val);
- // Create a size-exit to fall back to the interpreter
- uint8_t* side_exit = yjit_side_exit(jit, ctx);
+ // Lookup index for the ivar the instruction loads
+ if (iv_index_tbl && rb_iv_index_tbl_lookup(iv_index_tbl, id, &ent)) {
+ uint32_t ivar_index = ent->index;
- // Load self from CFP
- mov(cb, REG0, member_opnd(REG_CFP, rb_control_frame_t, self));
+ // Load self from CFP
+ mov(cb, REG0, member_opnd(REG_CFP, rb_control_frame_t, self));
- guard_self_is_object(cb, REG0, side_exit, ctx);
+ guard_self_is_object(cb, REG0, COUNTED_EXIT(side_exit, getivar_se_self_not_heap), ctx);
- // Bail if receiver class is different from compiled time call cache class
- x86opnd_t klass_opnd = mem_opnd(64, REG0, offsetof(struct RBasic, klass));
- mov(cb, REG1, klass_opnd);
- x86opnd_t serial_opnd = mem_opnd(64, REG1, offsetof(struct RClass, class_serial));
- cmp(cb, serial_opnd, imm_opnd(ic->entry->class_serial));
- jne_ptr(cb, side_exit);
+ // Guard that self has a known class
+ x86opnd_t klass_opnd = mem_opnd(64, REG0, offsetof(struct RBasic, klass));
+ mov(cb, REG1, klass_opnd);
+ x86opnd_t serial_opnd = mem_opnd(64, REG1, offsetof(struct RClass, class_serial));
+ cmp(cb, serial_opnd, imm_opnd(RCLASS_SERIAL(self_klass)));
+ jit_chain_guard(JCC_JNE, jit, ctx, GETIVAR_MAX_DEPTH, side_exit);
- // Bail if the ivars are not on the extended table
- // See ROBJECT_IVPTR() from include/ruby/internal/core/robject.h
- x86opnd_t flags_opnd = member_opnd(REG0, struct RBasic, flags);
- test(cb, flags_opnd, imm_opnd(ROBJECT_EMBED));
- jnz_ptr(cb, side_exit);
+ // Compile time self is embedded and the ivar index is within the object
+ if (RB_FL_TEST_RAW(self_val, ROBJECT_EMBED) && ivar_index < ROBJECT_EMBED_LEN_MAX) {
+ // See ROBJECT_IVPTR() from include/ruby/internal/core/robject.h
- // check that the extended table is big enough
- if (ivar_index >= ROBJECT_EMBED_LEN_MAX + 1) {
- // Check that the slot is inside the extended table (num_slots > index)
- x86opnd_t num_slots = mem_opnd(32, REG0, offsetof(struct RObject, as.heap.numiv));
- cmp(cb, num_slots, imm_opnd(ivar_index));
- jle_ptr(cb, side_exit);
- }
+ // Guard that self is embedded
+ // TODO: BT and JC is shorter
+ x86opnd_t flags_opnd = member_opnd(REG0, struct RBasic, flags);
+ test(cb, flags_opnd, imm_opnd(ROBJECT_EMBED));
+ jit_chain_guard(JCC_JZ, jit, ctx, GETIVAR_MAX_DEPTH, side_exit);
- // Get a pointer to the extended table
- x86opnd_t tbl_opnd = mem_opnd(64, REG0, offsetof(struct RObject, as.heap.ivptr));
- mov(cb, REG0, tbl_opnd);
+ // Load the variable
+ x86opnd_t ivar_opnd = mem_opnd(64, REG0, offsetof(struct RObject, as.ary) + ivar_index * SIZEOF_VALUE);
+ mov(cb, REG1, ivar_opnd);
- // Read the ivar from the extended table
- x86opnd_t ivar_opnd = mem_opnd(64, REG0, sizeof(VALUE) * ivar_index);
- mov(cb, REG0, ivar_opnd);
+ // Guard that the variable is not Qundef
+ cmp(cb, REG1, imm_opnd(Qundef));
+ je_ptr(cb, COUNTED_EXIT(side_exit, getivar_undef));
- // Check that the ivar is not Qundef
- cmp(cb, REG0, imm_opnd(Qundef));
- je_ptr(cb, side_exit);
+ // Push the ivar on the stack
+ x86opnd_t out_opnd = ctx_stack_push(ctx, T_NONE);
+ mov(cb, out_opnd, REG1);
+ }
+ else {
+ // Compile time self is *not* embeded.
+
+ // Guard that self is *not* embedded
+ // See ROBJECT_IVPTR() from include/ruby/internal/core/robject.h
+ x86opnd_t flags_opnd = member_opnd(REG0, struct RBasic, flags);
+ test(cb, flags_opnd, imm_opnd(ROBJECT_EMBED));
+ jit_chain_guard(JCC_JNZ, jit, ctx, GETIVAR_MAX_DEPTH, side_exit);
+
+ // check that the extended table is big enough
+ if (ivar_index >= ROBJECT_EMBED_LEN_MAX + 1) {
+ // Check that the slot is inside the extended table (num_slots > index)
+ x86opnd_t num_slots = mem_opnd(32, REG0, offsetof(struct RObject, as.heap.numiv));
+ cmp(cb, num_slots, imm_opnd(ivar_index));
+ jle_ptr(cb, COUNTED_EXIT(side_exit, getivar_idx_out_of_range));
+ }
+
+ // Get a pointer to the extended table
+ x86opnd_t tbl_opnd = mem_opnd(64, REG0, offsetof(struct RObject, as.heap.ivptr));
+ mov(cb, REG0, tbl_opnd);
+
+ // Read the ivar from the extended table
+ x86opnd_t ivar_opnd = mem_opnd(64, REG0, sizeof(VALUE) * ivar_index);
+ mov(cb, REG0, ivar_opnd);
+
+ // Check that the ivar is not Qundef
+ cmp(cb, REG0, imm_opnd(Qundef));
+ je_ptr(cb, COUNTED_EXIT(side_exit, getivar_undef));
+
+ // Push the ivar on the stack
+ x86opnd_t out_opnd = ctx_stack_push(ctx, T_NONE);
+ mov(cb, out_opnd, REG0);
+ }
- // Push the ivar on the stack
- x86opnd_t out_opnd = ctx_stack_push(ctx, T_NONE);
- mov(cb, out_opnd, REG0);
- return YJIT_KEEP_COMPILING;
+ // Jump to next instruction. This allows guard chains to share the same successor.
+ {
+ ctx_t reset_depth = *ctx;
+ reset_depth.chain_depth = 0;
+
+ blockid_t jump_block = { jit->iseq, jit_next_insn_idx(jit) };
+
+ // Generate the jump instruction
+ gen_direct_jump(
+ &reset_depth,
+ jump_block
+ );
+ }
+
+ return YJIT_END_BLOCK;
+ }
+
+ // Take side exit because YJIT_CANT_COMPILE can exit to a JIT entry point and
+ // form an infinite loop when chain_depth > 0.
+ jmp_ptr(cb, side_exit);
+ return YJIT_END_BLOCK;
}
static codegen_status_t
diff --git a/yjit_core.c b/yjit_core.c
index ecca311a46..6bd9230c78 100644
--- a/yjit_core.c
+++ b/yjit_core.c
@@ -10,7 +10,7 @@
#define MAX_VERSIONS 4
// Maximum number of branch instructions we can track
-#define MAX_BRANCHES 32768
+#define MAX_BRANCHES 100000
// Registered branch entries
branch_t branch_entries[MAX_BRANCHES];
@@ -344,7 +344,8 @@ uint8_t* gen_entry_point(const rb_iseq_t *iseq, uint32_t insn_idx, rb_execution_
// Called by the generated code when a branch stub is executed
// Triggers compilation of branches and code patching
-uint8_t* branch_stub_hit(uint32_t branch_idx, uint32_t target_idx, rb_execution_context_t* ec)
+static uint8_t *
+branch_stub_hit(uint32_t branch_idx, uint32_t target_idx, rb_execution_context_t* ec)
{
uint8_t* dst_addr;
@@ -380,18 +381,18 @@ uint8_t* branch_stub_hit(uint32_t branch_idx, uint32_t target_idx, rb_execution_
ctx_t generic_ctx = DEFAULT_CTX;
generic_ctx.stack_size = target_ctx->stack_size;
generic_ctx.sp_offset = target_ctx->sp_offset;
- if (get_num_versions(target) >= MAX_VERSIONS - 1)
- {
- //fprintf(stderr, "version limit hit in branch_stub_hit\n");
- target_ctx = &generic_ctx;
+ if (target_ctx->chain_depth == 0) { // guard chains implement limits individually
+ if (get_num_versions(target) >= MAX_VERSIONS - 1) {
+ //fprintf(stderr, "version limit hit in branch_stub_hit\n");
+ target_ctx = &generic_ctx;
+ }
}
// Try to find a compiled version of this block
block_t* p_block = find_block_version(target, target_ctx);
// If this block hasn't yet been compiled
- if (!p_block)
- {
+ if (!p_block) {
p_block = gen_block_version(target, target_ctx, ec);
}
diff --git a/yjit_iface.c b/yjit_iface.c
index df5f4baa87..0229f8e1ba 100644
--- a/yjit_iface.c
+++ b/yjit_iface.c
@@ -506,7 +506,9 @@ yjit_disasm_init(VALUE klass)
{
csh * handle;
VALUE disasm = TypedData_Make_Struct(klass, csh, &yjit_disasm_type, handle);
- cs_open(CS_ARCH_X86, CS_MODE_64, handle);
+ if (cs_open(CS_ARCH_X86, CS_MODE_64, handle) != CS_ERR_OK) {
+ rb_raise(rb_eRuntimeError, "failed to make Capstone handle");
+ }
return disasm;
}
@@ -518,7 +520,7 @@ yjit_disasm(VALUE self, VALUE code, VALUE from)
cs_insn *insns;
TypedData_Get_Struct(self, csh, &yjit_disasm_type, handle);
- count = cs_disasm(*handle, (uint8_t*)StringValuePtr(code), RSTRING_LEN(code), NUM2INT(from), 0, &insns);
+ count = cs_disasm(*handle, (uint8_t*)StringValuePtr(code), RSTRING_LEN(code), NUM2ULL(from), 0, &insns);
VALUE insn_list = rb_ary_new_capa(count);
for (size_t i = 0; i < count; i++) {
diff --git a/yjit_iface.h b/yjit_iface.h
index 88e65322eb..5a5ba1c448 100644
--- a/yjit_iface.h
+++ b/yjit_iface.h
@@ -47,6 +47,10 @@ YJIT_DECLARE_COUNTERS(
leave_se_finish_frame,
leave_se_interrupt,
+ getivar_se_self_not_heap,
+ getivar_idx_out_of_range,
+ getivar_undef,
+
// Member with known name for iterating over counters
last_member
)