aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ruby_vm
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2023-04-02 23:05:55 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2023-04-02 23:06:30 -0700
commit50285d2864e28842174a2994d830b623ac2025aa (patch)
treea7ea39c8571fb3b8492139ec25e945154e6bfc4a /lib/ruby_vm
parent0276c1d935cbcebe8eac30b66c7005465db25d7a (diff)
downloadruby-50285d2864e28842174a2994d830b623ac2025aa.tar.gz
RJIT: Swap type information on swap insn
Diffstat (limited to 'lib/ruby_vm')
-rw-r--r--lib/ruby_vm/rjit/insn_compiler.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/ruby_vm/rjit/insn_compiler.rb b/lib/ruby_vm/rjit/insn_compiler.rb
index 8c99876c1a..0c426fe364 100644
--- a/lib/ruby_vm/rjit/insn_compiler.rb
+++ b/lib/ruby_vm/rjit/insn_compiler.rb
@@ -3338,10 +3338,16 @@ module RubyVM::RJIT
stack0_mem = ctx.stack_opnd(offset0)
stack1_mem = ctx.stack_opnd(offset1)
+ mapping0 = ctx.get_opnd_mapping(StackOpnd[0])
+ mapping1 = ctx.get_opnd_mapping(StackOpnd[1])
+
asm.mov(:rax, stack0_mem)
asm.mov(:rcx, stack1_mem)
asm.mov(stack0_mem, :rcx)
asm.mov(stack1_mem, :rax)
+
+ ctx.set_opnd_mapping(StackOpnd[0], mapping1);
+ ctx.set_opnd_mapping(StackOpnd[1], mapping0);
end
def jit_getlocal_generic(jit, ctx, asm, idx:, level:)