summaryrefslogtreecommitdiff
path: root/lib/ruby_vm/rjit/assembler.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2023-03-18 23:49:11 -0700
committerTakashi Kokubun <[email protected]>2023-03-19 13:25:41 -0700
commit2121282753b9faee1ce6f93d6c75b105ad040af0 (patch)
treebd2b4b09c3276380ae0096ed71d30ba41ee6bbcc /lib/ruby_vm/rjit/assembler.rb
parentbcd0aa896fe84610cef8dc873239738001283538 (diff)
RJIT: Optimize String#<<
Diffstat (limited to 'lib/ruby_vm/rjit/assembler.rb')
-rw-r--r--lib/ruby_vm/rjit/assembler.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/ruby_vm/rjit/assembler.rb b/lib/ruby_vm/rjit/assembler.rb
index 6bd654fd3e..bd8f8ad1d6 100644
--- a/lib/ruby_vm/rjit/assembler.rb
+++ b/lib/ruby_vm/rjit/assembler.rb
@@ -838,6 +838,20 @@ module RubyVM::RJIT
end
end
+ def xor(dst, src)
+ case [dst, src]
+ # XOR r/m64, r64 (Mod 11: reg)
+ in [R64 => dst_reg, R64 => src_reg]
+ # REX.W + 31 /r
+ # MR: Operand 1: ModRM:r/m (r, w), Operand 2: ModRM:reg (r)
+ insn(
+ prefix: REX_W,
+ opcode: 0x31,
+ mod_rm: ModRM[mod: Mod11, reg: src_reg, rm: dst_reg],
+ )
+ end
+ end
+
#
# Utilities
#