From 54fd3604ef4e41736f6e49ccf4250b6dc7bf7c81 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:12:00 -0600 Subject: [PATCH] nouveau/mme: Add support for freeing registers Part-of: --- src/nouveau/mme/mme_builder.h | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/nouveau/mme/mme_builder.h b/src/nouveau/mme/mme_builder.h index d0379602249..639654201ce 100644 --- a/src/nouveau/mme/mme_builder.h +++ b/src/nouveau/mme/mme_builder.h @@ -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,