# decoder2 - an instance of power_decoder2
# regfile - a list of initial values for the registers
def __init__(self, decoder2, regfile, initial_sprs=None, initial_cr=0,
- initial_mem=None):
+ initial_mem=None, initial_msr=0):
if initial_sprs is None:
initial_sprs = {}
if initial_mem is None:
self.mem = Mem(initial_mem=initial_mem)
self.pc = PC()
self.spr = SPR(decoder2, initial_sprs)
+ self.msr = SelectableInt(initial_msr, 64) # underlying reg
# TODO, needed here:
# FPR (same as GPR except for FP nums)
# 4.2.2 p124 FPSCR (definitely "separate" - not in SPR)
'NIA': self.pc.NIA,
'CIA': self.pc.CIA,
'CR': self.cr,
+ 'MSR': self.msr,
'undefined': self.undefined,
'mode_is_64bit': True,
'SO': XER_bits['SO']
name = p[1]
if name in self.available_op_fields:
self.op_fields.add(name)
- if name in ['CR', 'LR', 'CTR', 'TAR', 'FPSCR']:
+ if name in ['CR', 'LR', 'CTR', 'TAR', 'FPSCR', 'MSR']:
self.special_regs.add(name)
self.write_regs.add(name) # and add to list to write
p[0] = ast.Name(id=name, ctx=ast.Load())
classes = ', '.join(['ISACaller'] + self.pages_written)
f.write('class ISA(%s):\n' % classes)
- f.write(' def __init__(self, dec, regs, sprs, cr, mem):\n')
- f.write(' super().__init__(dec, regs, sprs, cr, mem)\n')
+ f.write(' def __init__(self, dec, regs, sprs, cr, mem, msr):\n')
+ f.write(' super().__init__(dec, regs, sprs, cr, mem, msr)\n')
f.write(' self.instrs = {\n')
for page in self.pages_written:
f.write(' **self.%s_instrs,\n' % page)
print(test.name)
program = test.program
self.subTest(test.name)
- sim = ISA(pdecode2, test.regs, test.sprs, test.cr)
+ sim = ISA(pdecode2, test.regs, test.sprs, test.cr, test.mem,
+ test.msr)
gen = program.generate_instructions()
instructions = list(zip(gen, program.assembly.splitlines()))
class TestCase:
- def __init__(self, program, name, regs=None, sprs=None, cr=0, mem=None):
+ def __init__(self, program, name, regs=None, sprs=None, cr=0, mem=None,
+ msr=0):
self.program = program
self.name = name
self.sprs = sprs
self.cr = cr
self.mem = mem
+ self.msr = msr