Torsten
c890e8402b
move to returning the attribute names getting and setting can then be automated in the base class
37 lines
1.2 KiB
Ruby
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_attributes
|
|
[:register]
|
|
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
|