(semi) proper fix for large moves, integers or virtual constants(was buggy)
This commit is contained in:
@ -4,12 +4,12 @@ class TestMoves < MiniTest::Test
|
||||
include ArmHelper
|
||||
|
||||
def test_mov
|
||||
code = @machine.mov :r0, 5
|
||||
assert_code code , :mov , [0x05,0x00,0xa0,0xe3] #e3 a0 10 05
|
||||
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, 6
|
||||
assert_code code , :mov , [0x06,0xf0,0xa0,0xe3] #e3 a0 f0 06
|
||||
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
|
||||
@ -20,10 +20,10 @@ class TestMoves < MiniTest::Test
|
||||
assert_code code , :mov , [0x80,0x10,0xa0,0xe3] #e3 a0 10 80
|
||||
end
|
||||
def test_mov_big
|
||||
code = @machine.mov :r0, 0x222
|
||||
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 #TODO use compiler to confirm codes here: this is just what passes
|
||||
assert_code code , :mov , [ 0x02,0x00,0xa0,0xe3 , 0xff,0x04,0x80,0xe2]
|
||||
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
|
||||
@ -32,4 +32,22 @@ class TestMoves < MiniTest::Test
|
||||
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::ObjectConstant.new
|
||||
const.set_position( 13 ) # 13 = 5 + 8 , 8 for the arm pipeline offset, gets subtracted
|
||||
code = @machine.mov :r1 , const
|
||||
code.set_position(0)
|
||||
assert_code code , :mov , [0x05,0x10,0xaf,0xe3] #e3 ef 10 05
|
||||
end
|
||||
def test_constant_big # like test_mov_big
|
||||
const = Virtual::ObjectConstant.new
|
||||
const.set_position( 0x222 )
|
||||
code = @machine.mov :r0 , const
|
||||
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
|
||||
|
Reference in New Issue
Block a user