1 # SPDX-License-Identifier: LGPLv3+
2 # Funded by NLnet https://nlnet.nl/
4 # XXX TODO: get this into openpower/consts.py instead.
5 # create the layout from an auto-created Enum XERb
6 """ Record for XER as defined in
7 Power ISA v3.1B Book I section 3.2.2 page 49(75)
11 | Bits | Mnemonic | Description |
12 |-------|----------|------------------|
13 | 0:31 | | Reserved |
14 | 32 | SO | Summary Overflow |
15 | 33 | OV | Overflow |
17 | 35:43 | | Reserved |
18 | 44 | OV32 | Overflow32 |
19 | 45 | CA32 | Carry32 |
20 | 46:56 | | Reserved |
21 | 57:63 | | Reserved |
24 from nmigen
import Record
25 from copy
import deepcopy
26 from openpower
.util
import log
27 from openpower
.decoder
.selectable_int
import (
28 FieldSelectableInt
, SelectableInt
)
31 class XERRecord(Record
):
32 layout
= [("Reserved1", 18),
42 def __init__(self
, name
=None):
43 super().__init
__(name
=name
, layout
=XERRecord
.layout
)
46 class XERState(SelectableInt
):
47 def __init__(self
, value
=0):
48 SelectableInt
.__init
__(self
, value
, 64)
51 # set up sub-fields from Record layout
53 l
= deepcopy(XERRecord
.layout
)
55 for field
, width
in l
:
57 fs
= tuple(range(offs
, end
))
58 v
= FieldSelectableInt(self
, fs
)
68 self
.fsi
['SO'].eq(value
)
76 self
.fsi
['OV'].eq(value
)
84 self
.fsi
['CA'].eq(value
)
88 return self
.fsi
['OV32']
91 def OV32(self
, value
):
92 self
.fsi
['OV32'].eq(value
)
96 return self
.fsi
['CA32']
99 def CA32(self
, value
):
100 self
.fsi
['CA32'].eq(value
)
103 if __name__
== "__main__":
104 from pprint
import pprint
105 print("XERRecord.layout:")
106 pprint(XERRecord
.layout
)
107 print("XERState.fsi:")
108 pprint(XERState().fsi
)