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
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,