Implement opt_le, opt_ge, and opt_gt

This commit is contained in:
Takashi Kokubun 2023-02-13 21:48:24 -08:00
parent 1b0fbd137f
commit 51d36c7b34
Notes: git 2023-03-06 07:30:05 +00:00
4 changed files with 137 additions and 53 deletions

View file

@ -146,6 +146,38 @@ module RubyVM::MJIT
end
end
def cmovg(dst, src)
case [dst, src]
# CMOVG r64, r/m64 (Mod 11: reg)
in [Symbol => dst_reg, Symbol => src_reg]
# REX.W + 0F 4F /r
# RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
insn(
prefix: REX_W,
opcode: [0x0f, 0x4f],
mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
)
else
raise NotImplementedError, "cmovg: not-implemented operands: #{dst.inspect}, #{src.inspect}"
end
end
def cmovge(dst, src)
case [dst, src]
# CMOVGE r64, r/m64 (Mod 11: reg)
in [Symbol => dst_reg, Symbol => src_reg]
# REX.W + 0F 4D /r
# RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
insn(
prefix: REX_W,
opcode: [0x0f, 0x4d],
mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
)
else
raise NotImplementedError, "cmovge: not-implemented operands: #{dst.inspect}, #{src.inspect}"
end
end
def cmovl(dst, src)
case [dst, src]
# CMOVL r64, r/m64 (Mod 11: reg)
@ -162,6 +194,22 @@ module RubyVM::MJIT
end
end
def cmovle(dst, src)
case [dst, src]
# CMOVLE r64, r/m64 (Mod 11: reg)
in [Symbol => dst_reg, Symbol => src_reg]
# REX.W + 0F 4E /r
# RM: Operand 1: ModRM:reg (r, w), Operand 2: ModRM:r/m (r)
insn(
prefix: REX_W,
opcode: [0x0f, 0x4e],
mod_rm: ModRM[mod: Mod11, reg: dst_reg, rm: src_reg],
)
else
raise NotImplementedError, "cmovle: not-implemented operands: #{dst.inspect}, #{src.inspect}"
end
end
def cmp(left, right)
case [left, right]
# CMP r/m32, imm32 (Mod 01: [reg]+disp8)