2017-01-19 09:02:29 +02:00
|
|
|
module Risc
|
2014-10-04 12:51:08 +03:00
|
|
|
|
2018-03-21 15:48:04 +05:30
|
|
|
# Transfer the constents of one register to another.
|
2015-06-21 21:00:16 +03:00
|
|
|
# possibly called move in some cpus
|
2014-10-04 12:51:08 +03:00
|
|
|
|
2016-12-25 18:05:39 +02:00
|
|
|
# There are other instructions to move data from / to memory, namely SlotToReg and RegToSlot
|
2015-06-21 21:00:16 +03:00
|
|
|
|
|
|
|
# Get/Set Slot move data around in vm objects, but transfer moves the objects (in the machine)
|
|
|
|
#
|
|
|
|
# Also it is used for moving temorary data
|
2015-06-27 20:09:21 +03:00
|
|
|
#
|
|
|
|
|
2018-03-21 15:48:04 +05:30
|
|
|
class Transfer < Instruction
|
2015-06-27 20:09:21 +03:00
|
|
|
# initialize with from and to registers.
|
|
|
|
# First argument from
|
2015-10-14 13:48:42 +03:00
|
|
|
# second argument to
|
2015-06-27 20:09:21 +03:00
|
|
|
#
|
2015-07-24 13:23:56 +03:00
|
|
|
# Note: this may be reversed from some assembler notations (also arm)
|
2018-03-21 15:48:04 +05:30
|
|
|
def initialize( source , from , to )
|
2015-07-27 12:13:39 +03:00
|
|
|
super(source)
|
2015-10-15 09:32:47 +03:00
|
|
|
@from = from
|
|
|
|
@to = to
|
2018-06-29 11:39:07 +03:00
|
|
|
raise "Fix me #{from}" unless from.is_a? RegisterValue
|
|
|
|
raise "Fix me #{to}" unless to.is_a? RegisterValue
|
2014-10-04 12:51:08 +03:00
|
|
|
end
|
|
|
|
attr_reader :from, :to
|
2015-07-24 13:23:56 +03:00
|
|
|
|
|
|
|
def to_s
|
2018-03-22 18:38:19 +02:00
|
|
|
class_source "#{from} -> #{to}"
|
2015-07-24 13:23:56 +03:00
|
|
|
end
|
2015-11-21 14:17:54 +02:00
|
|
|
end
|
2016-12-28 18:37:15 +02:00
|
|
|
def self.transfer( source , from , to)
|
2018-03-21 15:48:04 +05:30
|
|
|
Transfer.new( source , from , to)
|
2014-10-04 12:51:08 +03:00
|
|
|
end
|
2015-06-21 21:00:16 +03:00
|
|
|
end
|