agx: Add agx_ushr helper
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 24 Jul 2021 21:23:42 +0000 (17:23 -0400)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 24 Jul 2021 21:23:42 +0000 (17:23 -0400)
Syntax sugar for the underlying bitfield manipulation instruction.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12053>

src/asahi/compiler/agx_builder.h.py
src/asahi/compiler/agx_compile.c

index f8591ca..1314640 100644 (file)
@@ -157,6 +157,20 @@ agx_push_exec(agx_builder *b, unsigned n)
    return agx_if_fcmp(b, agx_zero(), agx_zero(), n, AGX_FCOND_EQ, false);
 }
 
+static inline agx_instr *
+agx_ushr_to(agx_builder *b, agx_index dst, agx_index s0, agx_index s1)
+{
+    return agx_bfeil_to(b, dst, agx_zero(), s0, s1, 0);
+}
+
+static inline agx_index
+agx_ushr(agx_builder *b, agx_index s0, agx_index s1)
+{
+    agx_index tmp = agx_temp(b->shader, s0.size);
+    agx_ushr_to(b, tmp, s0, s1);
+    return tmp;
+}
+
 #endif
 """
 
index f956326..43912a2 100644 (file)
@@ -542,7 +542,7 @@ agx_emit_alu(agx_builder *b, nir_alu_instr *instr)
    case nir_op_imul: return agx_imad_to(b, dst, s0, s1, agx_zero(), 0);
 
    case nir_op_ishl: return agx_bfi_to(b, dst, agx_zero(), s0, s1, 0);
-   case nir_op_ushr: return agx_bfeil_to(b, dst, agx_zero(), s0, s1, 0);
+   case nir_op_ushr: return agx_ushr_to(b, dst, s0, s1);
    case nir_op_ishr: return agx_asr_to(b, dst, s0, s1);
 
    case nir_op_bcsel: