summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Justen <jordan.l.justen@intel.com>2022-12-24 01:40:30 -0800
committerJordan Justen <jordan.l.justen@intel.com>2023-08-07 14:58:57 -0700
commit69f0e083a0ddb85d62339de8faf4d5153c0b463c (patch)
treedd722b66a251bdb3c7c933661998d19d5b3777f7
parentf1d7c6d14e16538bed373f2997d44a376efb85a8 (diff)
intel/genxml: Add filter_engines() to GenXml classadd-intel_genxml-module
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-rw-r--r--src/intel/genxml/gen_bits_header.py11
-rw-r--r--src/intel/genxml/gen_pack_header.py15
-rwxr-xr-xsrc/intel/genxml/intel_genxml.py18
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