2 from openpower
.test
.common
import TestAccumulatorBase
3 from openpower
.endian
import bigendian
4 from openpower
.simulator
.program
import Program
5 from openpower
.decoder
.selectable_int
import SelectableInt
6 from openpower
.decoder
.power_enums
import XER_bits
7 from openpower
.decoder
.isa
.caller
import special_sprs
8 from openpower
.test
.state
import ExpectedState
12 class HazardTestCase(TestAccumulatorBase
):
14 def case_div_add_overlap(self
):
15 lst
= ["divd 3, 1, 2",
17 initial_regs
= [0] * 32
21 e
= ExpectedState(pc
=8)
24 e
.intregs
[3] = 3 # 6 divided by 2 == 3
26 e
.intregs
[5] = 7 # 3 plus 4 == 7
27 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
29 def case_div_add_overlap2(self
):
30 lst
= ["divd 3, 1, 2",
31 "mullw 5, 7, 6", # 2*4=8, overwritten later by add
34 initial_regs
= [0] * 32
39 e
= ExpectedState(pc
=16)
42 e
.intregs
[3] = 3 # 6 divided by 2 == 3
43 e
.intregs
[4] = 4 # 8 divided by 2 == 4
44 e
.intregs
[5] = 7 # 3 plus 4 == 7
47 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
49 def case_div_add_overlap_write_after_write_1(self
):
50 lst
= ["divd 3, 1, 2",
51 "add 3, 7, 6", # 2+4=6, overwrites divd
54 initial_regs
= [0] * 32
59 e
= ExpectedState(pc
=12)
62 e
.intregs
[3] = 6 # 2 plus 4 == 6, overwriting div
63 e
.intregs
[5] = 8 # 3 plus 6 == 8
66 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)
68 def cse_div_add_overlap_3(self
):
69 lst
= ["divd 3, 1, 2",
70 "mullw 5, 7, 6", # 2*4=6, overwritten later by add
71 "addi 9, 5, 2", # add 2 to 6 = 8
74 initial_regs
= [0] * 32
79 e
= ExpectedState(pc
=20)
82 e
.intregs
[3] = 3 # 6 divided by 2 == 3
83 e
.intregs
[4] = 4 # 8 divided by 2 == 4
84 e
.intregs
[5] = 7 # 3 plus 4 == 7
87 self
.add_case(Program(lst
, bigendian
), initial_regs
, expected
=e
)