debugging to find operator not being ssa
This commit is contained in:
parent
61fc8a3991
commit
0cde7c1d0a
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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}-" +
|
||||||
|
Loading…
x
Reference in New Issue
Block a user