19 lines
593 B
Ruby
19 lines
593 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 , code.index )
|
||
|
block.replace(code , store )
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
Virtual::BootSpace.space.add_pass "Arm::SaveImplementation"
|
||
|
end
|