diff options
author | Takashi Kokubun <[email protected]> | 2023-02-08 01:17:39 -0800 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2023-03-05 22:11:20 -0800 |
commit | d332c6ee126870aa3413de8d96e493b527559181 (patch) | |
tree | 65501a6ec0a578c7d29e2c7ee53dae4b5990de5a /lib/ruby_vm/mjit/assembler.rb | |
parent | e92edfc7f02edfbc9bedddc5b4e162c00ac141b8 (diff) |
Implement getlocal_WC_1
Diffstat (limited to 'lib/ruby_vm/mjit/assembler.rb')
-rw-r--r-- | lib/ruby_vm/mjit/assembler.rb | 17 |
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 |