diff options
Diffstat (limited to 'lib/ruby_vm/rjit/assembler.rb')
-rw-r--r-- | lib/ruby_vm/rjit/assembler.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/ruby_vm/rjit/assembler.rb b/lib/ruby_vm/rjit/assembler.rb index 64f663ec0e..42995e6c8c 100644 --- a/lib/ruby_vm/rjit/assembler.rb +++ b/lib/ruby_vm/rjit/assembler.rb @@ -152,6 +152,16 @@ module RubyVM::RJIT mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg], disp: imm8(src_disp), ) + # AND r64, r/m64 (Mod 10: [reg]+disp32) + in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM32 => src_disp]] + # REX.W + 23 /r + # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r) + insn( + prefix: REX_W, + opcode: 0x23, + mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg], + disp: imm32(src_disp), + ) end end @@ -328,6 +338,17 @@ module RubyVM::RJIT disp: left_disp, imm: imm8(right_imm), ) + # CMP r/m64, imm32 (Mod 01: [reg]+disp8) + in [QwordPtr[R64 => left_reg, IMM8 => left_disp], IMM32 => right_imm] + # REX.W + 81 /7 id + # MI: Operand 1: ModRM:r/m (r), Operand 2: imm8/16/32 + insn( + prefix: REX_W, + opcode: 0x81, + mod_rm: ModRM[mod: Mod01, reg: 7, rm: left_reg], + disp: left_disp, + imm: imm32(right_imm), + ) # CMP r/m64, imm8 (Mod 10: [reg]+disp32) in [QwordPtr[R64 => left_reg, IMM32 => left_disp], IMM8 => right_imm] # REX.W + 83 /7 ib @@ -725,6 +746,16 @@ module RubyVM::RJIT mod_rm: ModRM[mod: Mod01, reg: dst_reg, rm: src_reg], disp: imm8(src_disp), ) + # OR r64, r/m64 (Mod 10: [reg]+disp32) + in [R64 => dst_reg, QwordPtr[R64 => src_reg, IMM32 => src_disp]] + # REX.W + 0B /r + # RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r) + insn( + prefix: REX_W, + opcode: 0x0b, + mod_rm: ModRM[mod: Mod10, reg: dst_reg, rm: src_reg], + disp: imm32(src_disp), + ) end end |