debugging to find operator not being ssa

This commit is contained in:
Torsten 2020-03-14 12:23:34 +02:00
parent 61fc8a3991
commit 0cde7c1d0a
5 changed files with 29 additions and 6 deletions

View File

@ -19,6 +19,9 @@ module Parfait
end end
def rxf_reference_name def rxf_reference_name
to_s
end
def to_s
"Method: " + @name.to_s "Method: " + @name.to_s
end end

View File

@ -119,5 +119,9 @@ module Parfait
obj.set_type(type) obj.set_type(type)
obj obj
end end
def to_s
"Factory:#{for_type.name}"
end
end end
end end

View File

@ -57,7 +57,8 @@ module Parfait
@method.name @method.name
end end
def to_s def to_s
"Message:#{method_name}(#{@arguments_given})" id = @method ? @method.name : object_id.to_s(16)
"Message:#{id}(#{@arguments_given.value})"
end end
def _set_next_message(nekst) def _set_next_message(nekst)

View File

@ -182,6 +182,10 @@ module Parfait
"'" + to_s + "'" "'" + to_s + "'"
end end
def to_s
"Word:#{to_string}"
end
def padded_length def padded_length
Object.padded( 4 * get_type().instance_length + @char_length ) Object.padded( 4 * get_type().instance_length + @char_length )
end end

View File

@ -15,7 +15,7 @@ module Risc
# fire events for changed pc and register contents # fire events for changed pc and register contents
include Util::Eventable include Util::Eventable
include Util::Logging include Util::Logging
log_level :info log_level :debug
attr_reader :instruction , :clock , :pc # current instruction and pc attr_reader :instruction , :clock , :pc # current instruction and pc
attr_reader :registers # the registers, 16 (a hash, sym -> contents) attr_reader :registers # the registers, 16 (a hash, sym -> contents)
@ -30,7 +30,7 @@ module Risc
@flags = { :zero => false , :plus => false , @flags = { :zero => false , :plus => false ,
:minus => false , :overflow => false } :minus => false , :overflow => false }
(0...InterpreterPlatform.new.num_registers).each do |reg| (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 end
@linker = linker @linker = linker
end end
@ -75,7 +75,9 @@ module Risc
end end
def set_register( reg , val ) 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 if val.is_a? ::Integer
@flags[:zero] = (val == 0) @flags[:zero] = (val == 0)
@flags[:plus] = (val >= 0) @flags[:plus] = (val >= 0)
@ -86,7 +88,6 @@ module Risc
@flags[:minus] = false @flags[:minus] = false
end end
return if old === val 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 val = Parfait.object_space.nil_object if val.nil? #because that's what real code has
@registers[reg] = val @registers[reg] = val
trigger(:register_changed, reg , old , val) trigger(:register_changed, reg , old , val)
@ -100,7 +101,7 @@ module Risc
name = @instruction.class.name.split("::").last name = @instruction.class.name.split("::").last
log.debug "#{@pc.to_s(16)}:#{@clock}: #{@instruction.to_s}" log.debug "#{@pc.to_s(16)}:#{@clock}: #{@instruction.to_s}"
fetch = send "execute_#{name}" fetch = send "execute_#{name}"
log.debug register_dump register_dump
if fetch if fetch
pc = @pc + @instruction.byte_length pc = @pc + @instruction.byte_length
set_pc(pc) set_pc(pc)
@ -113,6 +114,7 @@ module Risc
# Instruction interpretation starts here # Instruction interpretation starts here
def execute_DynamicJump def execute_DynamicJump
method = get_register(@instruction.register) method = get_register(@instruction.register)
log.debug "Register at: #{@instruction.register} , has #{method.class}"
pos = Position.get(method.binary) pos = Position.get(method.binary)
log.debug "Jump to binary at: #{pos} #{method.name}:#{method.binary.class}" log.debug "Jump to binary at: #{pos} #{method.name}:#{method.binary.class}"
raise "Invalid position for #{method.name}" unless pos.valid? raise "Invalid position for #{method.name}" unless pos.valid?
@ -287,6 +289,8 @@ module Risc
result = result.to_i result = result.to_i
end end
log.debug "#{@instruction} == #{result}(#{result.class}) (#{left}|#{right})" log.debug "#{@instruction} == #{result}(#{result.class}) (#{left}|#{right})"
# overwrites
left
right = set_register(@instruction.left , result) right = set_register(@instruction.left , result)
true true
end end
@ -336,6 +340,13 @@ module Risc
end end
def register_dump 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| (0..7).collect do |reg|
value = @registers["r#{reg}".to_sym] value = @registers["r#{reg}".to_sym]
"#{reg}-" + "#{reg}-" +