Re-enable test_mtcrf
[soc.git] / src / soc / decoder / isa / test_caller.py
index 5d4869fab207aa18cd819512bb49b4168ce9286c..21364340e5395a27c2951a34d5ae63d8bb8964e8 100644 (file)
@@ -106,7 +106,31 @@ class DecoderTestCase(FHDLTestCase):
             self.assertEqual(sim.gpr(1), SelectableInt(0x0, 64))
             self.assertEqual(sim.gpr(2), SelectableInt(0x1234, 64))
 
-    @unittest.skip("broken")  # FIXME
+    def test_branch_link(self):
+        lst = ["bl 0xc",
+               "addi 2, 1, 0x1234",
+               "ba 0x1000",
+               "addi 1, 0, 0x1234",
+               "bclr 20, 0, 0"]
+        with Program(lst) as program:
+            sim = self.run_tst_program(program)
+            self.assertEqual(sim.spr['LR'], SelectableInt(0x4, 64))
+
+    def test_branch_ctr(self):
+        lst = ["addi 1, 0, 0x10",    # target of jump
+               "mtspr 9, 1",         # mtctr 1
+               "bcctr 20, 0, 0",     # bctr
+               "addi 2, 0, 0x1",     # should never execute
+               "addi 1, 0, 0x1234"]  # target of ctr
+        with Program(lst) as program:
+            sim = self.run_tst_program(program)
+            self.assertEqual(sim.spr['CTR'], SelectableInt(0x10, 64))
+            self.assertEqual(sim.gpr(1), SelectableInt(0x1234, 64))
+            self.assertEqual(sim.gpr(2), SelectableInt(0, 64))
+
+
+
+
     def test_mtcrf(self):
         for i in range(4):
             # 0x7654 gives expected (3+4) (2+4) (1+4) (0+4) for i=3,2,1,0