From 493e8c4b5034130ce377062f5ad8fea39d126496 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Sat, 24 Dec 2022 01:40:30 -0800 Subject: [PATCH] intel/genxml: Add filter_engines() to GenXml class Signed-off-by: Jordan Justen Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/genxml/gen_bits_header.py | 11 +++-------- src/intel/genxml/gen_pack_header.py | 15 +++------------ 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 364fb7f..f6b485e 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 8d49a74..19ff279 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 8534a07..cd07828 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 -- 2.7.4