rubyx/lib/risc/instructions/load_data.rb

37 lines
1.2 KiB
Ruby

module Risc
# load raw data into a register
#
# This is not really used by the compiler, or to be more precise: not used during the
# compilation of ruby code. Ruby code works on Objects only
#
# But for Builtin methods, methods that are created programatically and form the runtime,
# it can be handy to load an integer directly without the object overhead.
#
class LoadData < Instruction
def initialize( source , constant , register)
super(source)
@register = register
@constant = constant
raise "Not Integer #{constant}" unless constant.is_a?(Integer)
raise "Not register #{register}" unless RegisterValue.look_like_reg(register)
end
attr_accessor :register , :constant
# return an array of names of registers that is used by the instruction
def register_names
[register.symbol]
end
def to_s
class_source "#{register} <- #{constant}"
end
end
def self.load_data( source , value , register = nil )
raise "can only load integers, not #{value}" unless value.is_a?(Integer)
type = Parfait.object_space.get_type_by_class_name(:Integer)
register = RegisterValue.new( "fix_#{value}".to_sym , type ) unless register
LoadData.new( source , value , register)
end
end