rubyx/lib/arm/passes/constant_implementation.rb
Torsten Ruger 55b7ca83e1 fixing load constant
which needs to add to pc to get an object reference
2015-06-26 20:01:52 +03:00

21 lines
587 B
Ruby

module Arm
class ConstantImplementation
def run block
block.codes.dup.each do |code|
next unless code.is_a? Register::LoadConstant
constant = code.constant
if constant.is_a?(Parfait::Object) or constant.is_a? Symbol
load = ArmMachine.add( code.register , :pc , constant )
else
load = ArmMachine.mov( code.register , code.constant )
end
block.replace(code , load )
#puts "replaced #{load.inspect.to_s[0..1000]}"
end
end
end
Virtual.machine.add_pass "Arm::ConstantImplementation"
end