illegal = name != asmop
if illegal:
+ print ("name %s != %s - calling ILLEGAL trap" % (name, asmop))
self.TRAP(0x700, PI.ILLEG)
self.namespace['NIA'] = self.trap_nia
self.pc.update(self.namespace)
with m.Case(InternalOp.OP_MTMSRD):
L = self.fields.FormX.L[0:-1] # X-Form field L
with m.If(L):
- # just update EE and RI
- comb += msr_o.data[MSR.EE].eq(a_i[MSR.EE])
- comb += msr_o.data[MSR.RI].eq(a_i[MSR.RI])
+ # just update RI..EE
+ comb += msr_o.data[MSR.RI:MSR.EE].eq(a_i[MSR.RI:MSR.EE])
with m.Else():
# Architecture says to leave out bits 3 (HV), 51 (ME)
# and 63 (LE) (IBM bit numbering)
initial_regs[2] = 1
self.run_tst_program(Program(lst), initial_regs)
+ def test_3_mtmsr_0(self):
+ lst = ["mtmsr 1,0"]
+ initial_regs = [0] * 32
+ initial_regs[1] = 0xffffffffffffffff
+ self.run_tst_program(Program(lst), initial_regs)
+
+ def test_2_mtmsr_1(self):
+ lst = ["mtmsr 1,1"]
+ initial_regs = [0] * 32
+ initial_regs[1] = 0xffffffffffffffff
+ self.run_tst_program(Program(lst), initial_regs)
+
def test_999_illegal(self):
# ok, um this is a bit of a cheat: use an instruction we know
# is not implemented by either ISACaller or the core