diff --git a/src/freedreno/isa/decode.py b/src/freedreno/isa/decode.py index 01a3e4eaf8b..02e1f1cb134 100644 --- a/src/freedreno/isa/decode.py +++ b/src/freedreno/isa/decode.py @@ -216,6 +216,7 @@ header = """\ #ifndef _${guard}_ #define _${guard}_ +#include #include typedef struct { @@ -223,6 +224,23 @@ typedef struct { } bitmask_t; +static inline uint64_t +bitmask_to_uint64_t(bitmask_t mask) +{ + return ((uint64_t)mask.bitset[1] << 32) | mask.bitset[0]; +} + +static inline bitmask_t +uint64_t_to_bitmask(uint64_t val) +{ + bitmask_t mask = { + .bitset[0] = val & 0xffffffff, + .bitset[1] = (val >> 32) & 0xffffffff, + }; + + return mask; +} + #endif /* _${guard}_ */ """ diff --git a/src/freedreno/isa/encode.py b/src/freedreno/isa/encode.py index 3ece9e0ff0b..4939980a959 100644 --- a/src/freedreno/isa/encode.py +++ b/src/freedreno/isa/encode.py @@ -339,6 +339,23 @@ typedef struct { BITSET_WORD bitset[BITSET_WORDS(${isa.bitsize})]; } bitmask_t; +static inline uint64_t +bitmask_to_uint64_t(bitmask_t mask) +{ + return ((uint64_t)mask.bitset[1] << 32) | mask.bitset[0]; +} + +static inline bitmask_t +uint64_t_to_bitmask(uint64_t val) +{ + bitmask_t mask = { + .bitset[0] = val & 0xffffffff, + .bitset[1] = (val >> 32) & 0xffffffff, + }; + + return mask; +} + /** * Opaque type from the PoV of generated code, but allows state to be passed * thru to the hand written helpers used by the generated code.