implement one more depth for slot_load

soon time to make some loop
fix offset with array / object layout difference
This commit is contained in:
Torsten Ruger 2018-03-20 23:31:20 +05:30
parent 8dc0950980
commit 48485477c2
2 changed files with 11 additions and 3 deletions

View File

@ -45,7 +45,14 @@ module Mom
const << Risc::SlotToReg.new( self , left ,left_index, new_left)
left = new_left
left_index = SlotLoad.resolve_to_index(left_slots[0] , left_slots[1] ,compiler)
raise "more slots not implemented #{left_slots}" if left_slots.length > 2
if left_slots.length > 2
#same again, once more updating target
new_left = compiler.use_reg( :int )
const << Risc::SlotToReg.new( self , left ,left_index, new_left)
left = new_left
left_index = SlotLoad.resolve_to_index(left_slots[1] , left_slots[2] ,compiler)
end
raise "more slots not implemented #{left_slots}" if left_slots.length > 3
end
when Parfait::CacheEntry
left = compiler.use_reg( :int )
@ -59,6 +66,7 @@ module Mom
end
def self.resolve_to_index(object , variable_name ,compiler)
return variable_name if variable_name.is_a?(Integer)
case object
when :frame
type = compiler.method.frame

View File

@ -68,8 +68,8 @@ module Vool
mom_receive = @receiver.slot_definition(in_method)
arg_target = [:message , :next_message , :arguments]
args = []
@arguments.each_with_index do |arg , index|
args << Mom::SlotLoad.new( arg_target + [index] , arg.slot_definition(in_method))
@arguments.each_with_index do |arg , index| # +1 because of type
args << Mom::SlotLoad.new( arg_target + [index+1] , arg.slot_definition(in_method))
end
setup << Mom::ArgumentTransfer.new( mom_receive , args )
end