summaryrefslogtreecommitdiff
path: root/lib/ruby_vm/mjit/assembler.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2023-02-08 01:17:39 -0800
committerTakashi Kokubun <[email protected]>2023-03-05 22:11:20 -0800
commitd332c6ee126870aa3413de8d96e493b527559181 (patch)
tree65501a6ec0a578c7d29e2c7ee53dae4b5990de5a /lib/ruby_vm/mjit/assembler.rb
parente92edfc7f02edfbc9bedddc5b4e162c00ac141b8 (diff)
Implement getlocal_WC_1
Diffstat (limited to 'lib/ruby_vm/mjit/assembler.rb')
-rw-r--r--lib/ruby_vm/mjit/assembler.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/ruby_vm/mjit/assembler.rb b/lib/ruby_vm/mjit/assembler.rb
index f2cd90a789..5f2873b09f 100644
--- a/lib/ruby_vm/mjit/assembler.rb
+++ b/lib/ruby_vm/mjit/assembler.rb
@@ -101,6 +101,23 @@ module RubyVM::MJIT
end
end
+ def and(dst, src)
+ case [dst, src]
+ # AND r/m64, imm8 (Mod 11: reg)
+ in [Symbol => dst_reg, Integer => src_imm] if r64?(dst_reg) && imm8?(src_imm)
+ # REX.W + 83 /4 ib
+ # MI: Operand 1: ModRM:r/m (r, w), Operand 2: imm8/16/32
+ insn(
+ prefix: REX_W,
+ opcode: 0x83,
+ mod_rm: ModRM[mod: Mod11, reg: 4, rm: dst_reg],
+ imm: imm8(src_imm),
+ )
+ else
+ raise NotImplementedError, "and: not-implemented operands: #{dst.inspect}, #{src.inspect}"
+ end
+ end
+
# @param addr [Integer]
def call(addr)
# CALL rel32