freedreno/rnn: Fix reg names for regs with variants
authorRob Clark <robdclark@chromium.org>
Mon, 20 Mar 2023 21:54:16 +0000 (14:54 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 23 Mar 2023 17:54:57 +0000 (17:54 +0000)
Fixes reg names with headergen2, so that if we have separate a6xx and
a7xx variants for a register we get REG_A6XX_foo and REG_A7XX_foo
instead of both being REG_A6XX_foo.  Otherwise generated headers for the
kernel wouldn't compile.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22035>

src/freedreno/rnn/rnn.c

index d82d2a5..1533d45 100644 (file)
@@ -1259,8 +1259,18 @@ static void prepdelem(struct rnndb *db, struct rnndelem *elem, char *prefix, str
                elem->length = 1;
                elem->name = 0;
        }
-       if (elem->name)
-               elem->fullname = catstr(prefix, elem->name);
+       if (elem->name) {
+               if (elem->varinfo.variantsstr && !strstr(elem->varinfo.variantsstr, "-")) {
+                       /* Special hack for headergen2 to deal with variant regs (like a6xx vs
+                        * a7xx).. gen_header.py handles this differently by generating C++
+                        * template based reg builder to handle variants.  But for now we still
+                        * need something that can be used for kernel headers.
+                        */
+                       elem->fullname = catstr(elem->varinfo.variantsstr, elem->name);
+               } else {
+                       elem->fullname = catstr(prefix, elem->name);
+               }
+       }
        prepvarinfo (db, elem->fullname?elem->fullname:prefix, &elem->varinfo, parvi);
        if (elem->varinfo.dead)
                return;