fix interpreter syscall and rename return reg

returned int for puts was same name as implicit return  int
This commit is contained in:
Torsten 2020-03-22 14:30:03 +02:00
parent be684c0c43
commit ddd1f4e296
4 changed files with 7 additions and 7 deletions

View File

@ -270,7 +270,7 @@ module Risc
else
raise "un-implemented syscall #{name}"
end
set_register( :syscall_1 , ret_value ) # syscalls return into syscall_1
set_register( std_reg(:syscall_1) , ret_value ) # syscalls return into syscall_1
true
end

View File

@ -43,7 +43,7 @@ module SlotMachine
# This instance is filled with os return value
def self.restore_message(builder)
r8 = Risc::RegisterValue.new( :saved_message , :Message).set_compiler(builder.compiler)
tmp = Risc::RegisterValue.new( :integer_tmp , :Integer).set_compiler(builder.compiler)
tmp = Risc::RegisterValue.new( :restore_integer_return , :Integer).set_compiler(builder.compiler)
builder.build do
tmp << Risc.syscall_reg(1)
message << r8

View File

@ -25,7 +25,7 @@ module Risc
SlotToReg, Transfer, Syscall, NilClass,] #55
assert_equal "Hello again" , @interpreter.stdout
assert_equal Integer , get_return.class
assert_equal 11 , get_return.to_string #bytes written
assert_equal 11 , get_return #bytes written
end
def test_call
cal = main_ticks(11)
@ -44,12 +44,12 @@ module Risc
done = main_ticks(25)
assert_equal Syscall , done.class
assert_equal "Hello again" , @interpreter.stdout
assert_equal 11 , @interpreter.get_register(:syscall_1)
assert_equal 11 , @interpreter.get_register(@interpreter.std_reg(:syscall_1))
end
def test_move_sys_return
assert_transfer(26, :r0 ,:r1)
assert_equal 11 , @interpreter.get_register(:integer_tmp)
assert_equal 11 , @interpreter.get_register(@interpreter.std_reg(:syscall_1))
end
def test_restore_message
assert_transfer(27, :r14 ,:r13)

View File

@ -28,10 +28,10 @@ module SlotMachine
assert_transfer s + 5 , "id_factory_.next_object" , :syscall_2
assert_transfer s + 6 , :message , :saved_message
assert_syscall s + 7 , :putstring
assert_transfer s + 8 , :syscall_1 , :integer_tmp
assert_transfer s + 8 , :syscall_1 , :restore_integer_return
assert_transfer s + 9 , :saved_message , :message
assert_slot_to_reg s + 10 ,:message , 5 , "message.return_value"
assert_reg_to_slot s + 11 , :integer_tmp , "message.return_value" , 2
assert_reg_to_slot s + 11 , :restore_integer_return , "message.return_value" , 2
assert_slot_to_reg s + 12 ,:message , 5 , "message.return_value"
assert_reg_to_slot s + 13 , "message.return_value" , :message , 5
assert_branch s + 14 , "return_label"