From bc9fca2fb14ee46a839ce6e1d66fa895c014c92e Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick Date: Thu, 13 Feb 2025 21:09:05 -0800 Subject: [PATCH] lima: ppir: add codegen for mov and mul on combiner unit Combiner unit support scalar by vector multiplication and scalar mov. Implement it for codegen Reviewed-by: Erico Nunes Signed-off-by: Vasily Khoruzhick Part-of: --- src/gallium/drivers/lima/ir/pp/codegen.c | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/gallium/drivers/lima/ir/pp/codegen.c b/src/gallium/drivers/lima/ir/pp/codegen.c index 4ce7ed6b9b0..3d6db737915 100644 --- a/src/gallium/drivers/lima/ir/pp/codegen.c +++ b/src/gallium/drivers/lima/ir/pp/codegen.c @@ -547,6 +547,7 @@ static void ppir_codegen_encode_combine(ppir_node *node, void *code) case ppir_op_sqrt: case ppir_op_sin: case ppir_op_cos: + case ppir_op_mov: { f->scalar.dest_vec = false; f->scalar.src_vec = false; @@ -584,11 +585,37 @@ static void ppir_codegen_encode_combine(ppir_node *node, void *code) case ppir_op_cos: f->scalar.op = ppir_codegen_combine_scalar_op_cos; break; + case ppir_op_mov: + f->scalar.op = ppir_codegen_combine_scalar_op_mov; + break; default: break; } break; } + case ppir_op_mul: + { + f->scalar.dest_vec = true; + f->scalar.src_vec = true; + + ppir_dest *dest = &alu->dest; + int index = ppir_target_get_dest_reg_index(dest); + int dest_shift = index & 0x3; + + f->vector.dest = index >> 2; + f->vector.mask = dest->write_mask << dest_shift; + + ppir_src *src = alu->src; + f->scalar.arg0_src = get_scl_reg_index(src, 0); + f->scalar.arg0_absolute = src->absolute; + f->scalar.arg0_negate = src->negate; + + src = alu->src + 1; + index = ppir_target_get_src_reg_index(src); + f->vector.arg1_source = index >> 2; + f->vector.arg1_swizzle = encode_swizzle(src->swizzle, index & 0x3, dest_shift); + break; + } default: break; }