e.intregs[7] = 4
self.add_case(Program(lst, bigendian), initial_regs, expected=e)
+ def case_div_add_overlap_write_after_write(self):
+ lst = ["divd 3, 1, 2",
+ "add 3, 7, 6", # 2+4=6, overwrites divd
+ "add 5, 3, 2" # 3+2=5
+ ]
+ initial_regs = [0] * 32
+ initial_regs[1] = 6
+ initial_regs[2] = 2
+ initial_regs[6] = 2
+ initial_regs[7] = 4
+ e = ExpectedState(pc=12)
+ e.intregs[1] = 6
+ e.intregs[2] = 2
+ e.intregs[3] = 3 # 2 plus 4 == 6, overwriting div
+ e.intregs[5] = 5 # 3 plus 2 == 5
+ e.intregs[6] = 2
+ e.intregs[7] = 4
+ self.add_case(Program(lst, bigendian), initial_regs, expected=e)
+
def cse_div_add_overlap_3(self):
lst = ["divd 3, 1, 2",
"mullw 5, 7, 6", # 2*4=6, overwritten later by add
- "addi 5, 5, 2", # add 2 to 6 = 8
- "divd 4, 5, 6",
+ "addi 9, 5, 2", # add 2 to 6 = 8
+ "divd 4, 9, 6",
"add 5, 3, 4"]
initial_regs = [0] * 32
initial_regs[1] = 6
initial_regs[2] = 2
initial_regs[6] = 2
initial_regs[7] = 4
- e = ExpectedState(pc=16)
+ e = ExpectedState(pc=20)
e.intregs[1] = 6
e.intregs[2] = 2
e.intregs[3] = 3 # 6 divided by 2 == 3