add mtmsr tests (fail)
authorLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 5 Jul 2020 21:32:56 +0000 (22:32 +0100)
committerLuke Kenneth Casson Leighton <lkcl@lkcl.net>
Sun, 5 Jul 2020 21:32:56 +0000 (22:32 +0100)
src/soc/decoder/isa/caller.py
src/soc/fu/trap/main_stage.py
src/soc/fu/trap/test/test_pipe_caller.py

index fbbbb75fdb390bf4cd3877dd70900f93e6ebde35..fa0fb341ba9625732e449ca2d2dae5fe12ab963f 100644 (file)
@@ -532,6 +532,7 @@ class ISACaller:
             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)
index ee09d9ec070f53169f9874988365b62a961ec2d2..8c68e7fc9051b49c92eea986a3a24b59fdfc16d9 100644 (file)
@@ -167,9 +167,8 @@ class TrapMainStage(PipeModBase):
             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)
index 6fbf960b109ab91cbb147b2b289a29f7949df583..b53f935fea475e9d1167102d060b7f2feaae076b 100644 (file)
@@ -107,6 +107,18 @@ class TrapTestCase(FHDLTestCase):
             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