diff options
-rw-r--r-- | .github/workflows/compilers.yml | 7 | ||||
-rw-r--r-- | common.mk | 925 | ||||
-rw-r--r-- | configure.ac | 79 | ||||
-rw-r--r-- | rjit.c | 108 | ||||
-rw-r--r-- | rjit.h | 11 | ||||
-rw-r--r-- | rjit_c.c | 82 | ||||
-rw-r--r-- | rjit_c.rb | 24 | ||||
-rw-r--r-- | vm.c | 8 | ||||
-rw-r--r-- | vm_core.h | 2 |
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 @@ -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"} @@ -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")); @@ -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){} @@ -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) @@ -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 @@ -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" @@ -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 { |