1 from nmigen
import Module
, Signal
2 from nmigen
.back
.pysim
import Simulator
, Delay
, Settle
3 from nmutil
.formaltest
import FHDLTestCase
5 from openpower
.decoder
.isa
.caller
import ISACaller
6 from openpower
.decoder
.power_decoder
import (create_pdecode
)
7 from openpower
.decoder
.power_decoder2
import (PowerDecode2
)
8 from openpower
.simulator
.program
import Program
9 from openpower
.decoder
.isa
.caller
import ISACaller
, SVP64State
10 from openpower
.decoder
.selectable_int
import SelectableInt
11 from openpower
.decoder
.orderedset
import OrderedSet
12 from openpower
.decoder
.isa
.all
import ISA
13 from openpower
.decoder
.isa
.test_caller
import Register
, run_tst
14 from openpower
.sv
.trans
.svp64
import SVP64Asm
15 from openpower
.consts
import SVP64CROffs
16 from copy
import deepcopy
17 from openpower
.decoder
.helpers
import fp64toselectable
18 from openpower
.decoder
.isafunctions
.double2single
import DOUBLE2SINGLE
19 from functools
import reduce
23 class DecoderTestCase(FHDLTestCase
):
25 def _check_regs(self
, sim
, expected
):
27 self
.assertEqual(sim
.gpr(i
), SelectableInt(expected
[i
], 64))
29 def test_sv_remap(self
):
30 """>>> lst = ["svremap 2, 2, 3, 0",
31 "sv.fmadds 0.v, 8.v, 16.v, 0.v"
33 REMAP fmadds FRT, FRA, FRC, FRB
35 lst
= SVP64Asm(["svremap 2, 2, 3, 0",
36 "sv.fmadds 0.v, 16.v, 32.v, 0.v"
54 xf
= reduce(operator
.add
, X
)
55 yf
= reduce(operator
.add
, Y
)
56 print ("flattened X,Y")
60 # and create a linear result2, same scheme
61 #result1 = [0] * (ydim1*xdim2)
66 for i
, (x
, y
) in enumerate(zip(xf
, yf
)):
67 fprs
[i
+16] = fp64toselectable(float(x
)) # X matrix
68 fprs
[i
+32] = fp64toselectable(float(y
)) # Y matrix
70 #t = DOUBLE2SINGLE(fp64toselectable(t)) # convert to Power single
71 #u = DOUBLE2SINGLE(fp64toselectable(u)) # from double
73 #print ("FFT", i, "in", a, b, "coeff", c, "mul",
76 # SVSTATE (in this case, VL=12, to cover all of matrix)
77 svstate
= SVP64State()
78 svstate
.vl
[0:7] = 12 # VL
79 svstate
.maxvl
[0:7] = 12 # MAXVL
80 print ("SVSTATE", bin(svstate
.spr
.asint()))
82 with
Program(lst
, bigendian
=False) as program
:
83 sim
= self
.run_tst_program(program
, svstate
=svstate
,
85 print ("spr svshape0", sim
.spr
['SVSHAPE0'])
86 print (" xdimsz", sim
.spr
['SVSHAPE0'].xdimsz
)
87 print (" ydimsz", sim
.spr
['SVSHAPE0'].ydimsz
)
88 print (" zdimsz", sim
.spr
['SVSHAPE0'].zdimsz
)
89 print ("spr svshape1", sim
.spr
['SVSHAPE1'])
90 print ("spr svshape2", sim
.spr
['SVSHAPE2'])
91 print ("spr svshape3", sim
.spr
['SVSHAPE3'])
93 print ("i", i
, float(sim
.fpr(i
)))
94 # confirm that the results are as expected
95 #for i, (t, u) in enumerate(res):
96 # self.assertEqual(sim.fpr(i+2), t)
97 # self.assertEqual(sim.fpr(i+6), u)
99 def run_tst_program(self
, prog
, initial_regs
=None,
103 if initial_regs
is None:
104 initial_regs
= [0] * 32
105 simulator
= run_tst(prog
, initial_regs
, mem
=initial_mem
,
106 initial_fprs
=initial_fprs
,
117 if __name__
== "__main__":