fix register use in putstring
was off by one, the syscall is write and the first arg is file_descriptor ie 1 == stdout
This commit is contained in:
parent
231ce0f69b
commit
4bae5c418b
@ -275,7 +275,8 @@ module Risc
|
||||
end
|
||||
|
||||
def handle_putstring
|
||||
str = get_register( :r0 ) # should test length, ie r2
|
||||
# should test length, syscall_3 (syscall_1 is file_descriptor, ie stdout)
|
||||
str = get_register( std_reg(:syscall_2) )
|
||||
case str
|
||||
when Symbol
|
||||
@stdout << str.to_s
|
||||
|
@ -40,6 +40,8 @@ module Risc
|
||||
:r0
|
||||
when :syscall_2
|
||||
:r1
|
||||
when :syscall_3
|
||||
:r2
|
||||
when :saved_message
|
||||
:r14
|
||||
else
|
||||
|
@ -3,8 +3,8 @@ module SlotMachine
|
||||
def to_risc(compiler)
|
||||
builder = compiler.builder(compiler.source)
|
||||
integer = builder.prepare_int_return # makes integer_tmp variable as return
|
||||
word = Risc.syscall_reg(1).set_compiler(compiler)
|
||||
length = Risc.syscall_reg(2).set_compiler(compiler)
|
||||
word = Risc.syscall_reg(2).set_compiler(compiler)
|
||||
length = Risc.syscall_reg(3).set_compiler(compiler)
|
||||
builder.build do
|
||||
string = message[:receiver].to_reg.known_type(:Word)
|
||||
integer << string[:char_length]
|
||||
|
@ -35,9 +35,9 @@ module Risc
|
||||
|
||||
def test_pre_sys
|
||||
done = main_ticks(24)
|
||||
assert_equal Parfait::Word , @interpreter.get_register(:r0).class
|
||||
assert_equal "Hello again" , @interpreter.get_register(:r0).to_string
|
||||
assert_equal 11 , @interpreter.get_register(:r1)
|
||||
assert_equal Parfait::Word , @interpreter.get_register(@interpreter.std_reg(:syscall_2)).class
|
||||
assert_equal "Hello again" , @interpreter.get_register(@interpreter.std_reg(:syscall_2)).to_string
|
||||
assert_equal 11 , @interpreter.get_register(@interpreter.std_reg(:syscall_3))
|
||||
end
|
||||
|
||||
def test_sys
|
||||
|
@ -26,5 +26,10 @@ module Risc
|
||||
int = @builder.allocate_int
|
||||
assert_allocate
|
||||
end
|
||||
def test_compiler
|
||||
int = @builder.allocate_int
|
||||
assert int.compiler
|
||||
assert int.symbol.to_s.start_with?("id_fac")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -24,8 +24,8 @@ module SlotMachine
|
||||
assert_reg_to_slot s + 1 , "id_factory_.next_object" , :message , 5
|
||||
assert_slot_to_reg s + 2 ,:message , 2 , "message.receiver"
|
||||
assert_slot_to_reg s + 3 ,"message.receiver" , 1 , "id_factory_.next_object"
|
||||
assert_transfer s + 4 , :"message.receiver" , :syscall_1
|
||||
assert_transfer s + 5 , "id_factory_.next_object" , :syscall_2
|
||||
assert_transfer s + 4 , :"message.receiver" , :syscall_2
|
||||
assert_transfer s + 5 , "id_factory_.next_object" , :syscall_3
|
||||
assert_transfer s + 6 , :message , :saved_message
|
||||
assert_syscall s + 7 , :putstring
|
||||
assert_transfer s + 8 , :syscall_1 , :restore_integer_return
|
||||
|
Loading…
x
Reference in New Issue
Block a user