summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>2020-05-28 14:38:44 -0400
committerMarge Bot <eric+marge@anholt.net>2020-05-29 20:34:55 +0000
commitbd6ff4f7e1845d380c366d4f643725fe76a101f5 (patch)
tree4834a947412a0f883189235a27a0cc948e05f58e
parente4791d2bf85045f59451dcbc0e166b3c71ec3048 (diff)
pan/bi: Pack unconditional branch
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5260>
-rw-r--r--src/panfrost/bifrost/bi_pack.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c
index e852ae7f4a5..85c48ba1f08 100644
--- a/src/panfrost/bifrost/bi_pack.c
+++ b/src/panfrost/bifrost/bi_pack.c
@@ -1620,7 +1620,7 @@ bi_pack_add_imath(bi_instruction *ins, bi_registers *regs)
}
static unsigned
-bi_pack_add_branch(bi_instruction *ins, bi_registers *regs)
+bi_pack_add_branch_cond(bi_instruction *ins, bi_registers *regs)
{
assert(ins->cond == BI_COND_EQ);
assert(ins->src[1] == BIR_INDEX_ZERO);
@@ -1654,6 +1654,35 @@ bi_pack_add_branch(bi_instruction *ins, bi_registers *regs)
}
static unsigned
+bi_pack_add_branch_uncond(bi_instruction *ins, bi_registers *regs)
+{
+ struct bifrost_branch pack = {
+ /* It's unclear what these bits actually mean */
+ .src0 = BIFROST_SRC_CONST_LO,
+ .src1 = BIFROST_SRC_PASS_FMA,
+
+ /* Offset, see above */
+ .src2 = BIFROST_SRC_CONST_HI,
+
+ /* All ones in fact */
+ .cond = (BR_ALWAYS & 0x7),
+ .size = (BR_ALWAYS >> 3),
+ .op = BIFROST_ADD_OP_BRANCH
+ };
+
+ RETURN_PACKED(pack);
+}
+
+static unsigned
+bi_pack_add_branch(bi_instruction *ins, bi_registers *regs)
+{
+ if (ins->cond == BI_COND_ALWAYS)
+ return bi_pack_add_branch_uncond(ins, regs);
+ else
+ return bi_pack_add_branch_cond(ins, regs);
+}
+
+static unsigned
bi_pack_add(bi_clause *clause, bi_bundle bundle, bi_registers *regs, gl_shader_stage stage)
{
if (!bundle.add)