From 13ee87c8b99e045d8610bf801f2f15544ca4f430 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 29 Jul 2019 09:15:32 -0700 Subject: pan/midgard: Document branch combination LUT This took way longer to figure out than it should have.. Signed-off-by: Alyssa Rosenzweig --- src/panfrost/midgard/midgard.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/panfrost/midgard/midgard.h') diff --git a/src/panfrost/midgard/midgard.h b/src/panfrost/midgard/midgard.h index d0e15ce86d1..6473809d10a 100644 --- a/src/panfrost/midgard/midgard.h +++ b/src/panfrost/midgard/midgard.h @@ -359,6 +359,19 @@ __attribute__((__packed__)) unsigned dest_tag : 4; /* tag of branch destination */ unsigned unknown : 2; signed offset : 23; + + /* Extended branches permit inputting up to 4 conditions loaded into + * r31 (two in r31.w and two in r31.x). In the most general case, we + * specify a function f(A, B, C, D) mapping 4 1-bit conditions to a + * single 1-bit branch criteria. Note that the domain of f has 2^(2^4) + * elements, each mapping to 1-bit of output, so we can trivially + * construct a Godel numbering of f as a (2^4)=16-bit integer. This + * 16-bit integer serves as a lookup table to compute f, subject to + * some swaps for ordering. + * + * Interesting, the standard 2-bit condition codes are also a LUT with + * the same format (2^1-bit), but it's usually easier to use enums. */ + unsigned cond : 16; } midgard_branch_extended; -- cgit v1.2.3