Module: RubyVM::RJIT::OperandMatcher

Included in:
Assembler, Assembler
Defined in:
lib/ruby_vm/rjit/assembler.rb

Instance Method Summary collapse

Instance Method Details

#extended_reg?(reg) ⇒ Boolean

Returns:

  • (Boolean)


1107
1108
1109
# File 'lib/ruby_vm/rjit/assembler.rb', line 1107

def extended_reg?(reg)
  reg_code_extended(reg).last
end

#imm32?(imm) ⇒ Boolean

Returns:

  • (Boolean)


1083
1084
1085
# File 'lib/ruby_vm/rjit/assembler.rb', line 1083

def imm32?(imm)
  (-0x8000_0000..0x7fff_ffff).include?(imm) # TODO: consider uimm
end

#imm64?(imm) ⇒ Boolean

Returns:

  • (Boolean)


1087
1088
1089
# File 'lib/ruby_vm/rjit/assembler.rb', line 1087

def imm64?(imm)
  (-0x8000_0000_0000_0000..0xffff_ffff_ffff_ffff).include?(imm)
end

#imm8?(imm) ⇒ Boolean

Returns:

  • (Boolean)


1079
1080
1081
# File 'lib/ruby_vm/rjit/assembler.rb', line 1079

def imm8?(imm)
  (-0x80..0x7f).include?(imm)
end

#r32?(reg) ⇒ Boolean

Returns:

  • (Boolean)


1091
1092
1093
1094
1095
1096
1097
# File 'lib/ruby_vm/rjit/assembler.rb', line 1091

def r32?(reg)
  if extended_reg?(reg)
    reg.end_with?('d')
  else
    reg.start_with?('e')
  end
end

#r64?(reg) ⇒ Boolean

Returns:

  • (Boolean)


1099
1100
1101
1102
1103
1104
1105
# File 'lib/ruby_vm/rjit/assembler.rb', line 1099

def r64?(reg)
  if extended_reg?(reg)
    reg.match?(/\Ar\d+\z/)
  else
    reg.start_with?('r')
  end
end

#reg_code_extended(reg) ⇒ Object



1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
# File 'lib/ruby_vm/rjit/assembler.rb', line 1111

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