require_relative 'arm-helper' class TestMoves < MiniTest::Test include ArmHelper def test_mov code = @machine.mov :r1, 5 assert_code code , :mov , [0x05,0x10,0xa0,0xe3] #e3 a0 10 05 end def test_mov_pc code = @machine.mov :pc, 5 assert_code code , :mov , [0x05,0xf0,0xa0,0xe3] #e3 a0 f0 06 end def test_mov_256 code = @machine.mov :r1, 256 assert_code code , :mov , [0x01,0x1c,0xa0,0xe3] #e3 a0 1c 01 end def test_mov_max_128 code = @machine.mov :r1, 128 assert_code code , :mov , [0x80,0x10,0xa0,0xe3] #e3 a0 10 80 end def test_mov_big code = @machine.mov :r0, 0x222 # is not 8 bit and can't be rotated by the arm system in one instruction code.set_position(0) begin # mov 512(0x200) = e3 a0 0c 02 add 34(0x22) = e2 80 00 22 assert_code code , :mov , [ 0x02,0x0c,0xa0,0xe3 , 0x22,0x00,0x80,0xe2] rescue Register::LinkException retry end end def test_mvn code = @machine.mvn :r1, 5 assert_code code , :mvn , [0x05,0x10,0xe0,0xe3] #e3 e0 10 05 end def test_constant_small # like test_mov const = Virtual.new_word "harvey" const.set_position( 13 ) # 13 = 5 + 8 , 8 for the arm pipeline offset, gets subtracted code = @machine.mov :r1 , 5 code.set_position(0) #TODO check this in decompile assert_code code , :mov , [0x05,0x10,0xa0,0xe3] #e3 ef 10 05 end def test_constant_big # like test_mov_big const = Virtual.new_word "harvey" const.set_position( 0x222 ) code = @machine.mov :r0 , 0x222 code.set_position(0) begin # mov 512(0x200) = e3 a0 0c 02 add 34(0x22) = e2 80 00 22 assert_code code , :mov , [ 0x02,0x0c,0xa0,0xe3 , 0x22,0x00,0x80,0xe2] rescue Register::LinkException retry end end end