pan/bi: Add special indices
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 3 Mar 2020 12:45:33 +0000 (07:45 -0500)
committerMarge Bot <eric+marge@anholt.net>
Thu, 5 Mar 2020 14:35:38 +0000 (14:35 +0000)
For fixed registers, uniforms, and constants, which bypass the usual SSA
mechanism to map well to the ISA.

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

src/panfrost/bifrost/compiler.h

index faf83b96ac32fa45b229ae548e5db3d4ad6eee4d..12a30dc9782e142dd3e17c4b5edb580eee098c8c 100644 (file)
@@ -202,6 +202,25 @@ typedef struct {
 #define BIR_NO_ARG (0)
 #define BIR_IS_REG (1)
 
+/* If high bits are set, instead of SSA/registers, we have specials indexed by
+ * the low bits if necessary.
+ *
+ *  Fixed register: do not allocate register, do not collect $200.
+ *  Uniform: access a uniform register given by low bits.
+ *  Constant: access the specified constant 
+ *  Zero: special cased to avoid wasting a constant
+ */
+
+#define BIR_INDEX_REGISTER (1 << 31)
+#define BIR_INDEX_UNIFORM  (1 << 30)
+#define BIR_INDEX_CONSTANT (1 << 29)
+#define BIR_INDEX_ZERO     (1 << 28)
+
+/* Keep me synced please so we can check src & BIR_SPECIAL */
+
+#define BIR_SPECIAL        ((BIR_INDEX_REGISTER | BIR_INDEX_UNIFORM) | \
+        (BIR_INDEX_CONSTANT | BIR_INDEX_ZERO)
+
 static inline unsigned
 bir_ssa_index(nir_ssa_def *ssa)
 {