diff options
-rw-r--r-- | src/intel/genxml/gen_bits_header.py | 11 | ||||
-rw-r--r-- | src/intel/genxml/gen_pack_header.py | 15 | ||||
-rwxr-xr-x | src/intel/genxml/intel_genxml.py | 18 |
3 files changed, 24 insertions, 20 deletions
diff --git a/src/intel/genxml/gen_bits_header.py b/src/intel/genxml/gen_bits_header.py index 364fb7fd11e..f6b485e497e 100644 --- a/src/intel/genxml/gen_bits_header.py +++ b/src/intel/genxml/gen_bits_header.py @@ -255,11 +255,6 @@ class XmlParser(object): name = item.tag attrs = item.attrib if name in ('instruction', 'struct', 'register'): - if name == 'instruction' and 'engine' in attrs: - engines = set(attrs['engine'].split('|')) - if not engines & self.engines: - self.container_stack.append(None) - return self.start_container(attrs) for struct_item in item: self.process_item(struct_item) @@ -320,9 +315,9 @@ def parse_args(): def main(): pargs = parse_args() - engines = pargs.engines.split(',') + engines = set(pargs.engines.split(',')) valid_engines = [ 'render', 'blitter', 'video' ] - if set(engines) - set(valid_engines): + if engines - set(valid_engines): print("Invalid engine specified, valid engines are:\n") for e in valid_engines: print("\t%s" % e) @@ -333,8 +328,8 @@ def main(): for source in pargs.xml_sources: p = XmlParser(containers) - p.engines = set(engines) genxml = intel_genxml.GenXml(source) + genxml.filter_engines(engines) p.emit_genxml(genxml) included_symbols_list = pargs.include_symbols.split(',') diff --git a/src/intel/genxml/gen_pack_header.py b/src/intel/genxml/gen_pack_header.py index 8d49a74e824..19ff2794b56 100644 --- a/src/intel/genxml/gen_pack_header.py +++ b/src/intel/genxml/gen_pack_header.py @@ -453,13 +453,6 @@ class Parser(object): if name == "instruction": self.instruction = safe_name(attrs["name"]) self.length_bias = int(attrs["bias"]) - if "engine" in attrs: - self.instruction_engines = set(attrs["engine"].split('|')) - else: - # When an instruction doesn't have the engine specified, - # it is considered to be for all engines, so 'None' is used - # to signify that the instruction belongs to all engines. - self.instruction_engines = None elif name == "struct": self.struct = safe_name(attrs["name"]) self.structs[attrs["name"]] = 1 @@ -549,8 +542,6 @@ class Parser(object): def emit_instruction(self): name = self.instruction - if self.instruction_engines and not self.instruction_engines & self.engines: - return if not self.length is None: print('#define %-33s %6d' % @@ -640,17 +631,17 @@ def parse_args(): def main(): pargs = parse_args() - engines = pargs.engines.split(',') + engines = set(pargs.engines.split(',')) valid_engines = [ 'render', 'blitter', 'video' ] - if set(engines) - set(valid_engines): + if engines - set(valid_engines): print("Invalid engine specified, valid engines are:\n") for e in valid_engines: print("\t%s" % e) sys.exit(1) genxml = intel_genxml.GenXml(pargs.xml_source) + genxml.filter_engines(engines) p = Parser() - p.engines = set(engines) p.emit_genxml(genxml) if __name__ == '__main__': diff --git a/src/intel/genxml/intel_genxml.py b/src/intel/genxml/intel_genxml.py index 8534a07380b..cd07828beef 100755 --- a/src/intel/genxml/intel_genxml.py +++ b/src/intel/genxml/intel_genxml.py @@ -169,3 +169,21 @@ def sort_xml(xml: et.ElementTree) -> None: class GenXml(object): def __init__(self, filename): self.et = et.parse(filename) + + def filter_engines(self, engines): + changed = False + items = [] + for item in self.et.getroot(): + # When an instruction doesn't have the engine specified, + # it is considered to be for all engines. Otherwise, we + # check to see if it's tagged for the engines requested. + if item.tag == 'instruction' and 'engine' in item.attrib: + i_engines = set(item.attrib["engine"].split('|')) + if not (i_engines & engines): + # Drop this instruction because it doesn't support + # the requested engine types. + changed = True + continue + items.append(item) + if changed: + self.et.getroot()[:] = items |