From 2e1ba82060bf3c042cc0cd7ab77c4a3e339b1fcf Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 19 Jun 2021 14:33:12 -0400 Subject: [PATCH] agx: Count write registers, not components Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_register_allocate.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/asahi/compiler/agx_register_allocate.c b/src/asahi/compiler/agx_register_allocate.c index 858dbd8..f110af3 100644 --- a/src/asahi/compiler/agx_register_allocate.c +++ b/src/asahi/compiler/agx_register_allocate.c @@ -30,20 +30,22 @@ * TODO: Handle phi nodes. */ -/** Returns number of components written by an instruction */ +/** Returns number of registers written by an instruction */ static unsigned -agx_write_components(agx_instr *I) +agx_write_registers(agx_instr *I, unsigned d) { + unsigned size = I->dest[d].size == AGX_SIZE_32 ? 2 : 1; + switch (I->op) { case AGX_OPCODE_LD_VARY: case AGX_OPCODE_DEVICE_LOAD: case AGX_OPCODE_TEXTURE_SAMPLE: case AGX_OPCODE_LD_TILE: - return 4; + return 8; case AGX_OPCODE_LD_VARY_FLAT: - return 3; + return 6; default: - return 1; + return size; } } @@ -107,7 +109,7 @@ agx_ra(agx_context *ctx) unsigned size = ins->dest[d].size == AGX_SIZE_32 ? 2 : 1; if (size == 2 && usage & 1) usage++; unsigned v = usage; - usage += agx_write_components(ins) * size; + usage += agx_write_registers(ins, d); alloc[ins->dest[d].value] = v; ins->dest[d] = agx_replace_index(ins->dest[d], agx_register(v, ins->dest[d].size)); } -- 2.7.4