diff options
-rw-r--r-- | lib/ruby_vm/rjit/compiler.rb | 70 |
1 files changed, 70 insertions, 0 deletions
@@ -279,6 +279,8 @@ module RubyVM::RJIT end # @param asm [RubyVM::RJIT::Assembler] def compile_block(asm, jit:, pc:, ctx: Context.new) # Mark the block start address and prepare an exit code storage ctx = limit_block_versions(jit.iseq, pc, ctx) @@ -292,6 +294,7 @@ module RubyVM::RJIT # Compile each insn index = (pc - iseq.body.iseq_encoded.to_i) / C.VALUE.size while index < iseq.body.iseq_size insn = self.class.decode_insn(iseq.body.iseq_encoded[index]) jit.pc = (iseq.body.iseq_encoded + index).to_i jit.stack_size_for_pc = ctx.stack_size @@ -308,6 +311,11 @@ module RubyVM::RJIT jit.record_boundary__point = false end case status = @insn_compiler.compile(jit, ctx, asm, insn) when KeepCompiling # For now, reset the chain depth after each instruction as only the @@ -435,5 +443,67 @@ module RubyVM::RJIT rescue RangeError # bignum too big to convert into `unsigned long long' (RangeError) -1 end end end |