fix interpreter
by currently not checking for old register pattern feels like wip, but passes (all but one)
This commit is contained in:
@ -66,6 +66,7 @@ module Arm
|
||||
end
|
||||
|
||||
def translate_FunctionReturn( code )
|
||||
# FIXME reduce the int first, register contains a ReturnAddress
|
||||
ArmMachine.mov( :pc , code.register)
|
||||
end
|
||||
def translate_DynamicJump(code)
|
||||
|
@ -61,7 +61,7 @@ module Parfait
|
||||
# But the integer (address) needs to be adjusted by load address.
|
||||
class ReturnAddress < Integer
|
||||
|
||||
def to_s
|
||||
def to_s(ignored = nil)
|
||||
"ReturnAddress 0x" + object_id.to_s(16) + ":" + value.to_s
|
||||
end
|
||||
end
|
||||
|
@ -70,7 +70,7 @@ module Risc
|
||||
|
||||
def get_register( reg )
|
||||
reg = reg.symbol if reg.is_a? Risc::RegisterValue
|
||||
raise "Not a register #{reg}" unless Risc::RegisterValue.look_like_reg(reg)
|
||||
#raise "Not a register #{reg}" unless Risc::RegisterValue.look_like_reg(reg)
|
||||
@registers[reg]
|
||||
end
|
||||
|
||||
@ -236,7 +236,7 @@ module Risc
|
||||
def execute_FunctionReturn
|
||||
link = get_register( @instruction.register )
|
||||
log.debug "Return to #{link.to_s(16)}"
|
||||
set_pc link
|
||||
set_pc link.value
|
||||
false
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user