debugging to find operator not being ssa
This commit is contained in:
parent
61fc8a3991
commit
0cde7c1d0a
@ -19,6 +19,9 @@ module Parfait
|
||||
end
|
||||
|
||||
def rxf_reference_name
|
||||
to_s
|
||||
end
|
||||
def to_s
|
||||
"Method: " + @name.to_s
|
||||
end
|
||||
|
||||
|
@ -119,5 +119,9 @@ module Parfait
|
||||
obj.set_type(type)
|
||||
obj
|
||||
end
|
||||
|
||||
def to_s
|
||||
"Factory:#{for_type.name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -57,7 +57,8 @@ module Parfait
|
||||
@method.name
|
||||
end
|
||||
def to_s
|
||||
"Message:#{method_name}(#{@arguments_given})"
|
||||
id = @method ? @method.name : object_id.to_s(16)
|
||||
"Message:#{id}(#{@arguments_given.value})"
|
||||
end
|
||||
|
||||
def _set_next_message(nekst)
|
||||
|
@ -182,6 +182,10 @@ module Parfait
|
||||
"'" + to_s + "'"
|
||||
end
|
||||
|
||||
def to_s
|
||||
"Word:#{to_string}"
|
||||
end
|
||||
|
||||
def padded_length
|
||||
Object.padded( 4 * get_type().instance_length + @char_length )
|
||||
end
|
||||
|
@ -15,7 +15,7 @@ module Risc
|
||||
# fire events for changed pc and register contents
|
||||
include Util::Eventable
|
||||
include Util::Logging
|
||||
log_level :info
|
||||
log_level :debug
|
||||
|
||||
attr_reader :instruction , :clock , :pc # current instruction and pc
|
||||
attr_reader :registers # the registers, 16 (a hash, sym -> contents)
|
||||
@ -30,7 +30,7 @@ module Risc
|
||||
@flags = { :zero => false , :plus => false ,
|
||||
:minus => false , :overflow => false }
|
||||
(0...InterpreterPlatform.new.num_registers).each do |reg|
|
||||
set_register "r#{reg}".to_sym , "r#{reg}:unknown"
|
||||
#set_register "r#{reg}".to_sym , "r#{reg}:unknown"
|
||||
end
|
||||
@linker = linker
|
||||
end
|
||||
@ -75,7 +75,9 @@ module Risc
|
||||
end
|
||||
|
||||
def set_register( reg , val )
|
||||
old = get_register( reg ) # also ensures format
|
||||
reg = reg.symbol if reg.is_a? Risc::RegisterValue
|
||||
log.debug "setting #{reg} == #{val}"
|
||||
old = get_register( reg )
|
||||
if val.is_a? ::Integer
|
||||
@flags[:zero] = (val == 0)
|
||||
@flags[:plus] = (val >= 0)
|
||||
@ -86,7 +88,6 @@ module Risc
|
||||
@flags[:minus] = false
|
||||
end
|
||||
return if old === val
|
||||
reg = reg.symbol if reg.is_a? Risc::RegisterValue
|
||||
val = Parfait.object_space.nil_object if val.nil? #because that's what real code has
|
||||
@registers[reg] = val
|
||||
trigger(:register_changed, reg , old , val)
|
||||
@ -100,7 +101,7 @@ module Risc
|
||||
name = @instruction.class.name.split("::").last
|
||||
log.debug "#{@pc.to_s(16)}:#{@clock}: #{@instruction.to_s}"
|
||||
fetch = send "execute_#{name}"
|
||||
log.debug register_dump
|
||||
register_dump
|
||||
if fetch
|
||||
pc = @pc + @instruction.byte_length
|
||||
set_pc(pc)
|
||||
@ -113,6 +114,7 @@ module Risc
|
||||
# Instruction interpretation starts here
|
||||
def execute_DynamicJump
|
||||
method = get_register(@instruction.register)
|
||||
log.debug "Register at: #{@instruction.register} , has #{method.class}"
|
||||
pos = Position.get(method.binary)
|
||||
log.debug "Jump to binary at: #{pos} #{method.name}:#{method.binary.class}"
|
||||
raise "Invalid position for #{method.name}" unless pos.valid?
|
||||
@ -287,6 +289,8 @@ module Risc
|
||||
result = result.to_i
|
||||
end
|
||||
log.debug "#{@instruction} == #{result}(#{result.class}) (#{left}|#{right})"
|
||||
# overwrites
|
||||
left
|
||||
right = set_register(@instruction.left , result)
|
||||
true
|
||||
end
|
||||
@ -336,6 +340,13 @@ module Risc
|
||||
end
|
||||
|
||||
def register_dump
|
||||
@registers.keys.sort.each do |reg|
|
||||
value = @registers[reg]
|
||||
log.debug "#{reg}:#{value.to_s[0..50]}"
|
||||
end
|
||||
end
|
||||
|
||||
def old_register_dump
|
||||
(0..7).collect do |reg|
|
||||
value = @registers["r#{reg}".to_sym]
|
||||
"#{reg}-" +
|
||||
|
Loading…
x
Reference in New Issue
Block a user