agx: Fix uadd_sat packing
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Thu, 10 Aug 2023 20:21:19 +0000 (16:21 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 11 Aug 2023 20:31:28 +0000 (20:31 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24635>

src/asahi/compiler/agx_pack.c

index 6c8c545..68c1f9e 100644 (file)
@@ -431,7 +431,8 @@ agx_pack_alu(struct util_dynarray *emission, agx_instr *I)
          unsigned fmod_offset = is_16 ? 9 : 10;
          src_short |= (fmod << fmod_offset);
       } else if (I->op == AGX_OPCODE_IMAD || I->op == AGX_OPCODE_IADD) {
-         bool zext = I->src[s].abs;
+         /* Force unsigned for immediates so uadd_sat works properly */
+         bool zext = I->src[s].abs || I->src[s].type == AGX_INDEX_IMMEDIATE;
          bool extends = I->src[s].size < AGX_SIZE_64;
 
          unsigned sxt = (extends && !zext) ? (1 << 10) : 0;