From 2fc2a45c8fffff69aa941a25ee01b4c61294355c Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 16 Feb 2024 20:59:53 -0400 Subject: [PATCH] agx: fix 16-bit mem swaps don't clobber r1l Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_lower_parallel_copy.c | 3 ++- src/asahi/compiler/test/test-lower-parallel-copy.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/asahi/compiler/agx_lower_parallel_copy.c b/src/asahi/compiler/agx_lower_parallel_copy.c index c6a3667b2e9..7dcea127b7f 100644 --- a/src/asahi/compiler/agx_lower_parallel_copy.c +++ b/src/asahi/compiler/agx_lower_parallel_copy.c @@ -120,7 +120,8 @@ do_swap(agx_builder *b, const struct agx_copy *copy) assert(x.memory == y.memory); if (x.memory) { agx_index temp1 = agx_register(0, copy->src.size); - agx_index temp2 = agx_register(2, copy->src.size); + agx_index temp2 = + agx_register(agx_size_align_16(copy->src.size), copy->src.size); agx_index scratch_reg2 = agx_register(0, copy->src.size); agx_index scratch_mem2 = scratch_slot(b->shader, copy->src.size); diff --git a/src/asahi/compiler/test/test-lower-parallel-copy.cpp b/src/asahi/compiler/test/test-lower-parallel-copy.cpp index d8106ab924d..8f2f764e8da 100644 --- a/src/asahi/compiler/test/test-lower-parallel-copy.cpp +++ b/src/asahi/compiler/test/test-lower-parallel-copy.cpp @@ -302,6 +302,7 @@ TEST_F(LowerParallelCopy, StackCopies) scratch_vec2.size = AGX_SIZE_16; temp1.size = AGX_SIZE_16; temp2.size = AGX_SIZE_16; + temp2.value = 1; agx_mov_to(b, scratch_vec2, spilled_gpr_vec2); agx_mov_to(b, temp1, agx_memory_register(807, AGX_SIZE_16));