mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 05:55:46 +02:00
Implement opt_le, opt_ge, and opt_gt
This commit is contained in:
parent
1b0fbd137f
commit
51d36c7b34
Notes:
git
2023-03-06 07:30:05 +00:00
4 changed files with 137 additions and 53 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue