summaryrefslogtreecommitdiff
path: root/radeonreg.py
diff options
context:
space:
mode:
authorCorbin Simpson <MostAwesomeDude@gmail.com>2009-10-15 16:05:27 -0700
committerCorbin Simpson <MostAwesomeDude@gmail.com>2009-10-15 16:05:27 -0700
commit0bb7c6458d84dbe88d3002721347471bb61c1373 (patch)
tree046e80c9554094ad05043aebc9f2e6e10577b496 /radeonreg.py
parent3011de86c1f41677180bcd205fee7c379e76318d (diff)
Kill EnumEntry and force ordering upon the emitted enum values.HEADmaster
Diffstat (limited to 'radeonreg.py')
-rwxr-xr-xradeonreg.py86
1 files changed, 32 insertions, 54 deletions
diff --git a/radeonreg.py b/radeonreg.py
index 36fefd4..00bff30 100755
--- a/radeonreg.py
+++ b/radeonreg.py
@@ -59,42 +59,14 @@ class RadeonField(object):
def __ne__(self, other):
return not self == other
-class EnumEntry(object):
-
- def __init__(self, val, name, desc):
- self.val = val
- self.name = name
- self.desc = desc
-
- def __eq__(self, other):
- if (not isinstance(other, EnumEntry)): return False
-
- if self.val == other.val and \
- self.name == other.name and \
- self.desc == other.desc: return True
- return False
-
- def __ne__(self, other):
- return not self == other
-
class RadeonEnum(object):
def __init__(self):
- self.entries = []
+ self.entries = set()
self.refs = 0
-
- def add(self, val, name, desc):
- self.entries.append(EnumEntry(val, name, desc))
def __eq__(self, other):
- if (not isinstance(other, RadeonEnum)): return False
-
- if len(self.entries) != len(other.entries): return False
-
- for i in xrange(len(self.entries)):
- if self.entries[i] != other.entries[i]: return False
-
- return True
+ return self.entries == other.entries
def __ne__(self, other):
return not self == other
@@ -131,10 +103,12 @@ def ExtractEnum(s):
desc = StripSpaces(entry[2].replace('\n', ' '))
if reserved_regex.search(desc): continue
name = StripUnders(enum_ename.match(desc.replace(' ', '_')).group(1).upper())
- enum.add(val, name, desc)
+ enum.entries.add((val, name, desc))
- if len(enum.entries) == 0: enum = None
- return [d, enum]
+ if not enum.entries:
+ enum = None
+
+ return (d, enum)
subs = [re.compile('^.+ 2008 Advanced Micro Devices, Inc.$'),
re.compile('^Proprietary *[0-9]*$'),
@@ -207,7 +181,8 @@ def FormatPDFDump(pdf):
e = ExtractEnum(fdesc)
cfield.desc = e[0]
- if e[1] != None: cfield.enum = AddEnum(e[1])
+ if e[1]:
+ cfield.enum = AddEnum(e[1])
if len(creg.fields) > 0:
if creg.fields[0].low == 0 and creg.fields[0].high == 31:
@@ -234,6 +209,27 @@ def CompareRegs(regs1, regs2):
return [regs_both, regs_a, regs_b]
+def CreateEnumChildren(root, enum):
+ for (value, name, description) in sorted(enum.entries):
+ if not name:
+ continue
+ value_tag = ElementTree.SubElement(root, "value")
+ value_tag.attrib["name"] = name
+ value_tag.attrib["value"] = str(value)
+ ElementTree.SubElement(value_tag, "doc").text = description
+
+def CreateEnumElement(root, enum, index):
+ if not enum.entries:
+ return
+
+ enum_tag = ElementTree.Element("enum")
+ enum_tag.attrib["name"] = "ENUM%d" % index
+
+ CreateEnumChildren(enum_tag, enum)
+
+ if enum_tag:
+ root.append(enum_tag)
+
def CreateXML(handle, regs, variants):
comment = ElementTree.Comment(
"""
@@ -256,18 +252,7 @@ before attempting to read it.
for i, enum in enumerate(enums):
if enum.refs > 1:
- enum_tag = ElementTree.Element("enum")
- enum_tag.attrib["name"] = "ENUM%d" % i
- for entry in enum.entries:
- if not entry.name:
- continue
- value = ElementTree.SubElement(enum_tag, "value")
- value.attrib["name"] = entry.name
- value.attrib["value"] = str(entry.val)
- doc = ElementTree.SubElement(value, "doc")
- doc.text = entry.desc
- if enum_tag:
- database.append(enum_tag)
+ CreateEnumElement(database, enum, i)
for (group, name, prepend) in regs:
group_tag = ElementTree.SubElement(database, "group", name=name)
@@ -296,14 +281,7 @@ before attempting to read it.
ElementTree.SubElement(reg32, "doc").text = field.desc
if field.enum:
if enums[field.enum].refs == 1:
- for entry in enums[field.enum].entries:
- if not entry.name:
- continue
- value = ElementTree.SubElement(bitfield, "value")
- value.attrib["name"] = entry.name
- value.attrib["value"] = str(entry.val)
- doc = ElementTree.SubElement(value, "doc")
- doc.text = entry.desc
+ CreateEnumChildren(bitfield, enums[field.enum])
else:
use_enum = ElementTree.SubElement(bitfield, "use-enum")
use_enum.attrib["ref"] = "ENUM%d" % field.enum