pysvp64db: fix traversal
[openpower-isa.git] / src / openpower / decoder / isa / svstate.py
1 from openpower.decoder.selectable_int import (FieldSelectableInt,
2 SelectableInt,
3 )
4 from openpower.sv.svstate import SVSTATERec
5 import os
6 from copy import deepcopy
7 from openpower.util import log
8
9
10 class SVP64State(SelectableInt):
11 def __init__(self, value=0):
12 SelectableInt.__init__(self, value, 64)
13 offs = 0
14 # set up sub-fields from Record layout
15 self.fsi = {}
16 l = deepcopy(SVSTATERec.layout)
17 l.reverse()
18 for field, width in l:
19 end = offs+width
20 fs = tuple(range(offs, end))
21 v = FieldSelectableInt(self, fs)
22 self.fsi[field] = v
23 log("SVSTATE setup field", field, offs, end)
24 offs = end
25
26 @property
27 def maxvl(self):
28 return self.fsi['maxvl'].asint(msb0=True)
29
30 @maxvl.setter
31 def maxvl(self, value):
32 self.fsi['maxvl'].eq(value)
33
34 @property
35 def vl(self):
36 return self.fsi['vl'].asint(msb0=True)
37
38 @vl.setter
39 def vl(self, value):
40 self.fsi['vl'].eq(value)
41
42 @property
43 def dststep(self):
44 return self.fsi['dststep'].asint(msb0=True)
45
46 @dststep.setter
47 def dststep(self, value):
48 self.fsi['dststep'].eq(value)
49
50 @property
51 def srcstep(self):
52 return self.fsi['srcstep'].asint(msb0=True)
53
54 @srcstep.setter
55 def srcstep(self, value):
56 self.fsi['srcstep'].eq(value)
57
58 @property
59 def dsubstep(self):
60 return self.fsi['dsubstep'].asint(msb0=True)
61
62 @dsubstep.setter
63 def dsubstep(self, value):
64 self.fsi['dsubstep'].eq(value)
65
66 @property
67 def ssubstep(self):
68 return self.fsi['ssubstep'].asint(msb0=True)
69
70 @ssubstep.setter
71 def ssubstep(self, value):
72 self.fsi['ssubstep'].eq(value)
73
74 @property
75 def subvl(self):
76 return self.fsi['subvl'].asint(msb0=True)
77
78 @subvl.setter
79 def subvl(self, value):
80 self.fsi['subvl'].eq(value)
81
82 @property
83 def mi0(self):
84 return self.fsi['mi0'].asint(msb0=True)
85
86 @mi0.setter
87 def mi0(self, value):
88 self.fsi['mi0'].eq(value)
89
90 @property
91 def mi1(self):
92 return self.fsi['mi1'].asint(msb0=True)
93
94 @mi1.setter
95 def mi1(self, value):
96 self.fsi['mi1'].eq(value)
97
98 @property
99 def mi2(self):
100 return self.fsi['mi2'].asint(msb0=True)
101
102 @mi2.setter
103 def mi2(self, value):
104 self.fsi['mi2'].eq(value)
105
106 @property
107 def mo0(self):
108 return self.fsi['mo0'].asint(msb0=True)
109
110 @mo0.setter
111 def mo0(self, value):
112 self.fsi['mo0'].eq(value)
113
114 @property
115 def mo1(self):
116 return self.fsi['mo1'].asint(msb0=True)
117
118 @mo1.setter
119 def mo1(self, value):
120 self.fsi['mo1'].eq(value)
121
122 @property
123 def SVme(self):
124 return self.fsi['SVme'].asint(msb0=True)
125
126 @SVme.setter
127 def SVme(self, value):
128 self.fsi['SVme'].eq(value)
129
130 @property
131 def vfirst(self):
132 return self.fsi['vfirst'].asint(msb0=True)
133
134 @vfirst.setter
135 def vfirst(self, value):
136 self.fsi['vfirst'].eq(value)
137
138 @property
139 def RMpst(self):
140 return self.fsi['RMpst'].asint(msb0=True)
141
142 @RMpst.setter
143 def RMpst(self, value):
144 self.fsi['RMpst'].eq(value)
145
146 @property
147 def unpack(self):
148 return self.fsi['unpack'].asint(msb0=True)
149
150 @unpack.setter
151 def unpack(self, value):
152 self.fsi['unpack'].eq(value)
153
154 @property
155 def pack(self):
156 return self.fsi['pack'].asint(msb0=True)
157
158 @pack.setter
159 def pack(self, value):
160 self.fsi['pack'].eq(value)
161