removed some obsolete builder helpers
cleaner code with dsl, just div10 undone
This commit is contained in:
@ -75,17 +75,24 @@ module Risc
|
||||
compiler.add_mom( Mom::ReturnSequence.new)
|
||||
return compiler
|
||||
end
|
||||
|
||||
def add_receiver(builder)
|
||||
message = Risc.message_reg
|
||||
ret_type = builder.compiler.receiver_type
|
||||
ret = builder.compiler.use_reg( ret_type )
|
||||
builder.add_slot_to_reg(" load self" , message , :receiver , ret )
|
||||
builder.add_slot_to_reg( "int -> fix" , ret , Parfait::Integer.integer_index , ret)
|
||||
return ret
|
||||
end
|
||||
|
||||
def div10( context )
|
||||
s = "div_10 "
|
||||
compiler = compiler_for(:Integer,:div10 ,{})
|
||||
builder = compiler.compiler_builder(compiler.source)
|
||||
#FIX: this could load receiver once, reduce and then transfer twice
|
||||
me = builder.add_known( :receiver )
|
||||
tmp = builder.add_known( :receiver )
|
||||
q = builder.add_known( :receiver )
|
||||
builder.reduce_int( s , me )
|
||||
builder.reduce_int( s , tmp )
|
||||
builder.reduce_int( s , q )
|
||||
me = add_receiver( builder )
|
||||
tmp = add_receiver( builder )
|
||||
q = add_receiver( builder )
|
||||
const = compiler.use_reg :fixnum , value: 1
|
||||
builder.add_load_data( s , 1 , const )
|
||||
# int tmp = self >> 1
|
||||
|
@ -84,8 +84,9 @@ module Risc
|
||||
# Used by exit and __init__ (so it doesn't have to call it)
|
||||
def exit_sequence(builder)
|
||||
save_message( builder )
|
||||
builder.add_slot_to_reg "get return" , Risc.message_reg , :return_value , Risc.message_reg
|
||||
builder.reduce_int( "reduce return" , Risc.message_reg)
|
||||
message = Risc.message_reg
|
||||
builder.add_slot_to_reg "get return" , message , :return_value , message
|
||||
builder.add_slot_to_reg( "reduce return" , message , Parfait::Integer.integer_index , message)
|
||||
builder.add_code Syscall.new("emit_syscall(exit)", :exit )
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user