summaryrefslogtreecommitdiff
path: root/lib/ruby_vm/mjit/assembler.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ruby_vm/mjit/assembler.rb')
-rw-r--r--lib/ruby_vm/mjit/assembler.rb8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/ruby_vm/mjit/assembler.rb b/lib/ruby_vm/mjit/assembler.rb
index f8543c4a66..e50cbdf600 100644
--- a/lib/ruby_vm/mjit/assembler.rb
+++ b/lib/ruby_vm/mjit/assembler.rb
@@ -36,6 +36,7 @@ module RubyVM::MJIT
@blocks = Hash.new { |h, k| h[k] = [] }
@stub_starts = Hash.new { |h, k| h[k] = [] }
@stub_ends = Hash.new { |h, k| h[k] = [] }
+ @pos_markers = Hash.new { |h, k| h[k] = [] }
end
def assemble(addr)
@@ -45,6 +46,9 @@ module RubyVM::MJIT
write_bytes(addr)
+ @pos_markers.each do |write_pos, markers|
+ markers.each { |marker| marker.call(addr + write_pos) }
+ end
@bytes.size
ensure
@bytes.clear
@@ -617,6 +621,10 @@ module RubyVM::MJIT
@stub_ends[@bytes.size] << stub
end
+ def pos_marker(&block)
+ @pos_markers[@bytes.size] << block
+ end
+
def new_label(name)
Label.new(id: @label_id += 1, name:)
end