diff --git a/src/freedreno/isa/decode.py b/src/freedreno/isa/decode.py index 6bcc48bafc9..15580b25e42 100644 --- a/src/freedreno/isa/decode.py +++ b/src/freedreno/isa/decode.py @@ -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) { diff --git a/src/freedreno/isa/isa.py b/src/freedreno/isa/isa.py index 87e0c6badaf..8f5dfe07dcf 100644 --- a/src/freedreno/isa/isa.py +++ b/src/freedreno/isa/isa.py @@ -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)