make arm use branch_lsteners

This commit is contained in:
Torsten Ruger 2018-06-19 10:51:03 +03:00
parent 9fc7f9b528
commit 956c2ebe54
4 changed files with 16 additions and 0 deletions

View File

@ -41,6 +41,11 @@ module Arm
end
end
# if branch_to is implemented it must return the label it branches to
def branch_to
@first unless opcode == :swi
end
def handle_call(io)
case @first
when Risc::Label

View File

@ -38,6 +38,7 @@ module Elf
@machine.object_positions.each do |slot , position|
next if slot.is_a?(Parfait::BinaryCode)
next if slot.class.name.include?("Arm")
if( slot.respond_to? :rxf_reference_name )
label = "#{slot.rxf_reference_name}"
else

View File

@ -97,6 +97,7 @@ module Risc
instruction = instruction.next
end
branches.each do |branch|
next if branch.branch_to.nil? #nil allowed for when there is no branch
label_pos = Position.get(branch.branch_to)
label_pos.position_listener( BranchListener.new(branch) )
end

View File

@ -15,6 +15,15 @@ module Arm
code = @machine.call( -4 ,{} )#this jumps to the next instruction
assert_code code , :call, [0xff,0xff,0xff,0xeb] #ea ff ff fe
end
def test_has_branch_to
label = Risc::Label.new("HI","ho" , FakeAddress.new(0))
code = @machine.b( label )
assert_equal label , code.branch_to
end
def test_branch_to_for_swi
code = @machine.swi( 0x05 )
assert_nil code.branch_to
end
def test_method_call
Risc.machine.boot
bin = Parfait::BinaryCode.new(1)