Allow the formal engine to perform a same-cycle result in the ALU
[soc.git] / src / soc / fu / test / pia.py
1 import power_instruction_analyzer as pia
2
3
4 def pia_res_to_output(pia_res):
5 assert isinstance(pia_res, pia.InstructionOutput)
6 retval = {}
7 if pia_res.rt is not None:
8 retval["o"] = pia_res.rt
9 if pia_res.cr0 is not None:
10 cr0 = pia_res.cr0
11 v = 0
12 if cr0.lt:
13 v |= 8
14 if cr0.gt:
15 v |= 4
16 if cr0.eq:
17 v |= 2
18 if cr0.so:
19 v |= 1
20 retval["cr_a"] = v
21 if pia_res.overflow is not None:
22 overflow = pia_res.overflow
23 v = 0
24 if overflow.ov:
25 v |= 1
26 if overflow.ov32:
27 v |= 2
28 retval["xer_ov"] = v
29 retval["xer_so"] = overflow.so
30 else:
31 retval["xer_ov"] = 0
32 retval["xer_so"] = 0
33 if pia_res.carry is not None:
34 carry = pia_res.carry
35 v = 0
36 if carry.ca:
37 v |= 1
38 if carry.ca32:
39 v |= 2
40 retval["xer_ca"] = v
41 else:
42 retval["xer_ca"] = 0
43 return retval