fix format in debug log
[openpower-isa.git] / src / openpower / decoder / isa / test_caller_bcd.py
index 6ce0a06596aa7d1367541c2660ff67c3cdd36bcd..f9efcf43fd98aa908b7a7f5632a5592e50b36fc1 100644 (file)
@@ -1,19 +1,14 @@
-import itertools
 import random
 import re
-from nmigen import Module, Signal
-from nmigen.back.pysim import Simulator, Settle
 from nmutil.formaltest import FHDLTestCase
 import unittest
 
-from openpower.decoder.isa.caller import ISACaller
 from openpower.decoder.power_decoder import create_pdecode
 from openpower.decoder.power_decoder2 import (PowerDecode2)
 from openpower.simulator.program import Program
-from openpower.decoder.isa.caller import ISACaller, inject
 from openpower.decoder.selectable_int import SelectableInt
-from openpower.decoder.orderedset import OrderedSet
-from openpower.decoder.isa.all import ISA
+
+from openpower.decoder.isa.test_runner import run_tst
 
 
 # PowerISA Version 3.0C Book 1 App. B, Table 129
@@ -199,72 +194,7 @@ BCD_TO_DPD_PATTERN = (r"^(\d{2})_\s" +
 BCD_TO_DPD_REGEX = re.compile(BCD_TO_DPD_PATTERN, re.M)
 
 
-def run_tst(generator, initial_regs, initial_sprs=None, svstate=0, mmu=False,
-                                     initial_cr=0, mem=None,
-                                     initial_fprs=None,
-                                     pdecode2=None):
-    if initial_sprs is None:
-        initial_sprs = {}
-    m = Module()
-    comb = m.d.comb
-    instruction = Signal(32)
-
-    if pdecode2 is None:
-        pdecode = create_pdecode(include_fp=initial_fprs is not None)
-        pdecode2 = PowerDecode2(pdecode)
-
-    gen = list(generator.generate_instructions())
-    insncode = generator.assembly.splitlines()
-    instructions = list(zip(gen, insncode))
-
-    m.submodules.pdecode2 = pdecode2
-    simulator = ISA(pdecode2, initial_regs, initial_sprs, initial_cr,
-                    initial_insns=gen, respect_pc=True,
-                    initial_svstate=svstate,
-                    initial_mem=mem,
-                    fpregfile=initial_fprs,
-                    disassembly=insncode,
-                    bigendian=0,
-                    mmu=mmu)
-    comb += pdecode2.dec.raw_opcode_in.eq(instruction)
-    sim = Simulator(m)
-
-    def process():
-
-        print ("GPRs")
-        simulator.gpr.dump()
-        print ("FPRs")
-        simulator.fpr.dump()
-
-        yield pdecode2.dec.bigendian.eq(0)  # little / big?
-        pc = simulator.pc.CIA.value
-        index = pc//4
-        while index < len(instructions):
-            print("instr pc", pc)
-            try:
-                yield from simulator.setup_one()
-            except KeyError:  # indicates instruction not in imem: stop
-                break
-            yield Settle()
-
-            ins, code = instructions[index]
-            print("    0x{:X}".format(ins & 0xffffffff))
-            opname = code.split(' ')[0]
-            print(code, opname)
-
-            # ask the decoder to decode this binary data (endian'd)
-            yield from simulator.execute_one()
-            pc = simulator.pc.CIA.value
-            index = pc//4
-
-    sim.add_process(process)
-    with sim.write_vcd("simulator.vcd", "simulator.gtkw",
-                       traces=[]):
-        sim.run()
-    return simulator
-
-
-def testgen(mapping):
+def tstgen(mapping):
     zeros = [0] * 32
     length = len(mapping)
     iregs_whole = list(mapping.keys())
@@ -283,7 +213,7 @@ class BCDTestCase(FHDLTestCase):
 
     def run_tst(self, instr, mapping):
         lst = [f"{instr} {reg}, {reg}" for reg in range(32)]
-        for (iregs, oregs) in testgen(mapping):
+        for (iregs, oregs) in tstgen(mapping):
             with self.subTest():
                 with Program(lst, bigendian=False) as program:
                     sim = self.run_tst_program(program, iregs)
@@ -297,8 +227,8 @@ class BCDTestCase(FHDLTestCase):
             for digit in range(0x10):
                 dpd = int((match[0] + f"{digit:X}"), 16)
                 bcd = ((int(match[1 + digit][0]) << 8) |
-                        (int(match[1 + digit][1]) << 4) |
-                        (int(match[1 + digit][2]) << 0))
+                       (int(match[1 + digit][1]) << 4) |
+                       (int(match[1 + digit][2]) << 0))
                 mapping[dpd] = bcd
         self.run_tst("cdtbcd", mapping)
 
@@ -307,8 +237,8 @@ class BCDTestCase(FHDLTestCase):
         for match in BCD_TO_DPD_REGEX.findall(BCD_TO_DPD_TABLE):
             for digit in range(10):
                 bcd = ((int(match[0][0]) << 8) |
-                        (int(match[0][1]) << 4) |
-                        (int(digit) << 0))
+                       (int(match[0][1]) << 4) |
+                       (int(digit) << 0))
                 dpd = int(match[1 + digit], 16)
                 mapping[bcd] = dpd
         self.run_tst("cbcdtd", mapping)
@@ -330,20 +260,14 @@ class BCDTestCase(FHDLTestCase):
                 lo = i * 4
                 hi = (i + 1) * 4
                 if (a_in[hi] ^ b_in[hi] ^ (sum_with_carry[hi] == 0)):
-                    addg6s[lo + 3] = 0
-                    addg6s[lo + 2] = 1
-                    addg6s[lo + 1] = 1
-                    addg6s[lo + 0] = 0
+                    addg6s[lo:lo + 3 + 1] = [0, 1, 1, 0]
             if sum_with_carry[64] == 0:
-                addg6s[63] = 0
-                addg6s[62] = 1
-                addg6s[61] = 1
-                addg6s[60] = 0
+                addg6s[60:63] = [0, 1, 1, 0]
             return int("".join(map(str, reversed(addg6s))), 2)
 
         bcd = [f"{digit:04b}" for digit in range(10)]
-        rng10 = lambda: random.randrange(0, 10)
-        bcdrng = lambda: int("".join((bcd[rng10()] for _ in range(16))), 2)
+        def rng10(): return random.randrange(0, 10)
+        def bcdrng(): return int("".join((bcd[rng10()] for _ in range(16))), 2)
 
         lst = [f"addg6s {gpr}, {gpr + 0}, {gpr + 1}" for gpr in range(31)]
         oregs = [0] * 32
@@ -356,7 +280,7 @@ class BCDTestCase(FHDLTestCase):
                     sim = self.run_tst_program(program, iregs)
                     for gpr in range(31):
                         self.assertEqual(sim.gpr(gpr),
-                            SelectableInt(oregs[gpr], 64))
+                                         SelectableInt(oregs[gpr], 64))
 
     def run_tst_program(self, prog, initial_regs=[0] * 32):
         simulator = run_tst(prog, initial_regs, pdecode2=self.pdecode2)