ir3: Add reg_elems(), reg_elem_size(), and reg_size()
authorConnor Abbott <cwabbott0@gmail.com>
Thu, 25 Mar 2021 14:22:44 +0000 (15:22 +0100)
committerEmma Anholt <emma@anholt.net>
Thu, 10 Jun 2021 19:20:38 +0000 (12:20 -0700)
For working with registers in units of half-regs in the new RA.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9842>

src/freedreno/ir3/ir3.h

index 791417b..4b804b8 100644 (file)
@@ -940,6 +940,26 @@ static inline bool is_meta(struct ir3_instruction *instr)
        return (opc_cat(instr->opc) == -1);
 }
 
+static inline unsigned reg_elems(const struct ir3_register *reg)
+{
+       if (reg->flags & IR3_REG_ARRAY)
+               return reg->size;
+       else
+               return util_last_bit(reg->wrmask);
+}
+
+static inline unsigned
+reg_elem_size(const struct ir3_register *reg)
+{
+       return (reg->flags & IR3_REG_HALF) ? 1 : 2;
+}
+
+static inline unsigned
+reg_size(const struct ir3_register *reg)
+{
+       return reg_elems(reg) * reg_elem_size(reg);
+}
+
 static inline unsigned dest_regs(struct ir3_instruction *instr)
 {
        if ((instr->regs_count == 0) || is_store(instr) || is_flow(instr))