diff options
author | Takashi Kokubun <[email protected]> | 2023-01-02 14:11:06 -0800 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2023-03-05 22:11:20 -0800 |
commit | 21696ad81ec40cf9cd146836dc8c945f1e485774 (patch) | |
tree | f5d132f2f11c082512790d2c20804910bc658159 /lib/ruby_vm/mjit/assembler.rb | |
parent | 00c659d246784fe98114136bc3eb4d7f02cb071c (diff) |
Partly implement BOP assumption
Diffstat (limited to 'lib/ruby_vm/mjit/assembler.rb')
-rw-r--r-- | lib/ruby_vm/mjit/assembler.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/ruby_vm/mjit/assembler.rb b/lib/ruby_vm/mjit/assembler.rb index 87701a7102..c55df0235d 100644 --- a/lib/ruby_vm/mjit/assembler.rb +++ b/lib/ruby_vm/mjit/assembler.rb @@ -31,12 +31,13 @@ module RubyVM::MJIT @labels = {} @label_id = 0 @comments = Hash.new { |h, k| h[k] = [] } + @blocks = Hash.new { |h, k| h[k] = [] } @stub_starts = Hash.new { |h, k| h[k] = [] } @stub_ends = Hash.new { |h, k| h[k] = [] } end def assemble(addr) - set_stub_addrs(addr) + set_code_addrs(addr) resolve_rel32(addr) resolve_labels @@ -307,6 +308,12 @@ module RubyVM::MJIT @comments[@bytes.size] << message end + # Mark the starting address of a block + def block(block) + @blocks[@bytes.size] << block + end + + # Mark the starting/ending addresses of a stub def stub(stub) @stub_starts[@bytes.size] << stub yield @@ -495,8 +502,11 @@ module RubyVM::MJIT [Rel32.new(addr), Rel32Pad, Rel32Pad, Rel32Pad] end - def set_stub_addrs(write_addr) + def set_code_addrs(write_addr) (@bytes.size + 1).times do |index| + @blocks.fetch(index, []).each do |block| + block.start_addr = write_addr + index + end @stub_starts.fetch(index, []).each do |stub| stub.start_addr = write_addr + index end |