staddr = addr
remainder = addr & (self.bytes_per_word - 1)
addr = addr >> self.word_log2
- print("Writing 0x{:x} to ST 0x{:x} memaddr 0x{:x}/{:x}".format(v,
- staddr, addr, remainder, swap))
+ print("Writing 0x{:x} to ST 0x{:x} "
+ "memaddr 0x{:x}/{:x}".format(v, staddr, addr, remainder, swap))
assert remainder & (width - 1) == 0, "Unaligned access unsupported!"
if swap:
v = swap_order(v, width)
print("mem @ 0x{:x}: 0x{:x}".format(addr, self.mem[addr]))
def __call__(self, addr, sz):
- val = self.ld(addr.value, sz)
+ val = self.ld(addr.value, sz, swap=False)
print("memread", addr, sz, val)
return SelectableInt(val, sz*8)
def memassign(self, addr, sz, val):
print("memassign", addr, sz, val)
- self.st(addr.value, val.value, sz)
+ self.st(addr.value, val.value, sz, swap=False)
class GPR(dict):
if isinstance(key, int):
key = spr_dict[key].SPR
key = special_sprs.get(key, key)
+ if key == 'HSRR0': # HACK!
+ key = 'SRR0'
+ if key == 'HSRR1': # HACK!
+ key = 'SRR1'
if key in self:
res = dict.__getitem__(self, key)
else:
key = spr_dict[key].SPR
print("spr key", key)
key = special_sprs.get(key, key)
+ if key == 'HSRR0': # HACK!
+ self.__setitem__('SRR0', value)
+ if key == 'HSRR1': # HACK!
+ self.__setitem__('SRR1', value)
print("setting spr", key, value)
dict.__setitem__(self, key, value)
yield self.dec2.dec.raw_opcode_in.eq(ins & 0xffffffff)
yield self.dec2.dec.bigendian.eq(self.bigendian)
- yield self.dec2.msr.eq(self.msr.value)
- yield self.dec2.cia.eq(pc)
+ yield self.dec2.state.msr.eq(self.msr.value)
+ yield self.dec2.state.pc.eq(pc)
def execute_one(self):
"""execute one instruction