move over to from openpower imports
[soc.git] / src / soc / fu / mul / test / test_pipe_caller.py
1 import unittest
2 from soc.fu.mul.test.helper import MulTestHelper
3 from openpower.simulator.program import Program
4 from soc.config.endian import bigendian
5 from soc.fu.test.common import TestAccumulatorBase, skip_case
6
7 import random
8
9
10 class MulTestCases2Arg(TestAccumulatorBase):
11 def case_0_mullw(self):
12 lst = [f"mullw 3, 1, 2"]
13 initial_regs = [0] * 32
14 #initial_regs[1] = 0xffffffffffffffff
15 #initial_regs[2] = 0xffffffffffffffff
16 initial_regs[1] = 0x2ffffffff
17 initial_regs[2] = 0x2
18 self.add_case(Program(lst, bigendian), initial_regs)
19
20 def case_1_mullwo_(self):
21 lst = [f"mullwo. 3, 1, 2"]
22 initial_regs = [0] * 32
23 initial_regs[1] = 0x3b34b06f
24 initial_regs[2] = 0xfdeba998
25 self.add_case(Program(lst, bigendian), initial_regs)
26
27 def case_2_mullwo(self):
28 lst = [f"mullwo 3, 1, 2"]
29 initial_regs = [0] * 32
30 initial_regs[1] = 0xffffffffffffa988 # -5678
31 initial_regs[2] = 0xffffffffffffedcc # -1234
32 self.add_case(Program(lst, bigendian), initial_regs)
33
34 def case_3_mullw(self):
35 lst = ["mullw 3, 1, 2",
36 "mullw 3, 1, 2"]
37 initial_regs = [0] * 32
38 initial_regs[1] = 0x6
39 initial_regs[2] = 0xe
40 self.add_case(Program(lst, bigendian), initial_regs)
41
42 def case_4_mullw_rand(self):
43 for i in range(40):
44 lst = ["mullw 3, 1, 2"]
45 initial_regs = [0] * 32
46 initial_regs[1] = random.randint(0, (1 << 64)-1)
47 initial_regs[2] = random.randint(0, (1 << 64)-1)
48 self.add_case(Program(lst, bigendian), initial_regs)
49
50 def case_4_mullw_nonrand(self):
51 for i in range(40):
52 lst = ["mullw 3, 1, 2"]
53 initial_regs = [0] * 32
54 initial_regs[1] = i+1
55 initial_regs[2] = i+20
56 self.add_case(Program(lst, bigendian), initial_regs)
57
58 def case_mulhw__regression_1(self):
59 lst = ["mulhw. 3, 1, 2"
60 ]
61 initial_regs = [0] * 32
62 initial_regs[1] = 0x7745b36eca6646fa
63 initial_regs[2] = 0x47dfba3a63834ba2
64 self.add_case(Program(lst, bigendian), initial_regs)
65
66 def case_rand_mul_lh(self):
67 insns = ["mulhw", "mulhw.", "mulhwu", "mulhwu."]
68 for i in range(40):
69 choice = random.choice(insns)
70 lst = [f"{choice} 3, 1, 2"]
71 initial_regs = [0] * 32
72 initial_regs[1] = random.randint(0, (1 << 64)-1)
73 initial_regs[2] = random.randint(0, (1 << 64)-1)
74 self.add_case(Program(lst, bigendian), initial_regs)
75
76 def case_rand_mullw(self):
77 insns = ["mullw", "mullw.", "mullwo", "mullwo."]
78 for i in range(40):
79 choice = random.choice(insns)
80 lst = [f"{choice} 3, 1, 2"]
81 initial_regs = [0] * 32
82 initial_regs[1] = random.randint(0, (1 << 64)-1)
83 initial_regs[2] = random.randint(0, (1 << 64)-1)
84 self.add_case(Program(lst, bigendian), initial_regs)
85
86 def case_rand_mulld(self):
87 insns = ["mulld", "mulld.", "mulldo", "mulldo."]
88 for i in range(40):
89 choice = random.choice(insns)
90 lst = [f"{choice} 3, 1, 2"]
91 initial_regs = [0] * 32
92 initial_regs[1] = random.randint(0, (1 << 64)-1)
93 initial_regs[2] = random.randint(0, (1 << 64)-1)
94 self.add_case(Program(lst, bigendian), initial_regs)
95
96 def case_rand_mulhd(self):
97 insns = ["mulhd", "mulhd."]
98 for i in range(40):
99 choice = random.choice(insns)
100 lst = [f"{choice} 3, 1, 2"]
101 initial_regs = [0] * 32
102 initial_regs[1] = random.randint(0, (1 << 64)-1)
103 initial_regs[2] = random.randint(0, (1 << 64)-1)
104 self.add_case(Program(lst, bigendian), initial_regs)
105
106 def case_0_mullhw_regression(self):
107 lst = [f"mulhwu 3, 1, 2"]
108 initial_regs = [0] * 32
109 initial_regs[1] = 0x4000000000000000
110 initial_regs[2] = 0x0000000000000002
111 self.add_case(Program(lst, bigendian), initial_regs)
112
113
114 class MulTestCases3Arg(TestAccumulatorBase):
115 # TODO add test case for these 3 operand cases (madd
116 # needs to be implemented)
117 # "maddhd","maddhdu","maddld"
118 @skip_case("madd not implemented")
119 def case_maddld(self):
120 lst = ["maddld 1, 2, 3, 4"]
121 initial_regs = [0] * 32
122 initial_regs[2] = 0x3
123 initial_regs[3] = 0x4
124 initial_regs[4] = 0x5
125 self.add_case(Program(lst, bigendian), initial_regs)
126
127
128 class TestPipe(MulTestHelper):
129 def test_mul_pipe_2_arg(self):
130 self.run_all(MulTestCases2Arg().test_data, "mul_pipe_caller_2_arg",
131 has_third_input=False)
132
133 def test_mul_pipe_3_arg(self):
134 self.run_all(MulTestCases3Arg().test_data, "mul_pipe_caller_3_arg",
135 has_third_input=True)
136
137
138 if __name__ == "__main__":
139 unittest.main()