add more totally random bpermd unit tests, just to be sure
[openpower-isa.git] / src / openpower / test / logical / logical_cases.py
1 import unittest
2 from openpower.simulator.program import Program
3 from openpower.endian import bigendian
4 from openpower.test.common import TestAccumulatorBase
5 import random
6
7
8 class LogicalTestCase(TestAccumulatorBase):
9
10 def case_complement(self):
11 insns = ["andc", "orc", "nand", "nor"]
12 for i in range(40):
13 choice = random.choice(insns)
14 lst = [f"{choice} 3, 1, 2"]
15 initial_regs = [0] * 32
16 initial_regs[1] = random.randint(0, (1 << 64)-1)
17 initial_regs[2] = random.randint(0, (1 << 64)-1)
18 self.add_case(Program(lst, bigendian), initial_regs)
19
20 def case_rand(self):
21 insns = ["and", "or", "xor", "eqv"]
22 for i in range(40):
23 choice = random.choice(insns)
24 lst = [f"{choice} 3, 1, 2"]
25 initial_regs = [0] * 32
26 initial_regs[1] = random.randint(0, (1 << 64)-1)
27 initial_regs[2] = random.randint(0, (1 << 64)-1)
28 self.add_case(Program(lst, bigendian), initial_regs)
29
30 def case_rand_(self):
31 insns = ["and.", "or.", "xor.", "eqv.", "andc.",
32 "orc.", "nand.", "nor."]
33 for XER in [0, 0xe00c0000]:
34 for i in range(40):
35 choice = random.choice(insns)
36 lst = [f"{choice} 3, 1, 2"]
37 initial_regs = [0] * 32
38 initial_regs[1] = random.randint(0, (1 << 64)-1)
39 initial_regs[2] = random.randint(0, (1 << 64)-1)
40 self.add_case(Program(lst, bigendian), initial_regs,
41 initial_sprs = {'XER': XER})
42
43 def case_rand_imm_so(self):
44 insns = ["andi.", "andis."]
45 for i in range(1):
46 choice = random.choice(insns)
47 imm = random.randint(0, (1 << 16)-1)
48 lst = [f"{choice} 3, 1, {imm}"]
49 print(lst)
50 initial_regs = [0] * 32
51 initial_regs[1] = random.randint(0, (1 << 64)-1)
52 initial_sprs = {'XER': 0xe00c0000}
53
54 self.add_case(Program(lst, bigendian), initial_regs,
55 initial_sprs=initial_sprs)
56
57 def case_rand_imm_logical(self):
58 insns = ["andi.", "andis.", "ori", "oris", "xori", "xoris"]
59 for i in range(10):
60 choice = random.choice(insns)
61 imm = random.randint(0, (1 << 16)-1)
62 lst = [f"{choice} 3, 1, {imm}"]
63 print(lst)
64 initial_regs = [0] * 32
65 initial_regs[1] = random.randint(0, (1 << 64)-1)
66 self.add_case(Program(lst, bigendian), initial_regs)
67
68 def case_cntz(self):
69 insns = ["cntlzd", "cnttzd", "cntlzw", "cnttzw"]
70 for i in range(100):
71 choice = random.choice(insns)
72 lst = [f"{choice} 3, 1"]
73 print(lst)
74 initial_regs = [0] * 32
75 initial_regs[1] = random.randint(0, (1 << 64)-1)
76 self.add_case(Program(lst, bigendian), initial_regs)
77
78 def case_parity(self):
79 insns = ["prtyw", "prtyd"]
80 for i in range(10):
81 choice = random.choice(insns)
82 lst = [f"{choice} 3, 1"]
83 print(lst)
84 initial_regs = [0] * 32
85 initial_regs[1] = random.randint(0, (1 << 64)-1)
86 self.add_case(Program(lst, bigendian), initial_regs)
87
88 def case_popcnt(self):
89 insns = ["popcntb", "popcntw", "popcntd"]
90 for i in range(10):
91 choice = random.choice(insns)
92 lst = [f"{choice} 3, 1"]
93 print(lst)
94 initial_regs = [0] * 32
95 initial_regs[1] = random.randint(0, (1 << 64)-1)
96 self.add_case(Program(lst, bigendian), initial_regs)
97
98 def case_popcnt_edge(self):
99 insns = ["popcntb", "popcntw", "popcntd"]
100 for choice in insns:
101 lst = [f"{choice} 3, 1"]
102 initial_regs = [0] * 32
103 initial_regs[1] = -1
104 self.add_case(Program(lst, bigendian), initial_regs)
105
106 def case_cmpb(self):
107 lst = ["cmpb 3, 1, 2"]
108 initial_regs = [0] * 32
109 initial_regs[1] = 0xdeadbeefcafec0de
110 initial_regs[2] = 0xd0adb0000afec1de
111 self.add_case(Program(lst, bigendian), initial_regs)
112
113 def case_bpermd(self):
114 lst = ["bpermd 3, 1, 2"]
115 for i in range(20):
116 initial_regs = [0] * 32
117 initial_regs[1] = 1 << random.randint(0, 63)
118 initial_regs[2] = 0xdeadbeefcafec0de
119 self.add_case(Program(lst, bigendian), initial_regs)
120
121 def case_bpermd_morerandom(self):
122 lst = ["bpermd 3, 1, 2"]
123 for i in range(100):
124 initial_regs = [0] * 32
125 initial_regs[1] = random.randint(0, (1<<64)-1)
126 initial_regs[2] = random.randint(0, (1<<64)-1)
127 self.add_case(Program(lst, bigendian), initial_regs)
128