freedreno/isa: generate marcos used for printf(..)

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>
This commit is contained in:
Christian Gmeiner 2021-05-28 10:00:36 +02:00 committed by Marge Bot
parent a6b82d1c8c
commit 1a8048954d
2 changed files with 25 additions and 0 deletions

View 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)
{

View 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)