add initial jump instruction

This commit is contained in:
Torsten Ruger 2014-10-06 19:57:44 +03:00
parent e1aa3fd843
commit 5c90ad83e0
5 changed files with 32 additions and 1 deletions

View File

@ -119,3 +119,4 @@ require_relative "passes/get_implementation"
require_relative "passes/set_implementation"
require_relative "passes/return_implementation"
require_relative "passes/constant_implementation"
require_relative "passes/main_implementation"

View File

@ -0,0 +1,15 @@
module Arm
# "Boot" the register machine at the function given
class MainImplementation
def run block
block.codes.dup.each do |code|
next unless code.is_a? Register::RegisterMain
call = ArmMachine.b( code.method )
block.replace(code , call )
end
end
end
Virtual::BootSpace.space.add_pass "Arm::MainImplementation"
end

View File

@ -41,7 +41,7 @@ module Register
link
@stream = StringIO.new
mid , main = @objects.find{|k,objekt| objekt.is_a?(Virtual::CompiledMethod) and (objekt.name == :__init__ )}
initial_jump = RegisterMachine.instance.b( main )
initial_jump = RegisterMain.new( main )
initial_jump.set_position( 0)
initial_jump.assemble( @stream )
@objects.each_value do |objekt|

View File

@ -37,3 +37,4 @@ require_relative "instructions/function_call"
require_relative "instructions/function_return"
require_relative "instructions/save_return"
require_relative "instructions/register_transfer"
require_relative "instructions/register_main"

View File

@ -0,0 +1,14 @@
module Register
# This starts the register machine machine at the given function.
# The implementation is most likely a jump/branch , but since we have the extra layer
# we make good use of it, ie give things descriptive names (what they do, not how)
class RegisterMain < Instruction
def initialize method
@method = method
end
attr_reader :method
end
end