From 3ba1d230ad202dfbbed078925768ea9ada1155f3 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Fri, 21 Apr 2023 12:36:38 +0200 Subject: [PATCH] freedreno/rnn: Take into account array's variant for regs Otherwise even if array only exists in one generation the code for its registers is generated for all gens. Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/registers/gen_header.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/freedreno/registers/gen_header.py b/src/freedreno/registers/gen_header.py index 4f18460..e41618d 100644 --- a/src/freedreno/registers/gen_header.py +++ b/src/freedreno/registers/gen_header.py @@ -253,12 +253,13 @@ class Bitset(object): print() class Array(object): - def __init__(self, attrs, domain): + def __init__(self, attrs, domain, variant): if "name" in attrs: self.name = attrs["name"] else: self.name = "" self.domain = domain + self.variant = variant self.offset = int(attrs["offset"], 0) self.stride = int(attrs["stride"], 0) self.length = int(attrs["length"], 0) @@ -386,11 +387,13 @@ class Parser(object): return variant - def add_all_variants(self, reg, attrs): + def add_all_variants(self, reg, attrs, parent_variant): # TODO this should really handle *all* variants, including dealing # with open ended ranges (ie. "A2XX,A4XX-") (we have the varset # enum now to make that possible) variant = self.parse_variants(attrs) + if not variant: + variant = parent_variant if reg.name not in self.variant_regs: self.variant_regs[reg.name] = {} @@ -465,6 +468,9 @@ class Parser(object): self.parse_field(None, attrs) variant = self.parse_variants(attrs) + if not variant and self.current_array: + variant = self.current_array.variant + self.current_reg = Reg(attrs, self.prefix(variant), self.current_array, bit_size) self.current_reg.bitset = self.current_bitset @@ -472,7 +478,7 @@ class Parser(object): self.file.append(self.current_reg) if variant is not None: - self.add_all_variants(self.current_reg, attrs) + self.add_all_variants(self.current_reg, attrs, variant) def start_element(self, name, attrs): if name == "import": @@ -510,7 +516,7 @@ class Parser(object): elif name == "array": self.current_bitsize = 32 variant = self.parse_variants(attrs) - self.current_array = Array(attrs, self.prefix(variant)) + self.current_array = Array(attrs, self.prefix(variant), variant) if len(self.stack) == 1: self.file.append(self.current_array) elif name == "bitset": -- 2.7.4