RJIT: Handle Mod 10 for CMP r/m64, r64

This commit is contained in:
Takashi Kokubun 2023-03-11 23:47:10 -08:00
parent 9c220bf5e1
commit 3efe4639ec
2 changed files with 13 additions and 1 deletions

View File

@ -355,6 +355,16 @@ module RubyVM::RJIT
mod_rm: ModRM[mod: Mod01, reg: right_reg, rm: left_reg],
disp: left_disp,
)
# CMP r/m64, r64 (Mod 10: [reg]+disp32)
in [QwordPtr[R64 => left_reg, IMM32 => left_disp], R64 => right_reg]
# REX.W + 39 /r
# MR: Operand 1: ModRM:r/m (r), Operand 2: ModRM:reg (r)
insn(
prefix: REX_W,
opcode: 0x39,
mod_rm: ModRM[mod: Mod10, reg: right_reg, rm: left_reg],
disp: imm32(left_disp),
)
# CMP r/m64, r64 (Mod 11: reg)
in [R64 => left_reg, R64 => right_reg]
# REX.W + 39 /r

View File

@ -118,6 +118,7 @@ module RubyVM::RJIT
asm.cmp(:rax, 8) # CMP r/m64, imm8 (Mod 11: reg)
asm.cmp(:rax, 0x100) # CMP r/m64, imm32 (Mod 11: reg)
asm.cmp([:rax, 8], :rbx) # CMP r/m64, r64 (Mod 01: [reg]+disp8)
asm.cmp([:rax, -0x100], :rbx) # CMP r/m64, r64 (Mod 10: [reg]+disp32)
asm.cmp(:rax, :rbx) # CMP r/m64, r64 (Mod 11: reg)
assert_compile(asm, <<~EOS)
0x0: cmp byte ptr [rax + 8], 8
@ -127,7 +128,8 @@ module RubyVM::RJIT
0x18: cmp rax, 8
0x1c: cmp rax, 0x100
0x23: cmp qword ptr [rax + 8], rbx
0x27: cmp rax, rbx
0x27: cmp qword ptr [rax - 0x100], rbx
0x2e: cmp rax, rbx
EOS
end