Implement putself
This commit is contained in:
parent
62d36dd127
commit
850303ded6
@ -17,7 +17,7 @@ module RubyVM::MJIT
|
|||||||
asm.incr_counter(:mjit_insns_count)
|
asm.incr_counter(:mjit_insns_count)
|
||||||
asm.comment("Insn: #{insn.name}")
|
asm.comment("Insn: #{insn.name}")
|
||||||
|
|
||||||
# 6/101
|
# 7/101
|
||||||
case insn.name
|
case insn.name
|
||||||
# nop
|
# nop
|
||||||
# getlocal
|
# getlocal
|
||||||
@ -37,7 +37,7 @@ module RubyVM::MJIT
|
|||||||
# getglobal
|
# getglobal
|
||||||
# setglobal
|
# setglobal
|
||||||
when :putnil then putnil(jit, ctx, asm)
|
when :putnil then putnil(jit, ctx, asm)
|
||||||
# putself
|
when :putself then putself(jit, ctx, asm)
|
||||||
when :putobject then putobject(jit, ctx, asm)
|
when :putobject then putobject(jit, ctx, asm)
|
||||||
# putspecialobject
|
# putspecialobject
|
||||||
# putstring
|
# putstring
|
||||||
@ -153,7 +153,16 @@ module RubyVM::MJIT
|
|||||||
KeepCompiling
|
KeepCompiling
|
||||||
end
|
end
|
||||||
|
|
||||||
# putself
|
# @param jit [RubyVM::MJIT::JITState]
|
||||||
|
# @param ctx [RubyVM::MJIT::Context]
|
||||||
|
# @param asm [RubyVM::MJIT::Assembler]
|
||||||
|
def putself(jit, ctx, asm)
|
||||||
|
raise 'sp_offset != stack_size' if ctx.sp_offset != ctx.stack_size # TODO: handle this
|
||||||
|
asm.mov(:rax, [CFP, C.rb_control_frame_t.offsetof(:self)])
|
||||||
|
asm.mov([SP, C.VALUE.size * ctx.stack_size], :rax)
|
||||||
|
ctx.stack_push(1)
|
||||||
|
KeepCompiling
|
||||||
|
end
|
||||||
|
|
||||||
# @param jit [RubyVM::MJIT::JITState]
|
# @param jit [RubyVM::MJIT::JITState]
|
||||||
# @param ctx [RubyVM::MJIT::Context]
|
# @param ctx [RubyVM::MJIT::Context]
|
||||||
@ -260,7 +269,7 @@ module RubyVM::MJIT
|
|||||||
ctx.stack_pop(1)
|
ctx.stack_pop(1)
|
||||||
|
|
||||||
# Set stubs
|
# Set stubs
|
||||||
# TODO: reuse already-compiled blocks
|
# TODO: reuse already-compiled blocks jumped from different blocks
|
||||||
branch_stub = BranchStub.new(
|
branch_stub = BranchStub.new(
|
||||||
iseq: jit.iseq,
|
iseq: jit.iseq,
|
||||||
ctx: ctx.dup,
|
ctx: ctx.dup,
|
||||||
|
@ -38,7 +38,7 @@ module RubyVM::MJIT
|
|||||||
$stderr.puts "total_insns_count: #{format('%10d', stats[:total_insns_count])}" if stats.key?(:total_insns_count)
|
$stderr.puts "total_insns_count: #{format('%10d', stats[:total_insns_count])}" if stats.key?(:total_insns_count)
|
||||||
$stderr.puts "vm_insns_count: #{format('%10d', stats[:vm_insns_count])}" if stats.key?(:vm_insns_count)
|
$stderr.puts "vm_insns_count: #{format('%10d', stats[:vm_insns_count])}" if stats.key?(:vm_insns_count)
|
||||||
$stderr.puts "mjit_insns_count: #{format('%10d', stats[:mjit_insns_count])}"
|
$stderr.puts "mjit_insns_count: #{format('%10d', stats[:mjit_insns_count])}"
|
||||||
$stderr.puts "ratio_in_yjit: #{format('%9.1f', stats[:ratio_in_mjit])}%" if stats.key?(:ratio_in_mjit)
|
$stderr.puts "ratio_in_mjit: #{format('%9.1f', stats[:ratio_in_mjit])}%" if stats.key?(:ratio_in_mjit)
|
||||||
|
|
||||||
print_exit_counts(stats)
|
print_exit_counts(stats)
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user