From 78096b62db0345846cca70ab2f75f9c3519006c4 Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Wed, 22 Jul 2020 17:42:37 -0700 Subject: [PATCH] add all div* and mod* instructions to test_pipe_caller --- src/soc/fu/div/test/test_pipe_caller.py | 55 ++++++++++++++++++++----- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/src/soc/fu/div/test/test_pipe_caller.py b/src/soc/fu/div/test/test_pipe_caller.py index e9714928..a6ee5505 100644 --- a/src/soc/fu/div/test/test_pipe_caller.py +++ b/src/soc/fu/div/test/test_pipe_caller.py @@ -164,17 +164,7 @@ class DivTestCases: initial_regs[2] = 0xffffffff self.run_test_program(Program(lst, bigendian), initial_regs) - def tst_rand_divw(self): - insns = ["divw", "divw.", "divwo", "divwo."] - for i in range(40): - choice = random.choice(insns) - lst = [f"{choice} 3, 1, 2"] - initial_regs = [0] * 32 - initial_regs[1] = log_rand(32) - initial_regs[2] = log_rand(32) - self.run_test_program(Program(lst, bigendian), initial_regs) - - def test_divwuo_regression_1(self): + def tst_divwuo_regression_1(self): lst = ["divwuo. 3, 1, 2"] initial_regs = [0] * 32 initial_regs[1] = 0x7591a398c4e32b68 @@ -188,6 +178,39 @@ class DivTestCases: initial_regs[2] = 0x2 self.run_test_program(Program(lst, bigendian), initial_regs) + def test_all(self): + instrs = [] + for width in ("w", "d"): + for sign in ("", "u"): + for ov in ("", "o"): + for cnd in ("", "."): + instrs += ["div" + width + sign + ov + cnd, + "div" + width + "e" + sign + ov + cnd] + for sign in ("s", "u"): + instrs += ["mod" + sign + width] + test_values = [ + 0x0, + 0x1, + 0x2, + 0xFFFF_FFFF_FFFF_FFFF, + 0xFFFF_FFFF_FFFF_FFFE, + 0x7FFF_FFFF_FFFF_FFFF, + 0x8000_0000_0000_0000, + 0x1234_5678_0000_0000, + 0x1234_5678_8000_0000, + 0x1234_5678_FFFF_FFFF, + 0x1234_5678_7FFF_FFFF, + ] + for instr in instrs: + l = [f"{instr} 3, 1, 2"] + for ra in test_values: + for rb in test_values: + initial_regs = [0] * 32 + initial_regs[1] = ra + initial_regs[2] = rb + prog = Program(l, bigendian) + self.run_test_program(prog, initial_regs) + def tst_rand_divwu(self): insns = ["divwu", "divwu.", "divwuo", "divwuo."] for i in range(40): @@ -198,6 +221,16 @@ class DivTestCases: initial_regs[2] = log_rand(32) self.run_test_program(Program(lst, bigendian), initial_regs) + def tst_rand_divw(self): + insns = ["divw", "divw.", "divwo", "divwo."] + for i in range(40): + choice = random.choice(insns) + lst = [f"{choice} 3, 1, 2"] + initial_regs = [0] * 32 + initial_regs[1] = log_rand(32) + initial_regs[2] = log_rand(32) + self.run_test_program(Program(lst, bigendian), initial_regs) + class TestRunner(unittest.TestCase): def write_ilang(self, div_pipe_kind): -- 2.30.2