summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/compilers.yml7
-rw-r--r--common.mk925
-rw-r--r--configure.ac79
-rw-r--r--rjit.c108
-rw-r--r--rjit.h11
-rw-r--r--rjit_c.c82
-rw-r--r--rjit_c.rb24
-rw-r--r--vm.c8
-rw-r--r--vm_core.h2
9 files changed, 742 insertions, 504 deletions
diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml
index 06ad18085d..7beb6d9624 100644
--- a/.github/workflows/compilers.yml
+++ b/.github/workflows/compilers.yml
@@ -197,8 +197,10 @@ jobs:
# - { name: VM_DEBUG_BP_CHECK, env: { cppflags: '-DVM_DEBUG_BP_CHECK' } }
# - { name: VM_DEBUG_VERIFY_METHOD_CACHE, env: { cppflags: '-DVM_DEBUG_VERIFY_METHOD_CACHE' } }
+ - { name: enable-yjit, env: { append_configure: '--enable-yjit --disable-rjit' }, rust: true }
+ - { name: enable-rjit, env: { append_configure: '--enable-rjit --disable-yjit' } }
+ - { name: YJIT_FORCE_ENABLE, env: { cppflags: '-DYJIT_FORCE_ENABLE' }, rust: true }
- { name: RJIT_FORCE_ENABLE, env: { cppflags: '-DRJIT_FORCE_ENABLE' } }
- - { name: YJIT_FORCE_ENABLE, env: { cppflags: '-DYJIT_FORCE_ENABLE' } }
name: ${{ matrix.entry.name }}
runs-on: ubuntu-latest
@@ -222,6 +224,9 @@ jobs:
with:
path: src/.downloaded-cache
key: downloaded-cache
+ - name: Install Rust
+ if: ${{ matrix.entry.rust }}
+ run: sudo apt-get update && sudo apt install -y rustc
- name: autogen
run: |
if [ ! -f ./autogen.sh ]; then
diff --git a/common.mk b/common.mk
index 897ca53647..1195f81b8a 100644
--- a/common.mk
+++ b/common.mk
@@ -3581,12 +3581,12 @@ cont.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
cont.$(OBJEXT): {$(VPATH)}iseq.h
cont.$(OBJEXT): {$(VPATH)}method.h
cont.$(OBJEXT): {$(VPATH)}missing.h
-cont.$(OBJEXT): {$(VPATH)}rjit.h
cont.$(OBJEXT): {$(VPATH)}node.h
cont.$(OBJEXT): {$(VPATH)}onigmo.h
cont.$(OBJEXT): {$(VPATH)}oniguruma.h
cont.$(OBJEXT): {$(VPATH)}ractor.h
cont.$(OBJEXT): {$(VPATH)}ractor_core.h
+cont.$(OBJEXT): {$(VPATH)}rjit.h
cont.$(OBJEXT): {$(VPATH)}ruby_assert.h
cont.$(OBJEXT): {$(VPATH)}ruby_atomic.h
cont.$(OBJEXT): {$(VPATH)}shape.h
@@ -6462,7 +6462,6 @@ eval.$(OBJEXT): {$(VPATH)}io.h
eval.$(OBJEXT): {$(VPATH)}iseq.h
eval.$(OBJEXT): {$(VPATH)}method.h
eval.$(OBJEXT): {$(VPATH)}missing.h
-eval.$(OBJEXT): {$(VPATH)}rjit.h
eval.$(OBJEXT): {$(VPATH)}node.h
eval.$(OBJEXT): {$(VPATH)}onigmo.h
eval.$(OBJEXT): {$(VPATH)}oniguruma.h
@@ -6471,6 +6470,7 @@ eval.$(OBJEXT): {$(VPATH)}probes.h
eval.$(OBJEXT): {$(VPATH)}probes_helper.h
eval.$(OBJEXT): {$(VPATH)}ractor.h
eval.$(OBJEXT): {$(VPATH)}ractor_core.h
+eval.$(OBJEXT): {$(VPATH)}rjit.h
eval.$(OBJEXT): {$(VPATH)}ruby_assert.h
eval.$(OBJEXT): {$(VPATH)}ruby_atomic.h
eval.$(OBJEXT): {$(VPATH)}shape.h
@@ -6909,7 +6909,6 @@ gc.$(OBJEXT): {$(VPATH)}io.h
gc.$(OBJEXT): {$(VPATH)}iseq.h
gc.$(OBJEXT): {$(VPATH)}method.h
gc.$(OBJEXT): {$(VPATH)}missing.h
-gc.$(OBJEXT): {$(VPATH)}rjit.h
gc.$(OBJEXT): {$(VPATH)}node.h
gc.$(OBJEXT): {$(VPATH)}onigmo.h
gc.$(OBJEXT): {$(VPATH)}oniguruma.h
@@ -6921,6 +6920,7 @@ gc.$(OBJEXT): {$(VPATH)}re.h
gc.$(OBJEXT): {$(VPATH)}regenc.h
gc.$(OBJEXT): {$(VPATH)}regex.h
gc.$(OBJEXT): {$(VPATH)}regint.h
+gc.$(OBJEXT): {$(VPATH)}rjit.h
gc.$(OBJEXT): {$(VPATH)}ruby_assert.h
gc.$(OBJEXT): {$(VPATH)}ruby_atomic.h
gc.$(OBJEXT): {$(VPATH)}shape.h
@@ -8120,12 +8120,12 @@ iseq.$(OBJEXT): {$(VPATH)}iseq.c
iseq.$(OBJEXT): {$(VPATH)}iseq.h
iseq.$(OBJEXT): {$(VPATH)}method.h
iseq.$(OBJEXT): {$(VPATH)}missing.h
-iseq.$(OBJEXT): {$(VPATH)}rjit.h
iseq.$(OBJEXT): {$(VPATH)}node.h
iseq.$(OBJEXT): {$(VPATH)}node_name.inc
iseq.$(OBJEXT): {$(VPATH)}onigmo.h
iseq.$(OBJEXT): {$(VPATH)}oniguruma.h
iseq.$(OBJEXT): {$(VPATH)}ractor.h
+iseq.$(OBJEXT): {$(VPATH)}rjit.h
iseq.$(OBJEXT): {$(VPATH)}ruby_assert.h
iseq.$(OBJEXT): {$(VPATH)}ruby_atomic.h
iseq.$(OBJEXT): {$(VPATH)}shape.h
@@ -9579,8 +9579,6 @@ miniinit.$(OBJEXT): {$(VPATH)}mini_builtin.c
miniinit.$(OBJEXT): {$(VPATH)}miniinit.c
miniinit.$(OBJEXT): {$(VPATH)}miniprelude.c
miniinit.$(OBJEXT): {$(VPATH)}missing.h
-miniinit.$(OBJEXT): {$(VPATH)}rjit.rb
-miniinit.$(OBJEXT): {$(VPATH)}rjit_c.rb
miniinit.$(OBJEXT): {$(VPATH)}nilclass.rb
miniinit.$(OBJEXT): {$(VPATH)}node.h
miniinit.$(OBJEXT): {$(VPATH)}numeric.rb
@@ -9589,6 +9587,8 @@ miniinit.$(OBJEXT): {$(VPATH)}oniguruma.h
miniinit.$(OBJEXT): {$(VPATH)}pack.rb
miniinit.$(OBJEXT): {$(VPATH)}prelude.rb
miniinit.$(OBJEXT): {$(VPATH)}ractor.rb
+miniinit.$(OBJEXT): {$(VPATH)}rjit.rb
+miniinit.$(OBJEXT): {$(VPATH)}rjit_c.rb
miniinit.$(OBJEXT): {$(VPATH)}ruby_assert.h
miniinit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
miniinit.$(OBJEXT): {$(VPATH)}shape.h
@@ -9604,454 +9604,6 @@ miniinit.$(OBJEXT): {$(VPATH)}vm_core.h
miniinit.$(OBJEXT): {$(VPATH)}vm_opts.h
miniinit.$(OBJEXT): {$(VPATH)}warning.rb
miniinit.$(OBJEXT): {$(VPATH)}yjit.rb
-rjit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-rjit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-rjit.$(OBJEXT): $(CCAN_DIR)/list/list.h
-rjit.$(OBJEXT): $(CCAN_DIR)/str/str.h
-rjit.$(OBJEXT): $(hdrdir)/ruby.h
-rjit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-rjit.$(OBJEXT): $(hdrdir)/ruby/version.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/array.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/class.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/compile.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/cont.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/file.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/gc.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/hash.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/process.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/serial.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/string.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/struct.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/variable.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/vm.h
-rjit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-rjit.$(OBJEXT): {$(VPATH)}assert.h
-rjit.$(OBJEXT): {$(VPATH)}atomic.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-rjit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-rjit.$(OBJEXT): {$(VPATH)}builtin.h
-rjit.$(OBJEXT): {$(VPATH)}config.h
-rjit.$(OBJEXT): {$(VPATH)}constant.h
-rjit.$(OBJEXT): {$(VPATH)}debug.h
-rjit.$(OBJEXT): {$(VPATH)}debug_counter.h
-rjit.$(OBJEXT): {$(VPATH)}defines.h
-rjit.$(OBJEXT): {$(VPATH)}dln.h
-rjit.$(OBJEXT): {$(VPATH)}encoding.h
-rjit.$(OBJEXT): {$(VPATH)}id.h
-rjit.$(OBJEXT): {$(VPATH)}id_table.h
-rjit.$(OBJEXT): {$(VPATH)}insns.def
-rjit.$(OBJEXT): {$(VPATH)}insns.inc
-rjit.$(OBJEXT): {$(VPATH)}insns_info.inc
-rjit.$(OBJEXT): {$(VPATH)}intern.h
-rjit.$(OBJEXT): {$(VPATH)}internal.h
-rjit.$(OBJEXT): {$(VPATH)}internal/abi.h
-rjit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-rjit.$(OBJEXT): {$(VPATH)}internal/assume.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-rjit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-rjit.$(OBJEXT): {$(VPATH)}internal/cast.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-rjit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-rjit.$(OBJEXT): {$(VPATH)}internal/config.h
-rjit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-rjit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-rjit.$(OBJEXT): {$(VPATH)}internal/ctype.h
-rjit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-rjit.$(OBJEXT): {$(VPATH)}internal/dosish.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
-rjit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
-rjit.$(OBJEXT): {$(VPATH)}internal/error.h
-rjit.$(OBJEXT): {$(VPATH)}internal/eval.h
-rjit.$(OBJEXT): {$(VPATH)}internal/event.h
-rjit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-rjit.$(OBJEXT): {$(VPATH)}internal/gc.h
-rjit.$(OBJEXT): {$(VPATH)}internal/glob.h
-rjit.$(OBJEXT): {$(VPATH)}internal/globals.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-rjit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-rjit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-rjit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-rjit.$(OBJEXT): {$(VPATH)}internal/iterator.h
-rjit.$(OBJEXT): {$(VPATH)}internal/memory.h
-rjit.$(OBJEXT): {$(VPATH)}internal/method.h
-rjit.$(OBJEXT): {$(VPATH)}internal/module.h
-rjit.$(OBJEXT): {$(VPATH)}internal/newobj.h
-rjit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-rjit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-rjit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-rjit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-rjit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-rjit.$(OBJEXT): {$(VPATH)}internal/symbol.h
-rjit.$(OBJEXT): {$(VPATH)}internal/value.h
-rjit.$(OBJEXT): {$(VPATH)}internal/value_type.h
-rjit.$(OBJEXT): {$(VPATH)}internal/variable.h
-rjit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-rjit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-rjit.$(OBJEXT): {$(VPATH)}iseq.h
-rjit.$(OBJEXT): {$(VPATH)}method.h
-rjit.$(OBJEXT): {$(VPATH)}missing.h
-rjit.$(OBJEXT): {$(VPATH)}rjit.c
-rjit.$(OBJEXT): {$(VPATH)}rjit.h
-rjit.$(OBJEXT): {$(VPATH)}rjit.rbinc
-rjit.$(OBJEXT): {$(VPATH)}rjit_c.h
-rjit.$(OBJEXT): {$(VPATH)}node.h
-rjit.$(OBJEXT): {$(VPATH)}onigmo.h
-rjit.$(OBJEXT): {$(VPATH)}oniguruma.h
-rjit.$(OBJEXT): {$(VPATH)}ractor.h
-rjit.$(OBJEXT): {$(VPATH)}ractor_core.h
-rjit.$(OBJEXT): {$(VPATH)}ruby_assert.h
-rjit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-rjit.$(OBJEXT): {$(VPATH)}shape.h
-rjit.$(OBJEXT): {$(VPATH)}st.h
-rjit.$(OBJEXT): {$(VPATH)}subst.h
-rjit.$(OBJEXT): {$(VPATH)}thread.h
-rjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-rjit.$(OBJEXT): {$(VPATH)}thread_native.h
-rjit.$(OBJEXT): {$(VPATH)}util.h
-rjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-rjit.$(OBJEXT): {$(VPATH)}vm_core.h
-rjit.$(OBJEXT): {$(VPATH)}vm_debug.h
-rjit.$(OBJEXT): {$(VPATH)}vm_opts.h
-rjit.$(OBJEXT): {$(VPATH)}vm_sync.h
-rjit.$(OBJEXT): {$(VPATH)}yjit.h
-rjit_c.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
-rjit_c.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
-rjit_c.$(OBJEXT): $(CCAN_DIR)/list/list.h
-rjit_c.$(OBJEXT): $(CCAN_DIR)/str/str.h
-rjit_c.$(OBJEXT): $(hdrdir)/ruby.h
-rjit_c.$(OBJEXT): $(hdrdir)/ruby/ruby.h
-rjit_c.$(OBJEXT): $(srcdir)/rjit_c.rb
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/array.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/class.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/compile.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/compilers.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/gc.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/hash.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/imemo.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/object.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/serial.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/string.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/struct.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/variable.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/vm.h
-rjit_c.$(OBJEXT): $(top_srcdir)/internal/warnings.h
-rjit_c.$(OBJEXT): {$(VPATH)}assert.h
-rjit_c.$(OBJEXT): {$(VPATH)}atomic.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/assume.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/bool.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/limits.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
-rjit_c.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
-rjit_c.$(OBJEXT): {$(VPATH)}builtin.h
-rjit_c.$(OBJEXT): {$(VPATH)}config.h
-rjit_c.$(OBJEXT): {$(VPATH)}constant.h
-rjit_c.$(OBJEXT): {$(VPATH)}debug_counter.h
-rjit_c.$(OBJEXT): {$(VPATH)}defines.h
-rjit_c.$(OBJEXT): {$(VPATH)}encoding.h
-rjit_c.$(OBJEXT): {$(VPATH)}id.h
-rjit_c.$(OBJEXT): {$(VPATH)}id_table.h
-rjit_c.$(OBJEXT): {$(VPATH)}insns.def
-rjit_c.$(OBJEXT): {$(VPATH)}insns.inc
-rjit_c.$(OBJEXT): {$(VPATH)}insns_info.inc
-rjit_c.$(OBJEXT): {$(VPATH)}intern.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/abi.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/anyargs.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/assume.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/const.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/error.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/format.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/cast.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/config.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/constant_p.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/robject.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/ctype.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/dllexport.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/dosish.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/error.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/eval.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/event.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/fl_type.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/gc.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/glob.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/globals.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/extension.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/feature.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/has/warning.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/array.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/class.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/error.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/file.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/io.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/load.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/object.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/process.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/random.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/range.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/re.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/select.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/string.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/time.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/interpreter.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/iterator.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/memory.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/method.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/module.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/newobj.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/scan_args.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/special_consts.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/static_assert.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/stdalign.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/stdbool.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/symbol.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/value.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/value_type.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/variable.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/warning_push.h
-rjit_c.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
-rjit_c.$(OBJEXT): {$(VPATH)}iseq.h
-rjit_c.$(OBJEXT): {$(VPATH)}method.h
-rjit_c.$(OBJEXT): {$(VPATH)}missing.h
-rjit_c.$(OBJEXT): {$(VPATH)}rjit.h
-rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.c
-rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.h
-rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.rb
-rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.rbinc
-rjit_c.$(OBJEXT): {$(VPATH)}node.h
-rjit_c.$(OBJEXT): {$(VPATH)}onigmo.h
-rjit_c.$(OBJEXT): {$(VPATH)}oniguruma.h
-rjit_c.$(OBJEXT): {$(VPATH)}ruby_assert.h
-rjit_c.$(OBJEXT): {$(VPATH)}ruby_atomic.h
-rjit_c.$(OBJEXT): {$(VPATH)}shape.h
-rjit_c.$(OBJEXT): {$(VPATH)}st.h
-rjit_c.$(OBJEXT): {$(VPATH)}subst.h
-rjit_c.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
-rjit_c.$(OBJEXT): {$(VPATH)}thread_native.h
-rjit_c.$(OBJEXT): {$(VPATH)}vm_callinfo.h
-rjit_c.$(OBJEXT): {$(VPATH)}vm_core.h
-rjit_c.$(OBJEXT): {$(VPATH)}vm_exec.h
-rjit_c.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
-rjit_c.$(OBJEXT): {$(VPATH)}vm_opts.h
-rjit_c.$(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
@@ -11447,12 +10999,12 @@ process.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
process.$(OBJEXT): {$(VPATH)}io.h
process.$(OBJEXT): {$(VPATH)}method.h
process.$(OBJEXT): {$(VPATH)}missing.h
-process.$(OBJEXT): {$(VPATH)}rjit.h
process.$(OBJEXT): {$(VPATH)}node.h
process.$(OBJEXT): {$(VPATH)}onigmo.h
process.$(OBJEXT): {$(VPATH)}oniguruma.h
process.$(OBJEXT): {$(VPATH)}process.c
process.$(OBJEXT): {$(VPATH)}ractor.h
+process.$(OBJEXT): {$(VPATH)}rjit.h
process.$(OBJEXT): {$(VPATH)}ruby_assert.h
process.$(OBJEXT): {$(VPATH)}ruby_atomic.h
process.$(OBJEXT): {$(VPATH)}shape.h
@@ -11663,7 +11215,6 @@ ractor.$(OBJEXT): {$(VPATH)}internal/warning_push.h
ractor.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
ractor.$(OBJEXT): {$(VPATH)}method.h
ractor.$(OBJEXT): {$(VPATH)}missing.h
-ractor.$(OBJEXT): {$(VPATH)}rjit.h
ractor.$(OBJEXT): {$(VPATH)}node.h
ractor.$(OBJEXT): {$(VPATH)}onigmo.h
ractor.$(OBJEXT): {$(VPATH)}oniguruma.h
@@ -11671,6 +11222,7 @@ ractor.$(OBJEXT): {$(VPATH)}ractor.c
ractor.$(OBJEXT): {$(VPATH)}ractor.h
ractor.$(OBJEXT): {$(VPATH)}ractor.rbinc
ractor.$(OBJEXT): {$(VPATH)}ractor_core.h
+ractor.$(OBJEXT): {$(VPATH)}rjit.h
ractor.$(OBJEXT): {$(VPATH)}ruby_assert.h
ractor.$(OBJEXT): {$(VPATH)}ruby_atomic.h
ractor.$(OBJEXT): {$(VPATH)}shape.h
@@ -13403,6 +12955,457 @@ regsyntax.$(OBJEXT): {$(VPATH)}regint.h
regsyntax.$(OBJEXT): {$(VPATH)}regsyntax.c
regsyntax.$(OBJEXT): {$(VPATH)}st.h
regsyntax.$(OBJEXT): {$(VPATH)}subst.h
+rjit.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+rjit.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+rjit.$(OBJEXT): $(CCAN_DIR)/list/list.h
+rjit.$(OBJEXT): $(CCAN_DIR)/str/str.h
+rjit.$(OBJEXT): $(hdrdir)/ruby.h
+rjit.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+rjit.$(OBJEXT): $(hdrdir)/ruby/version.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/array.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/class.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/compile.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/cont.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/file.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/gc.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/hash.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/process.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/serial.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/string.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/struct.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/variable.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/vm.h
+rjit.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+rjit.$(OBJEXT): {$(VPATH)}assert.h
+rjit.$(OBJEXT): {$(VPATH)}atomic.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+rjit.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+rjit.$(OBJEXT): {$(VPATH)}builtin.h
+rjit.$(OBJEXT): {$(VPATH)}config.h
+rjit.$(OBJEXT): {$(VPATH)}constant.h
+rjit.$(OBJEXT): {$(VPATH)}debug.h
+rjit.$(OBJEXT): {$(VPATH)}debug_counter.h
+rjit.$(OBJEXT): {$(VPATH)}defines.h
+rjit.$(OBJEXT): {$(VPATH)}dln.h
+rjit.$(OBJEXT): {$(VPATH)}encoding.h
+rjit.$(OBJEXT): {$(VPATH)}id.h
+rjit.$(OBJEXT): {$(VPATH)}id_table.h
+rjit.$(OBJEXT): {$(VPATH)}insns.def
+rjit.$(OBJEXT): {$(VPATH)}insns.inc
+rjit.$(OBJEXT): {$(VPATH)}insns_info.inc
+rjit.$(OBJEXT): {$(VPATH)}intern.h
+rjit.$(OBJEXT): {$(VPATH)}internal.h
+rjit.$(OBJEXT): {$(VPATH)}internal/abi.h
+rjit.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+rjit.$(OBJEXT): {$(VPATH)}internal/assume.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+rjit.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+rjit.$(OBJEXT): {$(VPATH)}internal/cast.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+rjit.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+rjit.$(OBJEXT): {$(VPATH)}internal/config.h
+rjit.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+rjit.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+rjit.$(OBJEXT): {$(VPATH)}internal/ctype.h
+rjit.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+rjit.$(OBJEXT): {$(VPATH)}internal/dosish.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+rjit.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+rjit.$(OBJEXT): {$(VPATH)}internal/error.h
+rjit.$(OBJEXT): {$(VPATH)}internal/eval.h
+rjit.$(OBJEXT): {$(VPATH)}internal/event.h
+rjit.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+rjit.$(OBJEXT): {$(VPATH)}internal/gc.h
+rjit.$(OBJEXT): {$(VPATH)}internal/glob.h
+rjit.$(OBJEXT): {$(VPATH)}internal/globals.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+rjit.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+rjit.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+rjit.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+rjit.$(OBJEXT): {$(VPATH)}internal/iterator.h
+rjit.$(OBJEXT): {$(VPATH)}internal/memory.h
+rjit.$(OBJEXT): {$(VPATH)}internal/method.h
+rjit.$(OBJEXT): {$(VPATH)}internal/module.h
+rjit.$(OBJEXT): {$(VPATH)}internal/newobj.h
+rjit.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+rjit.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+rjit.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+rjit.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+rjit.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+rjit.$(OBJEXT): {$(VPATH)}internal/symbol.h
+rjit.$(OBJEXT): {$(VPATH)}internal/value.h
+rjit.$(OBJEXT): {$(VPATH)}internal/value_type.h
+rjit.$(OBJEXT): {$(VPATH)}internal/variable.h
+rjit.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+rjit.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+rjit.$(OBJEXT): {$(VPATH)}iseq.h
+rjit.$(OBJEXT): {$(VPATH)}method.h
+rjit.$(OBJEXT): {$(VPATH)}missing.h
+rjit.$(OBJEXT): {$(VPATH)}node.h
+rjit.$(OBJEXT): {$(VPATH)}onigmo.h
+rjit.$(OBJEXT): {$(VPATH)}oniguruma.h
+rjit.$(OBJEXT): {$(VPATH)}ractor.h
+rjit.$(OBJEXT): {$(VPATH)}ractor_core.h
+rjit.$(OBJEXT): {$(VPATH)}rjit.c
+rjit.$(OBJEXT): {$(VPATH)}rjit.h
+rjit.$(OBJEXT): {$(VPATH)}rjit.rbinc
+rjit.$(OBJEXT): {$(VPATH)}rjit_c.h
+rjit.$(OBJEXT): {$(VPATH)}ruby_assert.h
+rjit.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+rjit.$(OBJEXT): {$(VPATH)}shape.h
+rjit.$(OBJEXT): {$(VPATH)}st.h
+rjit.$(OBJEXT): {$(VPATH)}subst.h
+rjit.$(OBJEXT): {$(VPATH)}thread.h
+rjit.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+rjit.$(OBJEXT): {$(VPATH)}thread_native.h
+rjit.$(OBJEXT): {$(VPATH)}util.h
+rjit.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+rjit.$(OBJEXT): {$(VPATH)}vm_core.h
+rjit.$(OBJEXT): {$(VPATH)}vm_debug.h
+rjit.$(OBJEXT): {$(VPATH)}vm_opts.h
+rjit.$(OBJEXT): {$(VPATH)}vm_sync.h
+rjit.$(OBJEXT): {$(VPATH)}yjit.h
+rjit_c.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h
+rjit_c.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h
+rjit_c.$(OBJEXT): $(CCAN_DIR)/list/list.h
+rjit_c.$(OBJEXT): $(CCAN_DIR)/str/str.h
+rjit_c.$(OBJEXT): $(hdrdir)/ruby.h
+rjit_c.$(OBJEXT): $(hdrdir)/ruby/ruby.h
+rjit_c.$(OBJEXT): $(srcdir)/rjit_c.rb
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/array.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/class.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/compile.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/compilers.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/fixnum.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/gc.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/hash.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/object.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/serial.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/string.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/struct.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/variable.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/vm.h
+rjit_c.$(OBJEXT): $(top_srcdir)/internal/warnings.h
+rjit_c.$(OBJEXT): {$(VPATH)}assert.h
+rjit_c.$(OBJEXT): {$(VPATH)}atomic.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/assume.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/attributes.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/bool.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/limits.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/long_long.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h
+rjit_c.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h
+rjit_c.$(OBJEXT): {$(VPATH)}builtin.h
+rjit_c.$(OBJEXT): {$(VPATH)}config.h
+rjit_c.$(OBJEXT): {$(VPATH)}constant.h
+rjit_c.$(OBJEXT): {$(VPATH)}debug_counter.h
+rjit_c.$(OBJEXT): {$(VPATH)}defines.h
+rjit_c.$(OBJEXT): {$(VPATH)}encoding.h
+rjit_c.$(OBJEXT): {$(VPATH)}id.h
+rjit_c.$(OBJEXT): {$(VPATH)}id_table.h
+rjit_c.$(OBJEXT): {$(VPATH)}insns.def
+rjit_c.$(OBJEXT): {$(VPATH)}insns.inc
+rjit_c.$(OBJEXT): {$(VPATH)}insns_info.inc
+rjit_c.$(OBJEXT): {$(VPATH)}intern.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/abi.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/anyargs.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/assume.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/cold.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/const.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/error.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/format.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/pure.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/warning.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/cast.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/compiler_since.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/config.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/constant_p.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rarray.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rclass.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rdata.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rfile.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rhash.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/robject.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rstring.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/ctype.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/dllexport.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/dosish.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/re.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/string.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/error.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/eval.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/event.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/fl_type.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/gc.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/glob.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/globals.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/attribute.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/builtin.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/extension.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/feature.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/has/warning.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/array.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/class.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/compar.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/complex.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/cont.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/dir.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/enum.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/error.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/eval.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/file.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/hash.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/io.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/load.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/object.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/parse.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/proc.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/process.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/random.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/range.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/rational.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/re.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/select.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/signal.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/string.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/struct.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/thread.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/time.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/variable.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/intern/vm.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/interpreter.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/iterator.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/memory.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/method.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/module.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/newobj.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/scan_args.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/special_consts.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/static_assert.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/stdalign.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/stdbool.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/symbol.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/value.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/value_type.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/variable.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/warning_push.h
+rjit_c.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+rjit_c.$(OBJEXT): {$(VPATH)}iseq.h
+rjit_c.$(OBJEXT): {$(VPATH)}method.h
+rjit_c.$(OBJEXT): {$(VPATH)}missing.h
+rjit_c.$(OBJEXT): {$(VPATH)}node.h
+rjit_c.$(OBJEXT): {$(VPATH)}onigmo.h
+rjit_c.$(OBJEXT): {$(VPATH)}oniguruma.h
+rjit_c.$(OBJEXT): {$(VPATH)}probes.dmyh
+rjit_c.$(OBJEXT): {$(VPATH)}probes.h
+rjit_c.$(OBJEXT): {$(VPATH)}probes_helper.h
+rjit_c.$(OBJEXT): {$(VPATH)}rjit.h
+rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.c
+rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.h
+rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.rb
+rjit_c.$(OBJEXT): {$(VPATH)}rjit_c.rbinc
+rjit_c.$(OBJEXT): {$(VPATH)}ruby_assert.h
+rjit_c.$(OBJEXT): {$(VPATH)}ruby_atomic.h
+rjit_c.$(OBJEXT): {$(VPATH)}shape.h
+rjit_c.$(OBJEXT): {$(VPATH)}st.h
+rjit_c.$(OBJEXT): {$(VPATH)}subst.h
+rjit_c.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h
+rjit_c.$(OBJEXT): {$(VPATH)}thread_native.h
+rjit_c.$(OBJEXT): {$(VPATH)}vm_callinfo.h
+rjit_c.$(OBJEXT): {$(VPATH)}vm_core.h
+rjit_c.$(OBJEXT): {$(VPATH)}vm_exec.h
+rjit_c.$(OBJEXT): {$(VPATH)}vm_insnhelper.h
+rjit_c.$(OBJEXT): {$(VPATH)}vm_opts.h
+rjit_c.$(OBJEXT): {$(VPATH)}yjit.h
ruby-runner.$(OBJEXT): {$(VPATH)}config.h
ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is.h
ruby-runner.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h
@@ -13620,10 +13623,10 @@ ruby.$(OBJEXT): {$(VPATH)}io.h
ruby.$(OBJEXT): {$(VPATH)}iseq.h
ruby.$(OBJEXT): {$(VPATH)}method.h
ruby.$(OBJEXT): {$(VPATH)}missing.h
-ruby.$(OBJEXT): {$(VPATH)}rjit.h
ruby.$(OBJEXT): {$(VPATH)}node.h
ruby.$(OBJEXT): {$(VPATH)}onigmo.h
ruby.$(OBJEXT): {$(VPATH)}oniguruma.h
+ruby.$(OBJEXT): {$(VPATH)}rjit.h
ruby.$(OBJEXT): {$(VPATH)}ruby.c
ruby.$(OBJEXT): {$(VPATH)}ruby_assert.h
ruby.$(OBJEXT): {$(VPATH)}ruby_atomic.h
@@ -15797,12 +15800,12 @@ thread.$(OBJEXT): {$(VPATH)}io.h
thread.$(OBJEXT): {$(VPATH)}iseq.h
thread.$(OBJEXT): {$(VPATH)}method.h
thread.$(OBJEXT): {$(VPATH)}missing.h
-thread.$(OBJEXT): {$(VPATH)}rjit.h
thread.$(OBJEXT): {$(VPATH)}node.h
thread.$(OBJEXT): {$(VPATH)}onigmo.h
thread.$(OBJEXT): {$(VPATH)}oniguruma.h
thread.$(OBJEXT): {$(VPATH)}ractor.h
thread.$(OBJEXT): {$(VPATH)}ractor_core.h
+thread.$(OBJEXT): {$(VPATH)}rjit.h
thread.$(OBJEXT): {$(VPATH)}ruby_assert.h
thread.$(OBJEXT): {$(VPATH)}ruby_atomic.h
thread.$(OBJEXT): {$(VPATH)}shape.h
@@ -16938,9 +16941,9 @@ version.$(OBJEXT): {$(VPATH)}internal/warning_push.h
version.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
version.$(OBJEXT): {$(VPATH)}method.h
version.$(OBJEXT): {$(VPATH)}missing.h
-version.$(OBJEXT): {$(VPATH)}rjit.h
version.$(OBJEXT): {$(VPATH)}node.h
version.$(OBJEXT): {$(VPATH)}revision.h
+version.$(OBJEXT): {$(VPATH)}rjit.h
version.$(OBJEXT): {$(VPATH)}ruby_assert.h
version.$(OBJEXT): {$(VPATH)}ruby_atomic.h
version.$(OBJEXT): {$(VPATH)}shape.h
@@ -17167,7 +17170,6 @@ vm.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
vm.$(OBJEXT): {$(VPATH)}iseq.h
vm.$(OBJEXT): {$(VPATH)}method.h
vm.$(OBJEXT): {$(VPATH)}missing.h
-vm.$(OBJEXT): {$(VPATH)}rjit.h
vm.$(OBJEXT): {$(VPATH)}node.h
vm.$(OBJEXT): {$(VPATH)}onigmo.h
vm.$(OBJEXT): {$(VPATH)}oniguruma.h
@@ -17176,6 +17178,7 @@ vm.$(OBJEXT): {$(VPATH)}probes.h
vm.$(OBJEXT): {$(VPATH)}probes_helper.h
vm.$(OBJEXT): {$(VPATH)}ractor.h
vm.$(OBJEXT): {$(VPATH)}ractor_core.h
+vm.$(OBJEXT): {$(VPATH)}rjit.h
vm.$(OBJEXT): {$(VPATH)}ruby_assert.h
vm.$(OBJEXT): {$(VPATH)}ruby_atomic.h
vm.$(OBJEXT): {$(VPATH)}shape.h
@@ -17979,11 +17982,11 @@ vm_trace.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
vm_trace.$(OBJEXT): {$(VPATH)}iseq.h
vm_trace.$(OBJEXT): {$(VPATH)}method.h
vm_trace.$(OBJEXT): {$(VPATH)}missing.h
-vm_trace.$(OBJEXT): {$(VPATH)}rjit.h
vm_trace.$(OBJEXT): {$(VPATH)}node.h
vm_trace.$(OBJEXT): {$(VPATH)}onigmo.h
vm_trace.$(OBJEXT): {$(VPATH)}oniguruma.h
vm_trace.$(OBJEXT): {$(VPATH)}ractor.h
+vm_trace.$(OBJEXT): {$(VPATH)}rjit.h
vm_trace.$(OBJEXT): {$(VPATH)}ruby_assert.h
vm_trace.$(OBJEXT): {$(VPATH)}ruby_atomic.h
vm_trace.$(OBJEXT): {$(VPATH)}shape.h
diff --git a/configure.ac b/configure.ac
index d576e22cea..f79c900099 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3725,16 +3725,6 @@ AC_SUBST(CAPITARGET)
AS_CASE(["$RDOCTARGET:$CAPITARGET"],[nodoc:nodoc],[INSTALLDOC=nodoc],[INSTALLDOC=all])
AC_SUBST(INSTALLDOC)
-AC_ARG_ENABLE(jit-support,
- AS_HELP_STRING([--disable-jit-support], [disable JIT features]),
- [RJIT_SUPPORT=$enableval],
- [AS_CASE(["$target_os"],
- [wasi | mingw* | solaris*], [RJIT_SUPPORT=no],
- [RJIT_SUPPORT=yes]
- )])
-
-AC_SUBST(RJIT_SUPPORT)
-
AC_CHECK_PROG(RUSTC, [rustc], [rustc], [no]) dnl no ac_tool_prefix
dnl check if rustc is recent enough to build YJIT (rustc >= 1.58.0)
@@ -3780,8 +3770,8 @@ AC_ARG_ENABLE(yjit,
AS_HELP_STRING([--enable-yjit],
[enable in-process JIT compiler that requires Rust build tools. enabled by default on supported platforms if rustc 1.58.0+ is available]),
[YJIT_SUPPORT=$enableval],
- [AS_CASE(["$enable_jit_support:$YJIT_TARGET_OK:$YJIT_RUSTC_OK"],
- [yes:yes:yes|:yes:yes], [
+ [AS_CASE(["$YJIT_TARGET_OK:$YJIT_RUSTC_OK"],
+ [yes:yes], [
YJIT_SUPPORT=yes
],
[YJIT_SUPPORT=no]
@@ -3793,9 +3783,6 @@ CARGO_BUILD_ARGS=
YJIT_LIBS=
AS_CASE(["${YJIT_SUPPORT}"],
[yes|dev|stats|dev_nodebug], [
- AS_IF([test x"$enable_jit_support" = "xno"],
- AC_MSG_ERROR([--disable-jit-support but --enable-yjit. YJIT requires JIT support])
- )
AS_IF([test x"$RUSTC" = "xno"],
AC_MSG_ERROR([rustc is required. Installation instructions available at https://www.rust-lang.org/tools/install])
)
@@ -3835,16 +3822,8 @@ AS_CASE(["${YJIT_SUPPORT}"],
AC_DEFINE_UNQUOTED(YJIT_SUPPORT, [$YJIT_SUPPORT])
])
AC_DEFINE(USE_YJIT, 1)
- AC_DEFINE(USE_RJIT, 1)
], [
AC_DEFINE(USE_YJIT, 0)
- AC_DEFINE(USE_RJIT, 0)
-])
-
-# If YJIT links capstone, libcapstone stops working on the C side.
-# capstone should be linked for RJIT only when YJIT doesn't.
-AS_IF([test x"$RJIT_SUPPORT" = "xyes" -a -z "$CARGO_BUILD_ARGS" ], [
- AC_CHECK_LIB([capstone], [cs_disasm])
])
dnl These variables end up in ::RbConfig::CONFIG
@@ -3855,6 +3834,58 @@ AC_SUBST(CARGO_BUILD_ARGS)dnl for selecting Rust build profiles
AC_SUBST(YJIT_LIBS)dnl for optionally building the Rust parts of YJIT
AC_SUBST(YJIT_OBJ)dnl for optionally building the C parts of YJIT
+dnl Currently, RJIT only supports Unix x86_64 platforms.
+RJIT_TARGET_OK=no
+AS_IF([test "$cross_compiling" = no],
+ AS_CASE(["$target_cpu-$target_os"],
+ [*android*], [
+ RJIT_TARGET_OK=no
+ ],
+ [x86_64-darwin*], [
+ RJIT_TARGET_OK=yes
+ ],
+ [x86_64-*linux*], [
+ RJIT_TARGET_OK=yes
+ ],
+ [x86_64-*bsd*], [
+ RJIT_TARGET_OK=yes
+ ]
+ )
+)
+
+dnl Build RJIT on Unix x86_64 platforms or if --enable-rjit is specified.
+AC_ARG_ENABLE(rjit,
+ AS_HELP_STRING([--enable-rjit],
+ [enable pure-Ruby JIT compiler. enabled by default on Unix x86_64 platforms]),
+ [RJIT_SUPPORT=$enableval],
+ [AS_CASE(["$YJIT_TARGET_OK"],
+ [yes], [RJIT_SUPPORT=yes],
+ [RJIT_SUPPORT=no]
+ )]
+)
+
+AS_CASE(["${RJIT_SUPPORT}"],
+[yes|dev], [
+ AS_CASE(["${RJIT_SUPPORT}"],
+ [dev], [
+ # Link libcapstone for --rjit-dump-disasm. If YJIT links libcapstone
+ # with cargo, linking libcapstone here doesn't work. It should be
+ # linked for RJIT only when YJIT doesn't.
+ AS_IF([test -z "$CARGO_BUILD_ARGS"], [
+ AC_CHECK_LIB([capstone], [cs_disasm])
+ ])
+
+ # Enable RJIT_STATS (vm_insns_count of --rjit-stats)
+ AC_DEFINE(RUBY_DEBUG, 1)
+ ])
+
+ AC_DEFINE(USE_RJIT, 1)
+], [
+ AC_DEFINE(USE_RJIT, 0)
+])
+
+AC_SUBST(RJIT_SUPPORT)
+
AC_ARG_ENABLE(install-static-library,
AS_HELP_STRING([--disable-install-static-library], [do not install static ruby library]),
[INSTALL_STATIC_LIBRARY=$enableval
@@ -4541,8 +4572,8 @@ config_summary "debugflags" "$debugflags"
config_summary "warnflags" "$warnflags"
config_summary "strip command" "$STRIP"
config_summary "install doc" "$DOCTARGETS"
-config_summary "RJIT support" "$RJIT_SUPPORT"
config_summary "YJIT support" "$YJIT_SUPPORT"
+config_summary "RJIT support" "$RJIT_SUPPORT"
config_summary "man page type" "$MANTYPE"
config_summary "search path" "$search_path"
config_summary "static-linked-ext" ${EXTSTATIC:+"yes"}
diff --git a/rjit.c b/rjit.c
index ce1f8562ca..3dbf733645 100644
--- a/rjit.c
+++ b/rjit.c
@@ -56,6 +56,12 @@ void rb_rjit(void) {}
#endif
#include "dln.h"
+// For mmapp(), sysconf()
+#ifndef _WIN32
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
#include "ruby/util.h"
// A copy of RJIT portion of MRI options since RJIT initialization. We
@@ -261,6 +267,105 @@ rjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id)
// New stuff from here
//
+#if defined(MAP_FIXED_NOREPLACE) && defined(_SC_PAGESIZE)
+// Align the current write position to a multiple of bytes
+static uint8_t *
+align_ptr(uint8_t *ptr, uint32_t multiple)
+{
+ // Compute the pointer modulo the given alignment boundary
+ uint32_t rem = ((uint32_t)(uintptr_t)ptr) % multiple;
+
+ // If the pointer is already aligned, stop
+ if (rem == 0)
+ return ptr;
+
+ // Pad the pointer by the necessary amount to align it
+ uint32_t pad = multiple - rem;
+
+ return ptr + pad;
+}
+#endif
+
+// Address space reservation. Memory pages are mapped on an as needed basis.
+// See the Rust mm module for details.
+static uint8_t *
+rb_mjit_reserve_addr_space(uint32_t mem_size)
+{
+#ifndef _WIN32
+ uint8_t *mem_block;
+
+ // On Linux
+ #if defined(MAP_FIXED_NOREPLACE) && defined(_SC_PAGESIZE)
+ uint32_t const page_size = (uint32_t)sysconf(_SC_PAGESIZE);
+ uint8_t *const cfunc_sample_addr = (void *)&rb_mjit_reserve_addr_space;
+ uint8_t *const probe_region_end = cfunc_sample_addr + INT32_MAX;
+ // Align the requested address to page size
+ uint8_t *req_addr = align_ptr(cfunc_sample_addr, page_size);
+
+ // Probe for addresses close to this function using MAP_FIXED_NOREPLACE
+ // to improve odds of being in range for 32-bit relative call instructions.
+ do {
+ mem_block = mmap(
+ req_addr,
+ mem_size,
+ PROT_NONE,
+ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE,
+ -1,
+ 0
+ );
+
+ // If we succeeded, stop
+ if (mem_block != MAP_FAILED) {
+ break;
+ }
+
+ // +4MB
+ req_addr += 4 * 1024 * 1024;
+ } while (req_addr < probe_region_end);
+
+ // On MacOS and other platforms
+ #else
+ // Try to map a chunk of memory as executable
+ mem_block = mmap(
+ (void *)rb_mjit_reserve_addr_space,
+ mem_size,
+ PROT_NONE,
+ MAP_PRIVATE | MAP_ANONYMOUS,
+ -1,
+ 0
+ );
+ #endif
+
+ // Fallback
+ if (mem_block == MAP_FAILED) {
+ // Try again without the address hint (e.g., valgrind)
+ mem_block = mmap(
+ NULL,
+ mem_size,
+ PROT_NONE,
+ MAP_PRIVATE | MAP_ANONYMOUS,
+ -1,
+ 0
+ );
+ }
+
+ // Check that the memory mapping was successful
+ if (mem_block == MAP_FAILED) {
+ perror("ruby: yjit: mmap:");
+ if(errno == ENOMEM) {
+ // No crash report if it's only insufficient memory
+ exit(EXIT_FAILURE);
+ }
+ rb_bug("mmap failed");
+ }
+
+ return mem_block;
+#else
+ // Windows not supported for now
+ return NULL;
+#endif
+}
+
// JIT buffer
uint8_t *rb_rjit_mem_block = NULL;
@@ -485,8 +590,7 @@ rjit_init(const struct rjit_options *opts)
VM_ASSERT(rjit_enabled);
rjit_opts = *opts;
- extern uint8_t* rb_yjit_reserve_addr_space(uint32_t mem_size);
- rb_rjit_mem_block = rb_yjit_reserve_addr_space(RJIT_CODE_SIZE);
+ rb_rjit_mem_block = rb_mjit_reserve_addr_space(RJIT_CODE_SIZE);
// RJIT doesn't support miniruby, but it might reach here by RJIT_FORCE_ENABLE.
rb_mRJIT = rb_const_get(rb_cRubyVM, rb_intern("RJIT"));
diff --git a/rjit.h b/rjit.h
index 212b22bc80..4f61927760 100644
--- a/rjit.h
+++ b/rjit.h
@@ -86,12 +86,12 @@ struct rb_rjit_compile_info {
bool disable_const_cache;
};
-typedef VALUE (*jit_func_t)(rb_execution_context_t *, rb_control_frame_t *);
-
RUBY_SYMBOL_EXPORT_BEGIN
RUBY_EXTERN struct rjit_options rjit_opts;
RUBY_EXTERN bool rjit_call_p;
+#define rb_rjit_call_threshold() rjit_opts.call_threshold
+
extern void rb_rjit_compile(const rb_iseq_t *iseq);
extern struct rb_rjit_compile_info* rb_rjit_iseq_compile_info(const struct rb_iseq_constant_body *body);
extern void rb_rjit_recompile_send(const rb_iseq_t *iseq);
@@ -132,10 +132,11 @@ void rjit_finish(bool close_handle_p);
# else // USE_RJIT
+static inline void rb_rjit_compile(const rb_iseq_t *iseq){}
+
static inline void rjit_cancel_all(const char *reason){}
static inline void rjit_free_iseq(const rb_iseq_t *iseq){}
static inline void rjit_mark(void){}
-static inline VALUE jit_exec(rb_execution_context_t *ec) { return Qundef; /* unreachable */ }
static inline void rjit_child_after_fork(void){}
static inline void rb_rjit_bop_redefined(int redefined_flag, enum ruby_basic_operators bop) {}
@@ -146,7 +147,11 @@ static inline void rb_rjit_constant_ic_update(const rb_iseq_t *const iseq, IC ic
static inline void rb_rjit_tracing_invalidate_all(rb_event_flag_t new_iseq_events) {}
#define rjit_enabled false
+#define rjit_call_p false
#define rjit_stats_enabled false
+
+#define rb_rjit_call_threshold() UINT_MAX
+
static inline VALUE rjit_pause(bool wait_p){ return Qnil; } // unreachable
static inline VALUE rjit_resume(void){ return Qnil; } // unreachable
static inline void rjit_finish(bool close_handle_p){}
diff --git a/rjit_c.c b/rjit_c.c
index d64002b749..a0de9dc278 100644
--- a/rjit_c.c
+++ b/rjit_c.c
@@ -23,10 +23,92 @@ void rb_rjit_c(void) {}
#include "internal/gc.h"
#include "yjit.h"
#include "vm_insnhelper.h"
+#include "probes.h"
+#include "probes_helper.h"
#include "insns.inc"
#include "insns_info.inc"
+// For mmapp(), sysconf()
+#ifndef _WIN32
+#include <unistd.h>
+#include <sys/mman.h>
+#endif
+
+#include <errno.h>
+
+bool
+rb_rjit_mark_writable(void *mem_block, uint32_t mem_size)
+{
+ return mprotect(mem_block, mem_size, PROT_READ | PROT_WRITE) == 0;
+}
+
+void
+rb_rjit_mark_executable(void *mem_block, uint32_t mem_size)
+{
+ // Do not call mprotect when mem_size is zero. Some platforms may return
+ // an error for it. https://github.com/Shopify/ruby/issues/450
+ if (mem_size == 0) {
+ return;
+ }
+ if (mprotect(mem_block, mem_size, PROT_READ | PROT_EXEC)) {
+ rb_bug("Couldn't make JIT page (%p, %lu bytes) executable, errno: %s\n",
+ mem_block, (unsigned long)mem_size, strerror(errno));
+ }
+}
+
+VALUE
+rb_rjit_optimized_call(VALUE *recv, rb_execution_context_t *ec, int argc, VALUE *argv, int kw_splat, VALUE block_handler)
+{
+ rb_proc_t *proc;
+ GetProcPtr(recv, proc);
+ return rb_vm_invoke_proc(ec, proc, argc, argv, kw_splat, block_handler);
+}
+
+VALUE
+rb_rjit_str_neq_internal(VALUE str1, VALUE str2)
+{
+ return rb_str_eql_internal(str1, str2) == Qtrue ? Qfalse : Qtrue;
+}
+
+// The code we generate in gen_send_cfunc() doesn't fire the c_return TracePoint event
+// like the interpreter. When tracing for c_return is enabled, we patch the code after
+// the C method return to call into this to fire the event.
+void
+rb_rjit_full_cfunc_return(rb_execution_context_t *ec, VALUE return_value)
+{
+ rb_control_frame_t *cfp = ec->cfp;
+ RUBY_ASSERT_ALWAYS(cfp == GET_EC()->cfp);
+ const rb_callable_method_entry_t *me = rb_vm_frame_method_entry(cfp);
+
+ RUBY_ASSERT_ALWAYS(RUBYVM_CFUNC_FRAME_P(cfp));
+ RUBY_ASSERT_ALWAYS(me->def->type == VM_METHOD_TYPE_CFUNC);
+
+ // CHECK_CFP_CONSISTENCY("full_cfunc_return"); TODO revive this
+
+ // Pop the C func's frame and fire the c_return TracePoint event
+ // Note that this is the same order as vm_call_cfunc_with_frame().
+ rb_vm_pop_frame(ec);
+ EXEC_EVENT_HOOK(ec, RUBY_EVENT_C_RETURN, cfp->self, me->def->original_id, me->called_id, me->owner, return_value);
+ // Note, this deviates from the interpreter in that users need to enable
+ // a c_return TracePoint for this DTrace hook to work. A reasonable change
+ // since the Ruby return event works this way as well.
+ RUBY_DTRACE_CMETHOD_RETURN_HOOK(ec, me->owner, me->def->original_id);
+
+ // Push return value into the caller's stack. We know that it's a frame that
+ // uses cfp->sp because we are patching a call done with gen_send_cfunc().
+ ec->cfp->sp[0] = return_value;
+ ec->cfp->sp++;
+}
+
+rb_proc_t *
+rb_rjit_get_proc_ptr(VALUE procv)
+{
+ rb_proc_t *proc;
+ GetProcPtr(procv, proc);
+ return proc;
+}
+
#if SIZEOF_LONG == SIZEOF_VOIDP
#define NUM2PTR(x) NUM2ULONG(x)
#define PTR2NUM(x) ULONG2NUM(x)
diff --git a/rjit_c.rb b/rjit_c.rb
index 42fcc2b5ba..81e7a9f869 100644
--- a/rjit_c.rb
+++ b/rjit_c.rb
@@ -11,16 +11,16 @@ module RubyVM::RJIT # :nodoc: all
#
def rjit_mark_writable
Primitive.cstmt! %{
- extern bool rb_yjit_mark_writable(void *mem_block, uint32_t mem_size);
- rb_yjit_mark_writable(rb_rjit_mem_block, RJIT_CODE_SIZE);
+ extern bool rb_rjit_mark_writable(void *mem_block, uint32_t mem_size);
+ rb_rjit_mark_writable(rb_rjit_mem_block, RJIT_CODE_SIZE);
return Qnil;
}
end
def rjit_mark_executable
Primitive.cstmt! %{
- extern bool rb_yjit_mark_executable(void *mem_block, uint32_t mem_size);
- rb_yjit_mark_executable(rb_rjit_mem_block, RJIT_CODE_SIZE);
+ extern void rb_rjit_mark_executable(void *mem_block, uint32_t mem_size);
+ rb_rjit_mark_executable(rb_rjit_mem_block, RJIT_CODE_SIZE);
return Qnil;
}
end
@@ -147,8 +147,8 @@ module RubyVM::RJIT # :nodoc: all
def rb_full_cfunc_return
Primitive.cstmt! %{
- extern void rb_full_cfunc_return(rb_execution_context_t *ec, VALUE return_value);
- return SIZET2NUM((size_t)rb_full_cfunc_return);
+ extern void rb_rjit_full_cfunc_return(rb_execution_context_t *ec, VALUE return_value);
+ return SIZET2NUM((size_t)rb_rjit_full_cfunc_return);
}
end
@@ -177,8 +177,8 @@ module RubyVM::RJIT # :nodoc: all
def rb_str_neq_internal
Primitive.cstmt! %{
- extern VALUE rb_str_neq_internal(VALUE str1, VALUE str2);
- return SIZET2NUM((size_t)rb_str_neq_internal);
+ extern VALUE rb_rjit_str_neq_internal(VALUE str1, VALUE str2);
+ return SIZET2NUM((size_t)rb_rjit_str_neq_internal);
}
end
@@ -398,8 +398,8 @@ module RubyVM::RJIT # :nodoc: all
def rb_optimized_call
Primitive.cstmt! %{
- extern VALUE rb_optimized_call(VALUE *recv, rb_execution_context_t *ec, int argc, VALUE *argv, int kw_splat, VALUE block_handler);
- return SIZET2NUM((size_t)rb_optimized_call);
+ extern VALUE rb_rjit_optimized_call(VALUE *recv, rb_execution_context_t *ec, int argc, VALUE *argv, int kw_splat, VALUE block_handler);
+ return SIZET2NUM((size_t)rb_rjit_optimized_call);
}
end
@@ -414,8 +414,8 @@ module RubyVM::RJIT # :nodoc: all
def rb_yjit_get_proc_ptr(proc_addr)
proc_t_addr = Primitive.cstmt! %{
- extern rb_proc_t * rb_yjit_get_proc_ptr(VALUE procv);
- return SIZET2NUM((size_t)rb_yjit_get_proc_ptr((VALUE)NUM2SIZET(proc_addr)));
+ extern rb_proc_t * rb_rjit_get_proc_ptr(VALUE procv);
+ return SIZET2NUM((size_t)rb_rjit_get_proc_ptr((VALUE)NUM2SIZET(proc_addr)));
}
rb_proc_t.new(proc_t_addr)
end
diff --git a/vm.c b/vm.c
index 0e70ded06d..9937a48221 100644
--- a/vm.c
+++ b/vm.c
@@ -403,7 +403,7 @@ jit_exec(rb_execution_context_t *ec)
}
}
else { // rjit_call_p
- if (body->total_calls == rjit_opts.call_threshold) {
+ if (body->total_calls == rb_rjit_call_threshold()) {
rb_rjit_compile(iseq);
}
if ((func = body->jit_func) == 0) {
@@ -414,6 +414,12 @@ jit_exec(rb_execution_context_t *ec)
// Call the JIT code
return func(ec, ec->cfp); // SystemV x64 calling convention: ec -> RDI, cfp -> RSI
}
+#else
+static inline VALUE
+jit_exec(rb_execution_context_t *ec)
+{
+ return Qundef;
+}
#endif
#include "vm_insnhelper.c"
diff --git a/vm_core.h b/vm_core.h
index 7fbc2f0392..c75d685061 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -521,6 +521,8 @@ struct rb_iseq_constant_body {
#endif
};
+typedef VALUE (*jit_func_t)(struct rb_execution_context_struct *, struct rb_control_frame_struct *);
+
/* T_IMEMO/iseq */
/* typedef rb_iseq_t is in method.h */
struct rb_iseq_struct {