RJIT: Handle Mod 10 for CMP r/m64, r64
This commit is contained in:
parent
9c220bf5e1
commit
3efe4639ec
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user