[Mesa-dev] [PATCH 02/10] panfrost/midgard/disasm: Catch mask errors

Alyssa Rosenzweig alyssa at rosenzweig.io
Wed May 1 03:42:02 UTC 2019


We silently ignored certain bits of the mask, which causes issues when
disassembly 8/64-bit ops.

Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>
---
 src/gallium/drivers/panfrost/midgard/disassemble.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/gallium/drivers/panfrost/midgard/disassemble.c b/src/gallium/drivers/panfrost/midgard/disassemble.c
index ba1ab2bca5b..7b71a9937ff 100644
--- a/src/gallium/drivers/panfrost/midgard/disassemble.c
+++ b/src/gallium/drivers/panfrost/midgard/disassemble.c
@@ -260,10 +260,21 @@ print_vector_field(const char *name, uint16_t *words, uint16_t reg_word,
                         mask = alu_field->mask >> 4;
                 }
         } else {
+                /* For full 32-bit, every other bit is duplicated, so we only
+                 * pick every other to find the effective mask */
+
                 mask = alu_field->mask & 1;
                 mask |= (alu_field->mask & 4) >> 1;
                 mask |= (alu_field->mask & 16) >> 2;
                 mask |= (alu_field->mask & 64) >> 3;
+
+                /* ... but verify! */
+
+                unsigned checked = alu_field->mask & 0x55;
+                unsigned opposite = alu_field->mask & 0xAA;
+
+                if ((checked << 1) != opposite)
+                        printf("/* %X */ ", alu_field->mask);
         }
 
         out_half = half;
-- 
2.20.1



More information about the mesa-dev mailing list