Method: MicroCisc::Compile::Instruction#validate_reg

Defined in:
lib/micro_cisc/compile/instruction.rb

#validate_reg(arg) ⇒ Object



307
308
309
310
311
312
313
314
315
316
317
318
319
320
# File 'lib/micro_cisc/compile/instruction.rb', line 307

def validate_reg(arg)
  valid = arg.first == 0 && arg.last == 'reg'
  valid = valid || ([1, 2, 3].include?(arg.first) && arg.last == 'mem')
  valid = valid || (arg.first == 4 && arg.last == 'val')
  valid = valid || ([1, 2, 3].include?(arg.first) && arg.last == 'reg')

  if valid
    reg = arg.first
    reg += 4 if [1, 2, 3].include?(arg.first) && 'reg' == arg.last
    reg
  else
    raise ArgumentError, "Invalid register: #{arg.first.to_s}.#{arg.last}"
  end
end