diff --git a/lib/mom/instruction/return_sequence.rb b/lib/mom/instruction/return_sequence.rb index 2c4424ac..342aabdc 100644 --- a/lib/mom/instruction/return_sequence.rb +++ b/lib/mom/instruction/return_sequence.rb @@ -27,6 +27,7 @@ module Mom caller_index = Risc.resolve_to_index(:message , :caller) return_index = Risc.resolve_to_index(:message , :return_address) moves << Risc::SlotToReg.new(self, Risc.message_reg, return_index , return_address) + moves << Risc::SlotToReg.new( self , return_address , Parfait::Integer.integer_index , return_address) moves << Risc::SlotToReg.new(self, Risc.message_reg , caller_index , Risc.message_reg) moves << Risc::FunctionReturn.new(self, return_address) end diff --git a/lib/risc/interpreter.rb b/lib/risc/interpreter.rb index 3d0a9786..52eb53d4 100644 --- a/lib/risc/interpreter.rb +++ b/lib/risc/interpreter.rb @@ -226,7 +226,7 @@ module Risc def execute_FunctionReturn link = get_register( @instruction.register ) log.debug "Return to #{link}" - set_pc link.value + set_pc link false end diff --git a/test/mom/test_return_call.rb b/test/mom/test_return_call.rb index 31115174..aaf0ee1e 100644 --- a/test/mom/test_return_call.rb +++ b/test/mom/test_return_call.rb @@ -14,7 +14,7 @@ module Risc RegToSlot, SlotToReg, FunctionCall, Label, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn] + SlotToReg, FunctionReturn] end def test_return_instructions @@ -22,7 +22,7 @@ module Risc end def test_function_return produced = produce_body - assert_equal FunctionReturn , produced.next(35).class + assert_equal FunctionReturn , produced.next(36).class end def test_load_5 produced = produce_body diff --git a/test/mom/test_return_dynamic.rb b/test/mom/test_return_dynamic.rb index 38d9057b..8e47ff54 100644 --- a/test/mom/test_return_dynamic.rb +++ b/test/mom/test_return_dynamic.rb @@ -22,7 +22,8 @@ module Risc LoadConstant, SlotToReg, RegToSlot, SlotToReg, LoadConstant, SlotToReg, DynamicJump, Label, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn] + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn] end def test_return_instructions @@ -30,7 +31,7 @@ module Risc end def test_function_return produced = produce_body - assert_equal FunctionReturn , produced.next(79).class + assert_equal FunctionReturn , produced.next(80).class end def test_cache_check produced = produce_body diff --git a/test/mom/test_return_simple.rb b/test/mom/test_return_simple.rb index 857f702d..03f76862 100644 --- a/test/mom/test_return_simple.rb +++ b/test/mom/test_return_simple.rb @@ -7,8 +7,8 @@ module Risc def setup super @input = "return 5" - @expect = [LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg , - SlotToReg, FunctionReturn] + @expect = [LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn] end def test_return_instructions @@ -16,7 +16,7 @@ module Risc end def test_function_return produced = produce_body - assert_equal FunctionReturn , produced.next(7).class + assert_equal FunctionReturn , produced.next(8).class end def test_load_5 produced = produce_body diff --git a/test/risc/interpreter/assign/test_assign_local.rb b/test/risc/interpreter/assign/test_assign_local.rb index c6f3fd90..99c5bde9 100644 --- a/test/risc/interpreter/assign/test_assign_local.rb +++ b/test/risc/interpreter/assign/test_assign_local.rb @@ -11,9 +11,10 @@ module Risc def test_chain #show_main_ticks # get output of what is - check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + check_main_chain [LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal 15 , get_return.value end @@ -29,17 +30,17 @@ module Risc assert_equal 15 , @interpreter.get_register(load_ins.register).value end def test_return - ret = main_ticks(12) + ret = main_ticks(13) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) - assert_equal Parfait::Integer , link.class + assert_equal Fixnum , link.class end def test_transfer - transfer = main_ticks(13) + transfer = main_ticks(14) assert_equal Transfer , transfer.class end def test_sys - sys = main_ticks(14) + sys = main_ticks(15) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/assign/test_assign_return.rb b/test/risc/interpreter/assign/test_assign_return.rb index b0d815af..27df52bc 100644 --- a/test/risc/interpreter/assign/test_assign_return.rb +++ b/test/risc/interpreter/assign/test_assign_return.rb @@ -20,10 +20,11 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, Branch, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal 10 , get_return.value end end diff --git a/test/risc/interpreter/assign/test_assign_thrice.rb b/test/risc/interpreter/assign/test_assign_thrice.rb index 0e4ca73a..d821db62 100644 --- a/test/risc/interpreter/assign/test_assign_thrice.rb +++ b/test/risc/interpreter/assign/test_assign_thrice.rb @@ -21,20 +21,21 @@ module Risc SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, - Branch, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, Branch, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, - LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, - RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, LoadConstant, SlotToReg, RegToSlot, + RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, + Branch, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, + FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, + RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + Transfer, Syscall, NilClass] assert_equal 15 , get_return.value end diff --git a/test/risc/interpreter/assign/test_assign_twice.rb b/test/risc/interpreter/assign/test_assign_twice.rb index 7638dd81..a344c509 100644 --- a/test/risc/interpreter/assign/test_assign_twice.rb +++ b/test/risc/interpreter/assign/test_assign_twice.rb @@ -21,10 +21,10 @@ module Risc SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - Branch, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal 10 , get_return.value end end diff --git a/test/risc/interpreter/calling/test_div10.rb b/test/risc/interpreter/calling/test_div10.rb index b09be31e..7137ac59 100644 --- a/test/risc/interpreter/calling/test_div10.rb +++ b/test/risc/interpreter/calling/test_div10.rb @@ -25,10 +25,11 @@ module Risc Transfer, LoadData, OperatorInstruction, LoadData, OperatorInstruction, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, Branch, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + SlotToReg, SlotToReg, RegToSlot, Branch, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 2 , get_return.value end @@ -38,14 +39,14 @@ module Risc assert_equal LoadConstant , load_ins.class assert_equal 25 , @interpreter.get_register(load_ins.register).value end - def test_return - ret = main_ticks(74) + def test_return_class + ret = main_ticks(75) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) - assert_equal Parfait::Integer , link.class + assert_equal Fixnum , link.class end def test_sys - sys = main_ticks(89) + sys = main_ticks(91) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_get_byte.rb b/test/risc/interpreter/calling/test_get_byte.rb index 48da828e..fabb85b8 100644 --- a/test/risc/interpreter/calling/test_get_byte.rb +++ b/test/risc/interpreter/calling/test_get_byte.rb @@ -19,10 +19,10 @@ module Risc SlotToReg, SlotToReg, SlotToReg, ByteToReg, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + Branch, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal "H".ord , get_return.value end @@ -32,7 +32,7 @@ module Risc assert_equal "H".ord , @interpreter.get_register(done.register) end def test_exit - done = main_ticks(61) + done = main_ticks(64) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/calling/test_minus.rb b/test/risc/interpreter/calling/test_minus.rb index 0c01f1f3..7517ddd5 100644 --- a/test/risc/interpreter/calling/test_minus.rb +++ b/test/risc/interpreter/calling/test_minus.rb @@ -20,10 +20,11 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, Branch, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 1 , get_return.value end @@ -41,8 +42,14 @@ module Risc assert_equal 5 , @interpreter.get_register(:r2) assert_equal 1 , @interpreter.get_register(:r1) end + def test_return + ret = main_ticks(63) + assert_equal FunctionReturn , ret.class + assert_equal :r1 , ret.register.symbol + assert_equal 18628 , @interpreter.get_register(ret.register) + end def test_sys - sys = main_ticks(62) + sys = main_ticks(65) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_mod.rb b/test/risc/interpreter/calling/test_mod.rb index c2322cfa..24216bc2 100644 --- a/test/risc/interpreter/calling/test_mod.rb +++ b/test/risc/interpreter/calling/test_mod.rb @@ -19,10 +19,10 @@ module Risc SlotToReg, LoadData, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + Branch, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 2 , get_return.value end @@ -42,7 +42,7 @@ module Risc end def test_sys - sys = main_ticks(56) + sys = main_ticks(58) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_mult.rb b/test/risc/interpreter/calling/test_mult.rb index c680ee65..0ee6bf9c 100644 --- a/test/risc/interpreter/calling/test_mult.rb +++ b/test/risc/interpreter/calling/test_mult.rb @@ -20,13 +20,18 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, Branch, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 0 , get_return.value end + def test_zero + ticks( 12 ) + assert @interpreter.flags[:zero] + end def test_op op = main_ticks(35) assert_equal OperatorInstruction , op.class @@ -39,9 +44,5 @@ module Risc main_ticks( 37 ) assert @interpreter.flags[:overflow] end - def test_zero - ticks( 12 ) - assert @interpreter.flags[:zero] - end end end diff --git a/test/risc/interpreter/calling/test_plus.rb b/test/risc/interpreter/calling/test_plus.rb index 15ee980f..bc4ae463 100644 --- a/test/risc/interpreter/calling/test_plus.rb +++ b/test/risc/interpreter/calling/test_plus.rb @@ -20,10 +20,11 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, Branch, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 10 , get_return.value end @@ -102,7 +103,7 @@ module Risc assert_equal :r4 , sl.register.symbol end def test_sys - sys = main_ticks(62) + sys = main_ticks(65) assert_equal Syscall , sys.class assert_equal :exit , sys.name end diff --git a/test/risc/interpreter/calling/test_puts.rb b/test/risc/interpreter/calling/test_puts.rb index a6697a7e..988e38fd 100644 --- a/test/risc/interpreter/calling/test_puts.rb +++ b/test/risc/interpreter/calling/test_puts.rb @@ -19,10 +19,11 @@ module Risc SlotToReg, Transfer, Syscall, Transfer, Transfer, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, Branch, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, Branch, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal "Hello again" , @interpreter.stdout assert_equal Parfait::Integer , get_return.class assert_equal 11 , get_return.value #bytes written @@ -63,7 +64,7 @@ module Risc assert_equal 2 , sl.index end def test_return - done = main_ticks(43) + done = main_ticks(44) assert_equal FunctionReturn , done.class end diff --git a/test/risc/interpreter/calling/test_set_byte.rb b/test/risc/interpreter/calling/test_set_byte.rb index 4b5e9d1c..26d660b0 100644 --- a/test/risc/interpreter/calling/test_set_byte.rb +++ b/test/risc/interpreter/calling/test_set_byte.rb @@ -20,10 +20,11 @@ module Risc RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToByte, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, Branch, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, Branch, SlotToReg, SlotToReg, FunctionReturn, + SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "Kello" , get_return.to_string end @@ -33,7 +34,7 @@ module Risc assert_equal "K".ord , @interpreter.get_register(done.register) end def test_exit - done = main_ticks(64) + done = main_ticks(66) assert_equal Syscall , done.class end diff --git a/test/risc/interpreter/conditional/test_if_constant.rb b/test/risc/interpreter/conditional/test_if_constant.rb index eb0feb85..ec9692f9 100644 --- a/test/risc/interpreter/conditional/test_if_constant.rb +++ b/test/risc/interpreter/conditional/test_if_constant.rb @@ -14,7 +14,7 @@ module Risc check_main_chain [LoadConstant, LoadConstant, OperatorInstruction, IsZero, LoadConstant, OperatorInstruction, IsZero, LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "then" , get_return.to_string end @@ -39,7 +39,7 @@ module Risc assert check.label.name.start_with?("false_label") , check.label.name end def test_exit - done = main_ticks(18) + done = main_ticks(19) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_greater.rb b/test/risc/interpreter/conditional/test_if_greater.rb index 4e6dd78a..8fccdba9 100644 --- a/test/risc/interpreter/conditional/test_if_greater.rb +++ b/test/risc/interpreter/conditional/test_if_greater.rb @@ -11,7 +11,7 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, Branch, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, @@ -20,16 +20,16 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, LoadConstant, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, Branch, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, RegToSlot, SlotToReg, SlotToReg, Branch, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + Transfer, Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "else" , get_return.to_string end def test_exit - done = main_ticks(65) + done = main_ticks(67) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_greater_or.rb b/test/risc/interpreter/conditional/test_if_greater_or.rb index 0dbb5ec1..3dfdea3b 100644 --- a/test/risc/interpreter/conditional/test_if_greater_or.rb +++ b/test/risc/interpreter/conditional/test_if_greater_or.rb @@ -11,7 +11,7 @@ module Risc def test_if #show_main_ticks # get output of what is in main - check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, + check_main_chain [LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, RegToSlot, Branch, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, LoadConstant, @@ -20,16 +20,17 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, - OperatorInstruction, IsZero, LoadConstant, Branch, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, OperatorInstruction, IsZero, LoadConstant, Branch, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Word , get_return.class assert_equal "then" , get_return.to_string end def test_exit - done = main_ticks(68) + done = main_ticks(70) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_smaller.rb b/test/risc/interpreter/conditional/test_if_smaller.rb index 8299fb7c..51c9403a 100644 --- a/test/risc/interpreter/conditional/test_if_smaller.rb +++ b/test/risc/interpreter/conditional/test_if_smaller.rb @@ -20,16 +20,16 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, LoadConstant, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, Branch, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, RegToSlot, SlotToReg, SlotToReg, Branch, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + Transfer, Syscall, NilClass] assert_equal Parfait::Word , get_return.class assert_equal "else" , get_return.to_string end def test_exit - done = main_ticks(65) + done = main_ticks(67) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/conditional/test_if_smaller_or.rb b/test/risc/interpreter/conditional/test_if_smaller_or.rb index 334acda5..a225857e 100644 --- a/test/risc/interpreter/conditional/test_if_smaller_or.rb +++ b/test/risc/interpreter/conditional/test_if_smaller_or.rb @@ -20,16 +20,17 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, LoadConstant, - OperatorInstruction, IsZero, LoadConstant, Branch, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + LoadConstant, OperatorInstruction, IsZero, LoadConstant, Branch, + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_equal Parfait::Word , get_return.class assert_equal "then" , get_return.to_string end def test_exit - done = main_ticks(68) + done = main_ticks(70) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/test_dynamic_call.rb b/test/risc/interpreter/test_dynamic_call.rb index 1d0ca043..f6745591 100644 --- a/test/risc/interpreter/test_dynamic_call.rb +++ b/test/risc/interpreter/test_dynamic_call.rb @@ -35,10 +35,11 @@ module Risc SlotToReg, Branch, DynamicJump, SlotToReg, SlotToReg, LoadData, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, Branch, SlotToReg, SlotToReg, FunctionReturn, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, Transfer, Syscall, NilClass] + RegToSlot, Branch, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, Branch, FunctionReturn, + Transfer, Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 1 , get_return.value end @@ -59,13 +60,13 @@ module Risc assert_equal DynamicJump , cal.class end def test_return - ret = main_ticks(137) + ret = main_ticks(140) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) - assert_equal Parfait::Integer , link.class + assert_equal Fixnum , link.class end def test_sys - sys = main_ticks(139) + sys = main_ticks(142) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/test_events.rb b/test/risc/interpreter/test_events.rb index c84d5492..7ee43005 100644 --- a/test/risc/interpreter/test_events.rb +++ b/test/risc/interpreter/test_events.rb @@ -19,7 +19,7 @@ module Risc @instruction_events << was end def length - 88 + 91 end def test_state_change @interpreter.register_event :state_changed , self @@ -53,13 +53,17 @@ module Risc SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, Branch, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, RegToSlot, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, Branch, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal Parfait::Integer , get_return.class assert_equal 12 , get_return.value end - + def test_length + run_all + assert_equal length , @interpreter.clock + end end end diff --git a/test/risc/interpreter/test_return.rb b/test/risc/interpreter/test_return.rb index 48579ccd..b4b25de8 100644 --- a/test/risc/interpreter/test_return.rb +++ b/test/risc/interpreter/test_return.rb @@ -12,8 +12,8 @@ module Risc def test_chain #show_main_ticks # get output of what is check_main_chain [LoadConstant, RegToSlot, SlotToReg, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, - NilClass] + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, Transfer, + Syscall, NilClass] assert_equal 5 , get_return.value end @@ -28,17 +28,17 @@ module Risc assert_equal 5 , @interpreter.get_register(load_ins.register).value end def test_return - ret = main_ticks(8) + ret = main_ticks(9) assert_equal FunctionReturn , ret.class link = @interpreter.get_register( ret.register ) - assert_equal Parfait::Integer , link.class + assert_equal Fixnum , link.class end def test_transfer - transfer = main_ticks(9) + transfer = main_ticks(10) assert_equal Transfer , transfer.class end def test_sys - sys = main_ticks(10) + sys = main_ticks(11) assert_equal Syscall , sys.class end end diff --git a/test/risc/interpreter/while/test_while_cmp.rb b/test/risc/interpreter/while/test_while_cmp.rb index c6d38510..a8c837aa 100644 --- a/test/risc/interpreter/while/test_while_cmp.rb +++ b/test/risc/interpreter/while/test_while_cmp.rb @@ -20,39 +20,40 @@ module Risc RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, Branch, RegToSlot, SlotToReg, SlotToReg, - Branch, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - LoadConstant, OperatorInstruction, IsZero, Branch, LoadConstant, - OperatorInstruction, IsZero, LoadConstant, LoadConstant, SlotToReg, + Branch, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, LoadConstant, OperatorInstruction, IsZero, Branch, + LoadConstant, OperatorInstruction, IsZero, LoadConstant, LoadConstant, + SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, + SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, + RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, + SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, + SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, + RegToSlot, Branch, LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, SlotToReg, - SlotToReg, RegToSlot, RegToSlot, RegToSlot, SlotToReg, - Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, Branch, - LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, - SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - Branch, RegToSlot, SlotToReg, RegToSlot, SlotToReg, - RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, RegToSlot, Branch, - LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - OperatorInstruction, IsMinus, LoadConstant, RegToSlot, SlotToReg, - SlotToReg, Branch, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, FunctionReturn, Transfer, - Syscall, NilClass] + SlotToReg, SlotToReg, OperatorInstruction, IsMinus, LoadConstant, + RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, LoadConstant, + OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, SlotToReg, FunctionReturn, Transfer, Syscall, + NilClass] assert_kind_of Parfait::Integer , get_return assert_equal 1 , get_return.value end def test_exit - done = main_ticks(181) + done = main_ticks(185) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/while/test_while_count.rb b/test/risc/interpreter/while/test_while_count.rb index e99c9e13..c47c359d 100644 --- a/test/risc/interpreter/while/test_while_count.rb +++ b/test/risc/interpreter/while/test_while_count.rb @@ -21,38 +21,39 @@ module Risc SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, IsZero, LoadConstant, Branch, RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, LoadConstant, OperatorInstruction, IsZero, Branch, - LoadConstant, OperatorInstruction, IsZero, LoadConstant, LoadConstant, + SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, + Branch, LoadConstant, OperatorInstruction, IsZero, LoadConstant, + LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, Branch, + RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, + LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, + SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, + SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, + SlotToReg, SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, + LoadConstant, SlotToReg, SlotToReg, RegToSlot, RegToSlot, + RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, + SlotToReg, SlotToReg, SlotToReg, FunctionReturn, SlotToReg, + SlotToReg, RegToSlot, Branch, LoadConstant, LoadConstant, SlotToReg, RegToSlot, RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, SlotToReg, Branch, RegToSlot, SlotToReg, RegToSlot, SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, FunctionCall, SlotToReg, SlotToReg, - SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, LoadConstant, - SlotToReg, SlotToReg, RegToSlot, RegToSlot, RegToSlot, - SlotToReg, Branch, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, FunctionReturn, SlotToReg, SlotToReg, RegToSlot, - Branch, LoadConstant, LoadConstant, SlotToReg, RegToSlot, - RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, Branch, RegToSlot, SlotToReg, RegToSlot, - SlotToReg, RegToSlot, LoadConstant, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, SlotToReg, SlotToReg, RegToSlot, - Branch, LoadConstant, SlotToReg, RegToSlot, SlotToReg, - FunctionCall, SlotToReg, SlotToReg, SlotToReg, SlotToReg, - SlotToReg, OperatorInstruction, IsMinus, IsZero, LoadConstant, - RegToSlot, SlotToReg, Branch, SlotToReg, RegToSlot, - SlotToReg, SlotToReg, FunctionReturn, SlotToReg, SlotToReg, - RegToSlot, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, - IsZero, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - Branch, SlotToReg, RegToSlot, SlotToReg, SlotToReg, - FunctionReturn, Transfer, Syscall, NilClass] + SlotToReg, SlotToReg, SlotToReg, OperatorInstruction, IsMinus, + IsZero, LoadConstant, RegToSlot, SlotToReg, Branch, + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, SlotToReg, SlotToReg, RegToSlot, SlotToReg, + SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, + SlotToReg, RegToSlot, SlotToReg, Branch, SlotToReg, + RegToSlot, SlotToReg, SlotToReg, SlotToReg, FunctionReturn, + Transfer, Syscall, NilClass] assert_kind_of Parfait::Integer , get_return assert_equal 0 , get_return.value end def test_exit - done = main_ticks(183) + done = main_ticks(187) assert_equal Syscall , done.class end end diff --git a/test/risc/interpreter/while/test_while_simple.rb b/test/risc/interpreter/while/test_while_simple.rb index 2e8299f4..def6d343 100644 --- a/test/risc/interpreter/while/test_while_simple.rb +++ b/test/risc/interpreter/while/test_while_simple.rb @@ -16,8 +16,8 @@ module Risc IsZero, LoadConstant, SlotToReg, Branch, RegToSlot, Branch, SlotToReg, SlotToReg, LoadConstant, OperatorInstruction, IsZero, SlotToReg, SlotToReg, RegToSlot, SlotToReg, - SlotToReg, RegToSlot, SlotToReg, SlotToReg, FunctionReturn, - Transfer, Syscall, NilClass] + SlotToReg, RegToSlot, SlotToReg, SlotToReg, SlotToReg, + FunctionReturn, Transfer, Syscall, NilClass] assert_kind_of Parfait::FalseClass , get_return end def test_load_false_const @@ -54,7 +54,7 @@ module Risc assert check.label.name.start_with?("merge_label") , check.label.name end def test_exit - done = main_ticks(32) + done = main_ticks(33) assert_equal Syscall , done.class end end