From: Alyssa Rosenzweig Date: Tue, 28 Apr 2020 21:43:56 +0000 (-0400) Subject: pan/mdg: Move condense_writemask to disasm X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=95664b177f4effeae9e3e3cc1cc97629a0d1db6d;p=mesa.git pan/mdg: Move condense_writemask to disasm The compiler should *never* use this. Packing should be 1 way. Signed-off-by: Alyssa Rosenzweig Part-of: --- diff --git a/src/panfrost/midgard/disassemble.c b/src/panfrost/midgard/disassemble.c index 93e11667749..8c7f718674f 100644 --- a/src/panfrost/midgard/disassemble.c +++ b/src/panfrost/midgard/disassemble.c @@ -49,6 +49,28 @@ static bool is_instruction_int = false; static struct midgard_disasm_stats midg_stats; +/* Transform an expanded writemask (duplicated 8-bit format) into its condensed + * form (one bit per component) */ + +static inline unsigned +condense_writemask(unsigned expanded_mask, + unsigned bits_per_component) +{ + if (bits_per_component == 8) + unreachable("XXX TODO: sort out how 8-bit constant encoding works"); + + unsigned slots_per_component = bits_per_component / 16; + unsigned max_comp = (16 * 8) / bits_per_component; + unsigned condensed_mask = 0; + + for (unsigned i = 0; i < max_comp; i++) { + if (expanded_mask & (1 << (i * slots_per_component))) + condensed_mask |= (1 << i); + } + + return condensed_mask; +} + static void print_alu_opcode(FILE *fp, midgard_alu_op op) { diff --git a/src/panfrost/midgard/helpers.h b/src/panfrost/midgard/helpers.h index 7aa2e776008..658c43b785d 100644 --- a/src/panfrost/midgard/helpers.h +++ b/src/panfrost/midgard/helpers.h @@ -253,28 +253,6 @@ expand_writemask(unsigned mask, unsigned channels) return o; } -/* Tansform an expanded writemask (duplicated 8-bit format) into its condensed - * form (one bit per component) */ - -static inline unsigned -condense_writemask(unsigned expanded_mask, - unsigned bits_per_component) -{ - if (bits_per_component == 8) - unreachable("XXX TODO: sort out how 8-bit constant encoding works"); - - unsigned slots_per_component = bits_per_component / 16; - unsigned max_comp = (16 * 8) / bits_per_component; - unsigned condensed_mask = 0; - - for (unsigned i = 0; i < max_comp; i++) { - if (expanded_mask & (1 << (i * slots_per_component))) - condensed_mask |= (1 << i); - } - - return condensed_mask; -} - /* Coerce structs to integer */ static inline unsigned