module RubyVM::RJIT::OperandMatcher

Public Instance Methods

extended_reg?(reg) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1096
def extended_reg?(reg)
  reg_code_extended(reg).last
end
imm32?(imm) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1072
def imm32?(imm)
  (-0x8000_0000..0x7fff_ffff).include?(imm) # TODO: consider uimm
end
imm64?(imm) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1076
def imm64?(imm)
  (-0x8000_0000_0000_0000..0xffff_ffff_ffff_ffff).include?(imm)
end
imm8?(imm) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1068
def imm8?(imm)
  (-0x80..0x7f).include?(imm)
end
r32?(reg) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1080
def r32?(reg)
  if extended_reg?(reg)
    reg.end_with?('d')
  else
    reg.start_with?('e')
  end
end
r64?(reg) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1088
def r64?(reg)
  if extended_reg?(reg)
    reg.match?(/\Ar\d+\z/)
  else
    reg.start_with?('r')
  end
end
reg_code_extended(reg) click to toggle source
# File ruby_vm/rjit/assembler.rb, line 1100
def reg_code_extended(reg)
  case reg
  # Not extended
  when :al, :ax, :eax, :rax then [0, false]
  when :cl, :cx, :ecx, :rcx then [1, false]
  when :dl, :dx, :edx, :rdx then [2, false]
  when :bl, :bx, :ebx, :rbx then [3, false]
  when :ah, :sp, :esp, :rsp then [4, false]
  when :ch, :bp, :ebp, :rbp then [5, false]
  when :dh, :si, :esi, :rsi then [6, false]
  when :bh, :di, :edi, :rdi then [7, false]
  # Extended
  when :r8b,  :r8w,  :r8d,  :r8  then [0, true]
  when :r9b,  :r9w,  :r9d,  :r9  then [1, true]
  when :r10b, :r10w, :r10d, :r10 then [2, true]
  when :r11b, :r11w, :r11d, :r11 then [3, true]
  when :r12b, :r12w, :r12d, :r12 then [4, true]
  when :r13b, :r13w, :r13d, :r13 then [5, true]
  when :r14b, :r14w, :r14d, :r14 then [6, true]
  when :r15b, :r15w, :r15d, :r15 then [7, true]
  else raise ArgumentError, "unexpected reg: #{reg.inspect}"
  end
end