diff --git a/src/panfrost/genxml/cs_builder.h b/src/panfrost/genxml/cs_builder.h index 3ffdd0bb10f..a324307b985 100644 --- a/src/panfrost/genxml/cs_builder.h +++ b/src/panfrost/genxml/cs_builder.h @@ -1686,6 +1686,19 @@ cs_umin32(struct cs_builder *b, struct cs_index dest, struct cs_index src1, } } +static inline void +cs_move_reg32(struct cs_builder *b, struct cs_index dest, struct cs_index src) +{ +#if PAN_ARCH >= 11 + cs_emit(b, MOVE_REG32, I) { + I.destination = cs_dst32(b, dest); + I.source = cs_src32(b, src); + } +#else + cs_add32(b, dest, src, 0); +#endif +} + #if PAN_ARCH >= 11 static inline void cs_and32(struct cs_builder *b, struct cs_index dest, struct cs_index src1, @@ -1751,15 +1764,6 @@ cs_bit_clear32(struct cs_builder *b, struct cs_index dest, struct cs_index src1, } } -static inline void -cs_move_reg32(struct cs_builder *b, struct cs_index dest, struct cs_index src) -{ - cs_emit(b, MOVE_REG32, I) { - I.destination = cs_dst32(b, dest); - I.source = cs_src32(b, src); - } -} - static inline void cs_set_state(struct cs_builder *b, enum mali_cs_set_state_type state, struct cs_index src) diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 76d1b48708d..387dd940eeb 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -2630,8 +2630,8 @@ panvk_cmd_draw_indirect(struct panvk_cmd_buffer *cmdbuf, /* Emulated immediate multiply: we walk the bits in * base_instance, and accumulate (stride << bit_pos) if the bit * is present. This is sub-optimal, but it's simple :-). */ - cs_add32(b, multiplicand, - cs_sr_reg32(b, IDVS, INSTANCE_OFFSET), 0); + cs_move_reg32(b, multiplicand, + cs_sr_reg32(b, IDVS, INSTANCE_OFFSET)); /* Flush the loads here so that we don't get automatic flushes * over and over again due to the divergent nature of the if/else