nouveau/mme: Add support for freeing registers
authorFaith Ekstrand <faith.ekstrand@collabora.com>
Tue, 31 Jan 2023 02:12:00 +0000 (20:12 -0600)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:32:00 +0000 (21:32 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/mme/mme_builder.h

index d037960..6396542 100644 (file)
@@ -178,7 +178,15 @@ mme_imm64(uint64_t imm)
 static inline uint8_t
 __mme_alloc_reg(struct mme_builder *b)
 {
-   return b->reg_alloc++;
+   uint8_t reg = ffs(~b->reg_alloc) - 1;
+   b->reg_alloc |= (1u << reg);
+   return reg;
+}
+
+static inline void
+__mme_free_reg(struct mme_builder *b, uint8_t reg)
+{
+   b->reg_alloc &= ~(1u << reg);
 }
 
 static inline struct mme_value
@@ -191,6 +199,13 @@ mme_alloc_reg(struct mme_builder *b)
    return val;
 }
 
+static inline void
+mme_free_reg(struct mme_builder *b, struct mme_value val)
+{
+   assert(val.type == MME_VALUE_TYPE_REG);
+   __mme_free_reg(b, val.reg);
+}
+
 static inline struct mme_value
 mme_tu104_alu(struct mme_builder *b,
               enum mme_tu104_alu_op op,