summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootstraptest/test_insns.rb2
-rw-r--r--insns.def2
-rw-r--r--test/ruby/test_jit.rb5
-rw-r--r--tool/ruby_vm/views/mjit_compile.inc.erb3
-rw-r--r--vm_opts.h4
5 files changed, 6 insertions, 10 deletions
diff --git a/bootstraptest/test_insns.rb b/bootstraptest/test_insns.rb
index abfb53f7dc..8addbf7b83 100644
--- a/bootstraptest/test_insns.rb
+++ b/bootstraptest/test_insns.rb
@@ -412,8 +412,6 @@ tests = [
class String; def =~ other; true; end; end
'true' =~ /true/
},
-
- [ 'opt_call_c_function', 'Struct.new(:x).new.x = true', ],
]
# normal path
diff --git a/insns.def b/insns.def
index ba95655f9f..2257bcd148 100644
--- a/insns.def
+++ b/insns.def
@@ -1455,7 +1455,7 @@ opt_regexpmatch2
}
/* call native compiled method */
-DEFINE_INSN
+DEFINE_INSN_IF(SUPPORT_CALL_C_FUNCTION)
opt_call_c_function
(rb_insn_func_t funcptr)
()
diff --git a/test/ruby/test_jit.rb b/test/ruby/test_jit.rb
index a5d5fb45a9..97c287f692 100644
--- a/test/ruby/test_jit.rb
+++ b/test/ruby/test_jit.rb
@@ -22,7 +22,6 @@ class TestJIT < Test::Unit::TestCase
TEST_PENDING_INSNS = RubyVM::INSTRUCTION_NAMES.select { |n| n.start_with?('trace_') }.map(&:to_sym) + [
# not supported yet
:defineclass,
- :opt_call_c_function,
# to be tested
:invokebuiltin,
@@ -613,10 +612,6 @@ class TestJIT < Test::Unit::TestCase
assert_compile_once("'true' =~ /true/", result_inspect: '0', insns: %i[opt_regexpmatch2])
end
- def test_compile_insn_opt_call_c_function
- skip "support this in opt_call_c_function (low priority)"
- end
-
def test_compile_insn_opt_invokebuiltin_delegate_leave
insns = collect_insns(RubyVM::InstructionSequence.of("\x00".method(:unpack)).to_a)
mark_tested_insn(:opt_invokebuiltin_delegate_leave, used_insns: insns)
diff --git a/tool/ruby_vm/views/mjit_compile.inc.erb b/tool/ruby_vm/views/mjit_compile.inc.erb
index c9755454ba..0d3678dfb5 100644
--- a/tool/ruby_vm/views/mjit_compile.inc.erb
+++ b/tool/ruby_vm/views/mjit_compile.inc.erb
@@ -16,8 +16,7 @@
} -%>
%
% unsupported_insns = [
-% 'defineclass', # low priority
-% 'opt_call_c_function', # low priority
+% 'defineclass', # low priority
% ]
%
% opt_send_without_block = RubyVM::Instructions.find { |i| i.name == 'opt_send_without_block' }
diff --git a/vm_opts.h b/vm_opts.h
index 02d60e71fd..b0ca81f304 100644
--- a/vm_opts.h
+++ b/vm_opts.h
@@ -62,6 +62,10 @@
#define OPT_SUPPORT_JOKE 0
#endif
+#ifndef OPT_SUPPORT_CALL_C_FUNCTION
+#define OPT_SUPPORT_CALL_C_FUNCTION 0
+#endif
+
#ifndef VM_COLLECT_USAGE_DETAILS
#define VM_COLLECT_USAGE_DETAILS 0
#endif