Remove the number field from the PredNode union type.
Predicate numbers are available in the maps isa.settings.predicate_number and isa.instp_number instead. Like the name field, predicate numbers don't interact well with unique_pred().
This commit is contained in:
@@ -103,23 +103,17 @@ class TargetISA(object):
|
||||
"""
|
||||
Collect and number all predicates in use.
|
||||
|
||||
Sets `instp.number` for all used instruction predicates and places them
|
||||
in `self.all_instps` in numerical order.
|
||||
|
||||
Ensures that all ISA predicates have an assigned bit number in
|
||||
`self.settings`.
|
||||
"""
|
||||
self.all_instps = list() # type: List[PredNode]
|
||||
instps = set() # type: Set[PredNode]
|
||||
self.instp_number = OrderedDict() # type: OrderedDict[PredNode, int]
|
||||
for cpumode in self.cpumodes:
|
||||
for enc in cpumode.encodings:
|
||||
instp = enc.instp
|
||||
if instp and instp not in instps:
|
||||
if instp and instp not in self.instp_number:
|
||||
# assign predicate number starting from 0.
|
||||
assert instp.number is None
|
||||
instp.number = len(instps)
|
||||
instps.add(instp)
|
||||
self.all_instps.append(instp)
|
||||
n = len(self.instp_number)
|
||||
self.instp_number[instp] = n
|
||||
|
||||
# All referenced ISA predicates must have a number in
|
||||
# `self.settings`. This may cause some parent predicates to be
|
||||
|
||||
@@ -80,7 +80,6 @@ class Predicate(object):
|
||||
|
||||
def __init__(self, parts):
|
||||
# type: (Sequence[PredNode]) -> None
|
||||
self.number = None # type: int
|
||||
self.parts = parts
|
||||
self.context = reduce(
|
||||
_descendant,
|
||||
@@ -210,7 +209,6 @@ class FieldPredicate(object):
|
||||
|
||||
def __init__(self, field, function, args):
|
||||
# type: (FormatField, str, Sequence[Any]) -> None
|
||||
self.number = None # type: int
|
||||
self.field = field
|
||||
self.function = function
|
||||
self.args = args
|
||||
@@ -330,7 +328,6 @@ class TypePredicate(object):
|
||||
assert value_type is not None
|
||||
self.value_arg = value_arg
|
||||
self.value_type = value_type
|
||||
self.number = None # type: int
|
||||
|
||||
def __str__(self):
|
||||
# type: () -> str
|
||||
|
||||
@@ -23,7 +23,6 @@ class Setting(object):
|
||||
def __init__(self, doc):
|
||||
# type: (str) -> None
|
||||
self.name = None # type: str # Assigned later by `extract_names()`.
|
||||
self.number = None # type: int
|
||||
self.__doc__ = doc
|
||||
# Offset of byte in settings vector containing this setting.
|
||||
self.byte_offset = None # type: int
|
||||
|
||||
Reference in New Issue
Block a user