From b1934057cb7486db84e787c81375a2bdd9f19cfa Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 5 Sep 2024 12:08:16 +0200 Subject: [PATCH] pan/cs: Allow sparse register set passed to loads/stores When it comes to copying stuff around, it becomes handy to be able to have a discontiguous range of register to load to/store from so we don't have to move stuff around to make things contiguous in the register file. Allow that by making register count the last bit in the mask rather than counting bits. Signed-off-by: Boris Brezillon Reviewed-by: Rebecca Mckeever Reviewed-by: Mary Guillemard Reviewed-by: Lars-Ivar Hesselberg Simonsen Reviewed-by: John Anthony Acked-by: Erik Faye-Lund Part-of: --- src/panfrost/lib/genxml/cs_builder.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/panfrost/lib/genxml/cs_builder.h b/src/panfrost/lib/genxml/cs_builder.h index 594048ba9a3..fba7d939431 100644 --- a/src/panfrost/lib/genxml/cs_builder.h +++ b/src/panfrost/lib/genxml/cs_builder.h @@ -935,7 +935,7 @@ cs_load_to(struct cs_builder *b, struct cs_index dest, struct cs_index address, unsigned mask, int offset) { cs_emit(b, LOAD_MULTIPLE, I) { - I.base_register = cs_to_reg_tuple(dest, util_bitcount(mask)); + I.base_register = cs_to_reg_tuple(dest, util_last_bit(mask)); I.address = cs_to_reg64(address); I.mask = mask; I.offset = offset; @@ -961,7 +961,7 @@ cs_store(struct cs_builder *b, struct cs_index data, struct cs_index address, unsigned mask, int offset) { cs_emit(b, STORE_MULTIPLE, I) { - I.base_register = cs_to_reg_tuple(data, util_bitcount(mask)); + I.base_register = cs_to_reg_tuple(data, util_last_bit(mask)); I.address = cs_to_reg64(address); I.mask = mask; I.offset = offset;