1 from openpower
.test
.common
import TestAccumulatorBase
2 from openpower
.endian
import bigendian
3 from openpower
.simulator
.program
import Program
4 from openpower
.decoder
.selectable_int
import SelectableInt
5 from openpower
.test
.state
import ExpectedState
9 class ShiftRotTestCase2(TestAccumulatorBase
):
11 def case_0_proof_regression_rlwnm(self
):
12 lst
= ["rlwnm 3, 1, 2, 16, 20"]
13 initial_regs
= [0] * 32
14 #initial_regs[1] =0x7ffdbffb91b906b9
15 initial_regs
[1] = 0x11faafff1111aa11
18 # set expected (intregs, pc, [crregs], so, ov, ca)
19 e
= ExpectedState(initial_regs
, 4)
21 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
24 lst
= ["sraw 3, 1, 2"]
25 initial_regs
= [0] * 32
26 initial_regs
[1] = 0x12345678
28 e
= ExpectedState(initial_regs
, 4)
29 e
.intregs
[3] = 0x123456
30 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
33 lst
= ["sraw 3, 1, 2"]
34 initial_regs
= [0] * 32
35 initial_regs
[1] = 0x82345678 # test the carry
37 e
= ExpectedState(initial_regs
, 4, ca
=3)
38 e
.intregs
[3] = 0xffffffffff823456
39 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
41 def case_sld_rb_too_big(self
):
43 initial_regs
= [0] * 32
44 initial_regs
[1] = 0xffffffffffffffff
45 initial_regs
[4] = 64 # too big, output should be zero
46 e
= ExpectedState(initial_regs
, 4)
48 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
50 def case_sld_rb_is_zero(self
):
52 initial_regs
= [0] * 32
53 initial_regs
[1] = 0x8000000000000000
54 initial_regs
[4] = 0 # no shift; output should equal input
55 e
= ExpectedState(initial_regs
, 4)
56 e
.intregs
[3] = initial_regs
[1]
57 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
59 def case_shift_once(self
):
62 initial_regs
= [0] * 32
63 initial_regs
[1] = 0x80000000
64 initial_regs
[2] = 0x40
65 initial_regs
[4] = 0x00
66 e
= ExpectedState(initial_regs
, 8)
67 e
.intregs
[3] = 0x80000000
68 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
70 def case_rlwinm_1(self
):
71 lst
= ["rlwinm 3, 1, 1, 31, 31"] # Extracts sign bit
72 initial_regs
= [0] * 32
73 initial_regs
[1] = 0x8fffffff
74 e
= ExpectedState(initial_regs
, 4)
76 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
78 def case_rlwinm_2(self
):
79 lst
= ["rlwinm 3, 1, 1, 0, 30"]
80 initial_regs
= [0] * 32
81 initial_regs
[1] = 0xf1110001
82 e
= ExpectedState(initial_regs
, 4)
83 e
.intregs
[3] = 0xe2220002
84 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
86 def case_rlwinm_3(self
):
87 lst
= ["rlwinm 3, 1, 0, 16, 31"] # Clear high-order 16 bits
88 initial_regs
= [0] * 32
89 initial_regs
[1] = 0xebeb1888
90 e
= ExpectedState(initial_regs
, 4)
92 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
94 def case_rlwimi_1(self
):
95 lst
= ["rlwimi 3, 1, 31, 0, 0"]
96 initial_regs
= [0] * 32
98 initial_regs
[3] = 0x7fffffff
99 e
= ExpectedState(initial_regs
, 4)
100 e
.intregs
[3] = 0xffffffff
101 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
103 def case_rlwimi_2(self
):
104 lst
= ["rlwimi 3, 1, 16, 8, 15"]
105 initial_regs
= [0] * 32
106 initial_regs
[1] = 0xcc
107 initial_regs
[3] = 0x7f00ffff
108 e
= ExpectedState(initial_regs
, 4)
109 e
.intregs
[3] = 0x7fccffff
110 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
112 def case_rlwnm_1(self
):
113 lst
= ["rlwnm 3, 1, 2, 0, 31"]
114 initial_regs
= [0] * 32
115 initial_regs
[1] = 0x111
117 e
= ExpectedState(initial_regs
, 4)
119 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
121 def case_rlwnm_2(self
):
122 lst
= ["rlwnm 3, 1, 2, 8, 11"]
123 initial_regs
= [0] * 32
124 initial_regs
[1] = 0xfebaacda
126 e
= ExpectedState(initial_regs
, 4)
127 e
.intregs
[3] = 0xd00000
128 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
130 def case_rldic_1(self
):
131 lst
= ["rldic 3, 1, 8, 31"] # Simple rotate and clear
132 initial_regs
= [0] * 32
133 initial_regs
[1] = 0x0100ffff00000111
134 e
= ExpectedState(initial_regs
, 4)
135 e
.intregs
[3] = 0x11100
136 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
138 def case_rldic_2(self
):
139 lst
= ["rldic 3, 1, 0, 51"] # No rotate and clear
140 initial_regs
= [0] * 32
141 initial_regs
[1] = 0x0100ffff00000fff
142 e
= ExpectedState(initial_regs
, 4)
144 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
146 def case_rldicl_1(self
):
147 lst
= ["rldicl 3, 1, 8, 44"] # Simple rotate with left clear
148 initial_regs
= [0] * 32
149 initial_regs
[1] = 0x0100ffff00000111
150 e
= ExpectedState(initial_regs
, 4)
151 e
.intregs
[3] = 0x11101
152 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
154 def case_rldicl_2(self
):
155 lst
= ["rldicl 3, 1, 32, 47"] # Rotate right and clear
156 initial_regs
= [0] * 32
157 initial_regs
[1] = 0x1000dead0000111c
158 e
= ExpectedState(initial_regs
, 4)
159 e
.intregs
[3] = 0xdead
160 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
162 def case_rldicr_1(self
):
163 lst
= ["rldicr 3, 1, 16, 15"] # Simple rotate with right clear
164 initial_regs
= [0] * 32
165 initial_regs
[1] = 0x0100ffffe0000111
166 e
= ExpectedState(initial_regs
, 4)
167 e
.intregs
[3] = 0xffff000000000000
168 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
170 def case_rldicr_2(self
):
171 lst
= ["rldicr 3, 1, 32, 32"] # Rotate right and clear
172 initial_regs
= [0] * 32
173 initial_regs
[1] = 0x1000caef0000dead
174 e
= ExpectedState(initial_regs
, 4)
175 e
.intregs
[3] = 0xdead00000000
176 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
178 def case_regression_extswsli_1(self
):
179 lst
= [f
"extswsli 3, 1, 31"]
180 initial_regs
= [0] * 32
181 initial_regs
[1] = 0x5678
182 e
= ExpectedState(initial_regs
, 4)
183 e
.intregs
[3] = 0x2b3c00000000
184 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
186 def case_regression_extswsli_2(self
):
187 lst
= [f
"extswsli 3, 1, 7"]
188 initial_regs
= [0] * 32
189 initial_regs
[1] = 0x3ffffd7377f19fdd
190 e
= ExpectedState(initial_regs
, 4)
191 e
.intregs
[3] = 0x3bf8cfee80
192 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
194 def case_regression_extswsli_3(self
):
195 lst
= [f
"extswsli 3, 1, 0"]
196 initial_regs
= [0] * 32
197 initial_regs
[1] = 0x0000010180122900
198 e
= ExpectedState(initial_regs
, 4)
199 e
.intregs
[3] = 0xffffffff80122900
200 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)