From b7296e11ae97c9c8d361622b1aab2c8d6922cb62 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 26 Feb 2021 17:13:25 -0600 Subject: [PATCH] intel/mi_builder: add a way to reserve a register Will be useful for GRL metakernels. Reviewed-by: Lionel Landwerlin Acked-by: Caio Oliveira Part-of: --- src/intel/common/mi_builder.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/intel/common/mi_builder.h b/src/intel/common/mi_builder.h index 7bb5dccc711..591389993ad 100644 --- a/src/intel/common/mi_builder.h +++ b/src/intel/common/mi_builder.h @@ -226,6 +226,21 @@ mi_new_gpr(struct mi_builder *b) .reg = _MI_BUILDER_GPR_BASE + gpr * 8, }; } + +static inline struct mi_value +mi_reserve_gpr(struct mi_builder *b, unsigned gpr) +{ + assert(gpr < MI_BUILDER_NUM_ALLOC_GPRS); + assert(!(b->gprs & (1 << gpr))); + assert(b->gpr_refs[gpr] == 0); + b->gprs |= (1u << gpr); + b->gpr_refs[gpr] = 128; /* Enough that we won't unref it */ + + return (struct mi_value) { + .type = MI_VALUE_TYPE_REG64, + .reg = _MI_BUILDER_GPR_BASE + gpr * 8, + }; +} #endif /* GFX_VERx10 >= 75 */ /** Take a reference to a mi_value