diff options
author | Takashi Kokubun <[email protected]> | 2023-02-10 11:43:53 -0800 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2023-03-05 22:41:35 -0800 |
commit | aba530e23b463c3a682ab9bc233568c684d1fe81 (patch) | |
tree | 166f9e9aa26f0f0f7e3901efef4c7520763c83aa /lib/ruby_vm/mjit/assembler.rb | |
parent | 494989e87e5095a2789c110972c0a1a43f544601 (diff) |
Implement invalidation after cfunc
Diffstat (limited to 'lib/ruby_vm/mjit/assembler.rb')
-rw-r--r-- | lib/ruby_vm/mjit/assembler.rb | 8 |
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 |