20 lines
591 B
Ruby
20 lines
591 B
Ruby
module Arm
|
|
|
|
# Arm stores the return address in a register (not on the stack)
|
|
# The register is called link , or lr for short .
|
|
# Maybe because it provides the "link" back to the caller (?)
|
|
|
|
# the vm defines a register for the location, so we store it there.
|
|
|
|
class SaveImplementation
|
|
def run block
|
|
block.codes.dup.each do |code|
|
|
next unless code.is_a? Register::SaveReturn
|
|
store = ArmMachine.str( :lr , code.register , 4 * code.index )
|
|
block.replace(code , store )
|
|
end
|
|
end
|
|
end
|
|
Virtual.machine.add_pass "Arm::SaveImplementation"
|
|
end
|