move all position setting into position

Position and subclasses handle the logic, external to
the classes, so it can be swapped out later
(at runtime positions can’t change)
This commit is contained in:
Torsten Ruger
2018-05-07 22:30:43 +03:00
parent 68fb9b1bdc
commit ce3cc72f9e
10 changed files with 52 additions and 123 deletions

View File

@ -82,22 +82,22 @@ module Arm
end
def test_too_big_add
code = @machine.add :r1 , :r1, 0x222
code.set_position(0,0)
Risc::Position.set(0,0)
# add 0x02 (first instruction) and then 0x220 shifted
assert_code code , :add , [0x02,0x1c,0x91,0xe2] #e2 91 1e 02
# added extra instruction to add "extra"
assert_code code.next , :add , [0x22,0x10,0x91,0xe2] #e2 91 10 22
end
def label pos = 0x22 + 8
def label( pos = 0x22 + 8)
l = Risc.label("some" , "Label")
l.set_position pos
Risc::Position.set(l,pos , 1)
l
end
def test_move_object
code = @machine.add( :r1 , label)
code.set_position(0,0)
Risc::Position.set(code,0,0)
assert_code code , :add , [0x22,0x10,0x9f,0xe2] #e2 9f 10 22
end

View File

@ -22,7 +22,7 @@ module Arm
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,0)
Risc::Position.set(code,0,1)
begin # mov 512(0x200) = e3 a0 0c 02 add 34(0x22) = e2 90 00 22
assert_code code , :mov , [ 0x02,0x0c,0xb0,0xe3]
rescue Risc::LinkException