mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 14:05:02 +02:00
Skip invalidation for trace_ insns
This commit is contained in:
parent
feb60f6f51
commit
bef63f445b
Notes:
git
2023-03-06 07:29:56 +00:00
2 changed files with 21 additions and 11 deletions
|
@ -203,6 +203,12 @@ module RubyVM::MJIT
|
|||
break
|
||||
when CantCompile
|
||||
@exit_compiler.compile_side_exit(jit.pc, ctx, asm)
|
||||
|
||||
# If this is the first instruction, this block never needs to be invalidated.
|
||||
if block.pc == iseq.body.iseq_encoded.to_i + index * C.VALUE.size
|
||||
block.invalidated = true
|
||||
end
|
||||
|
||||
break
|
||||
else
|
||||
raise "compiling #{insn.name} returned unexpected status: #{status.inspect}"
|
||||
|
@ -224,11 +230,14 @@ module RubyVM::MJIT
|
|||
remove_block(iseq, block)
|
||||
|
||||
# Invalidate the block with entry exit
|
||||
@cb.with_write_addr(block.start_addr) do
|
||||
asm = Assembler.new
|
||||
asm.comment('invalidate_block')
|
||||
asm.jmp(block.entry_exit)
|
||||
@cb.write(asm)
|
||||
unless block.invalidated
|
||||
@cb.with_write_addr(block.start_addr) do
|
||||
asm = Assembler.new
|
||||
asm.comment('invalidate_block')
|
||||
asm.jmp(block.entry_exit)
|
||||
@cb.write(asm)
|
||||
end
|
||||
block.invalidated = true
|
||||
end
|
||||
|
||||
# Re-stub incoming branches
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue