freedreno/isa: generate marcos used for printf(..)
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Fri, 28 May 2021 08:00:36 +0000 (10:00 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 21 Sep 2021 20:25:31 +0000 (20:25 +0000)
Generate correct BITSET_FORMAT and BITSET_VALUE macros based
on the maximum needed ISA bits.

Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11321>

src/freedreno/isa/decode.py
src/freedreno/isa/isa.py

index 6bcc48b..15580b2 100644 (file)
@@ -226,6 +226,9 @@ typedef struct {
 } bitmask_t;
 
 
+#define BITSET_FORMAT ${isa.format()}
+#define BITSET_VALUE(v) ${isa.value()}
+
 static inline uint64_t
 bitmask_to_uint64_t(bitmask_t mask)
 {
index 87e0c6b..8f5dfe0 100644 (file)
@@ -492,3 +492,25 @@ class ISA(object):
         # TODO we should probably be able to look at the contexts where
         # an expression is evaluated and verify that it doesn't have any
         # {VARNAME} references that would be unresolved at evaluation time
+
+    def format(self):
+        ''' Generate format string used by printf(..) and friends '''
+        parts = []
+        words = self.bitsize / 32
+
+        for i in range(int(words)):
+            parts.append('%08x')
+
+        fmt = ''.join(parts)
+
+        return f"\"{fmt[1:]}\""
+
+    def value(self):
+        ''' Generate format values used by printf(..) and friends '''
+        parts = []
+        words = self.bitsize / 32
+
+        for i in range(int(words) - 1, -1, -1):
+            parts.append('v[' + str(i) + ']')
+
+        return ', '.join(parts)