From 970503a0b93ac859282c2e65883dff3d473b6b32 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Sun, 8 Sep 2024 11:26:52 +0200 Subject: [PATCH] aco/assembler: support ds_append/ds_*_addtid Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_assembler.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/amd/compiler/aco_assembler.cpp b/src/amd/compiler/aco_assembler.cpp index ef80b1e9708..e7d91d3cbca 100644 --- a/src/amd/compiler/aco_assembler.cpp +++ b/src/amd/compiler/aco_assembler.cpp @@ -502,12 +502,11 @@ emit_ds_instruction(asm_context& ctx, std::vector& out, Instruction* i encoding = 0; if (!instr->definitions.empty()) encoding |= reg(ctx, instr->definitions[0], 8) << 24; - if (instr->operands.size() >= 3 && instr->operands[2].physReg() != m0) - encoding |= reg(ctx, instr->operands[2], 8) << 16; - if (instr->operands.size() >= 2 && instr->operands[1].physReg() != m0) - encoding |= reg(ctx, instr->operands[1], 8) << 8; - if (!instr->operands[0].isUndefined()) - encoding |= reg(ctx, instr->operands[0], 8); + for (unsigned i = 0; i < MIN2(instr->operands.size(), 3); i++) { + Operand& op = instr->operands[i]; + if (op.physReg() != m0 && !op.isUndefined()) + encoding |= reg(ctx, op, 8) << (8 * i); + } out.push_back(encoding); }