projects
/
openpower-isa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b24e9b5
)
insn/core: introduce visitable extra
author
Dmitry Selyutin
<ghostmansd@gmail.com>
Sun, 4 Jun 2023 10:27:31 +0000
(13:27 +0300)
committer
Luke Kenneth Casson Leighton
<lkcl@lkcl.net>
Fri, 22 Dec 2023 19:26:19 +0000
(19:26 +0000)
src/openpower/insndb/core.py
patch
|
blob
|
history
diff --git
a/src/openpower/insndb/core.py
b/src/openpower/insndb/core.py
index 13f3a62f10f504daef4070cfe876f668e859db5b..859852b9b47fba4bca2a92ece1ecf5d166ca2f01 100644
(file)
--- a/
src/openpower/insndb/core.py
+++ b/
src/openpower/insndb/core.py
@@
-9,6
+9,7
@@
import operator as _operator
import pathlib as _pathlib
import re as _re
import types as _types
import pathlib as _pathlib
import re as _re
import types as _types
+import typing as _typing
try:
from functools import cached_property
try:
from functools import cached_property
@@
-64,6
+65,10
@@
class Visitor:
def record(self, record):
yield record
def record(self, record):
yield record
+ @_contextlib.contextmanager
+ def extra(self, extra):
+ yield extra
+
@_functools.total_ordering
class Style(_enum.Enum):
@_functools.total_ordering
class Style(_enum.Enum):
@@
-818,6
+823,23
@@
class MarkdownRecord:
operands: Operands
operands: Operands
+@_dataclasses.dataclass(eq=True, frozen=True)
+class VisitableExtra:
+ name: str
+ sel: _typing.Union[
+ _In1Sel, _In2Sel, _In3Sel, _CRInSel, _CRIn2Sel,
+ _OutSel, _CROutSel,
+ ]
+ reg: _Reg
+ seltype: _SelType
+ idx: _SVExtra
+
+ def visit(self, visitor):
+ with visitor.extra(extra=self) as extra:
+ pass
+
+
+
@_functools.total_ordering
@_dataclasses.dataclass(eq=True, frozen=True)
class Record:
@_functools.total_ordering
@_dataclasses.dataclass(eq=True, frozen=True)
class Record:
@@
-830,11
+852,16
@@
class Record:
def visit(self, visitor):
with visitor.record(record=self) as record:
def visit(self, visitor):
with visitor.record(record=self) as record:
- pass
+ for (name, fields) in record.extras.items():
+ extra = VisitableExtra(name=name, **fields)
+ extra.visit(visitor=visitor)
@property
def extras(self):
@property
def extras(self):
- return self.svp64.extras
+ if self.svp64 is not None:
+ return self.svp64.extras
+ else:
+ return _types.MappingProxyType({})
@property
def pcode(self):
@property
def pcode(self):