summaryrefslogtreecommitdiff
path: root/lib/ruby_vm
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2023-01-07 13:54:26 -0800
committerTakashi Kokubun <[email protected]>2023-03-05 22:11:20 -0800
commitee6d627b434c4bc977c059a0e1d885800de90b63 (patch)
tree042e1da8d490d88b2a5f092a505458248c84ab7d /lib/ruby_vm
parent850303ded65e2a949732a6a7d037079d610d22a6 (diff)
Implement putobject 0/1
Diffstat (limited to 'lib/ruby_vm')
-rw-r--r--lib/ruby_vm/mjit/insn_compiler.rb27
1 files changed, 20 insertions, 7 deletions
diff --git a/lib/ruby_vm/mjit/insn_compiler.rb b/lib/ruby_vm/mjit/insn_compiler.rb
index c13287f74c..3d349e611c 100644
--- a/lib/ruby_vm/mjit/insn_compiler.rb
+++ b/lib/ruby_vm/mjit/insn_compiler.rb
@@ -17,7 +17,7 @@ module RubyVM::MJIT
asm.incr_counter(:mjit_insns_count)
asm.comment("Insn: #{insn.name}")
- # 7/101
+ # 9/101
case insn.name
# nop
# getlocal
@@ -115,6 +115,10 @@ module RubyVM::MJIT
# opt_invokebuiltin_delegate
# opt_invokebuiltin_delegate_leave
when :getlocal_WC_0 then getlocal_WC_0(jit, ctx, asm)
+ # setlocal_WC_0
+ # setlocal_WC_1
+ when :putobject_INT2FIX_0_ then putobject_INT2FIX_0_(jit, ctx, asm)
+ when :putobject_INT2FIX_1_ then putobject_INT2FIX_1_(jit, ctx, asm)
else CantCompile
end
end
@@ -167,10 +171,7 @@ module RubyVM::MJIT
# @param jit [RubyVM::MJIT::JITState]
# @param ctx [RubyVM::MJIT::Context]
# @param asm [RubyVM::MJIT::Assembler]
- def putobject(jit, ctx, asm)
- # Get operands
- val = jit.operand(0)
-
+ def putobject(jit, ctx, asm, val: jit.operand(0))
# Push it to the stack
# TODO: GC offsets
raise 'sp_offset != stack_size' if ctx.sp_offset != ctx.stack_size # TODO: handle this
@@ -408,8 +409,20 @@ module RubyVM::MJIT
# getlocal_WC_1
# setlocal_WC_0
# setlocal_WC_1
- # putobject_INT2FIX_0_
- # putobject_INT2FIX_1_
+
+ # @param jit [RubyVM::MJIT::JITState]
+ # @param ctx [RubyVM::MJIT::Context]
+ # @param asm [RubyVM::MJIT::Assembler]
+ def putobject_INT2FIX_0_(jit, ctx, asm)
+ putobject(jit, ctx, asm, val: C.to_value(0))
+ end
+
+ # @param jit [RubyVM::MJIT::JITState]
+ # @param ctx [RubyVM::MJIT::Context]
+ # @param asm [RubyVM::MJIT::Assembler]
+ def putobject_INT2FIX_1_(jit, ctx, asm)
+ putobject(jit, ctx, asm, val: C.to_value(1))
+ end
#
# Helpers