diff options
author | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-10-15 16:05:27 -0700 |
---|---|---|
committer | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-10-15 16:05:27 -0700 |
commit | 0bb7c6458d84dbe88d3002721347471bb61c1373 (patch) | |
tree | 046e80c9554094ad05043aebc9f2e6e10577b496 /radeonreg.py | |
parent | 3011de86c1f41677180bcd205fee7c379e76318d (diff) |
Diffstat (limited to 'radeonreg.py')
-rwxr-xr-x | radeonreg.py | 86 |
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 |