40e31b1c9a64d5abb92bdb527653ab95d686b235
2 from copy
import deepcopy
4 from nmutil
.formaltest
import FHDLTestCase
5 from openpower
.decoder
.isa
.caller
import SVP64State
6 from openpower
.decoder
.isa
.test_caller
import run_tst
7 from openpower
.decoder
.selectable_int
import SelectableInt
8 from openpower
.simulator
.program
import Program
9 from openpower
.sv
.trans
.svp64
import SVP64Asm
12 class DecoderTestCase(FHDLTestCase
):
14 def _check_regs(self
, sim
, expected
):
16 self
.assertEqual(sim
.gpr(i
), SelectableInt(expected
[i
], 64))
18 def test_sv_addi_ffirst_le(self
):
19 lst
= SVP64Asm(["sv.subf./ff=le *0,8,*0"
24 svstate
= SVP64State()
26 svstate
.maxvl
= 4 # MAXVL
27 print("SVSTATE", bin(svstate
.asint()))
35 for i
, x
in enumerate(vec
):
38 with
Program(lst
, bigendian
=False) as program
:
39 sim
= self
.run_tst_program(program
, initial_regs
=gprs
,
42 val
= sim
.gpr(i
).value
45 # confirm that the results are as expected
46 expected
= deepcopy(vec
)
49 result
= expected
[i
] - gprs
[8]
53 # only write out if successful
55 for i
, v
in enumerate(res
):
56 self
.assertEqual(v
, expected
[i
])
58 self
.assertEqual(sim
.svstate
.vl
, expected_vl
)
59 self
.assertEqual(sim
.svstate
.maxvl
, 4)
60 self
.assertEqual(sim
.svstate
.srcstep
, 0)
61 self
.assertEqual(sim
.svstate
.dststep
, 0)
63 def test_sv_addi_ffirst(self
):
64 lst
= SVP64Asm(["sv.subf./ff=eq *0,8,*0"
69 svstate
= SVP64State()
71 svstate
.maxvl
= 4 # MAXVL
72 print("SVSTATE", bin(svstate
.asint()))
80 for i
, x
in enumerate(vec
):
83 with
Program(lst
, bigendian
=False) as program
:
84 sim
= self
.run_tst_program(program
, initial_regs
=gprs
,
87 val
= sim
.gpr(i
).value
90 # confirm that the results are as expected
91 expected
= deepcopy(vec
)
93 result
= expected
[i
] - gprs
[8]
97 for i
, v
in enumerate(res
):
98 self
.assertEqual(v
, expected
[i
])
100 self
.assertEqual(sim
.svstate
.vl
, 2)
101 self
.assertEqual(sim
.svstate
.maxvl
, 4)
102 self
.assertEqual(sim
.svstate
.srcstep
, 0)
103 self
.assertEqual(sim
.svstate
.dststep
, 0)
105 def test_sv_addi_ffirst_rc1(self
):
106 lst
= SVP64Asm(["sv.subf/ff=RC1 *0,8,*0" # RC1 auto-sets EQ (and Rc=1)
111 svstate
= SVP64State()
113 svstate
.maxvl
= 4 # MAXVL
114 print("SVSTATE", bin(svstate
.asint()))
122 for i
, x
in enumerate(vec
):
125 with
Program(lst
, bigendian
=False) as program
:
126 sim
= self
.run_tst_program(program
, initial_regs
=gprs
,
129 val
= sim
.gpr(i
).value
132 # confirm that the results are as expected
133 expected
= deepcopy(vec
)
135 result
= expected
[i
] - gprs
[8]
139 for i
, v
in enumerate(res
):
140 self
.assertEqual(v
, expected
[i
])
142 self
.assertEqual(sim
.svstate
.vl
, 2)
143 self
.assertEqual(sim
.svstate
.maxvl
, 4)
144 self
.assertEqual(sim
.svstate
.srcstep
, 0)
145 self
.assertEqual(sim
.svstate
.dststep
, 0)
147 def test_sv_addi_ffirst_vli(self
):
148 lst
= SVP64Asm(["sv.subf/ff=RC1/vli *0,8,*0"
153 svstate
= SVP64State()
155 svstate
.maxvl
= 4 # MAXVL
156 print("SVSTATE", bin(svstate
.asint()))
164 for i
, x
in enumerate(vec
):
167 with
Program(lst
, bigendian
=False) as program
:
168 sim
= self
.run_tst_program(program
, initial_regs
=gprs
,
171 val
= sim
.gpr(i
).value
174 # confirm that the results are as expected
175 expected
= deepcopy(vec
)
177 expected
[i
] -= gprs
[8]
180 for i
, v
in enumerate(res
):
181 self
.assertEqual(v
, expected
[i
])
183 self
.assertEqual(sim
.svstate
.vl
, 3)
184 self
.assertEqual(sim
.svstate
.maxvl
, 4)
185 self
.assertEqual(sim
.svstate
.srcstep
, 0)
186 self
.assertEqual(sim
.svstate
.dststep
, 0)
188 def run_tst_program(self
, prog
, initial_regs
=None,
192 if initial_regs
is None:
193 initial_regs
= [0] * 32
194 simulator
= run_tst(prog
, initial_regs
, mem
=initial_mem
,
195 initial_fprs
=initial_fprs
,
206 if __name__
== "__main__":