From 142ba9fea6f559fc6a218b8d0d5b712c52fa58bf Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 25 Feb 2022 11:51:56 -0500 Subject: [PATCH] pan/va: Allow forcing enums for 1-bit modifiers Ocassionally the 0 value has a meaningful value that's not meaningfully default, so we want an enum to encode both possible states. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/valhall/disasm.py | 8 ++++---- src/panfrost/bifrost/valhall/valhall.py | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/panfrost/bifrost/valhall/disasm.py b/src/panfrost/bifrost/valhall/disasm.py index 99e8c9b5dee..6d0cda9cc5f 100644 --- a/src/panfrost/bifrost/valhall/disasm.py +++ b/src/panfrost/bifrost/valhall/disasm.py @@ -134,11 +134,11 @@ va_disasm_instr(FILE *fp, uint64_t instr) % endif fputs("${op.name}", fp); % for mod in op.modifiers: -% if mod.name not in ["left", "staging_register_count"]: -% if mod.size == 1: - if (instr & BIT(${mod.start})) fputs(".${mod.name}", fp); -% else: +% if mod.name not in ["left", "staging_register_count", "staging_register_write_count"]: +% if mod.is_enum: fputs(valhall_${safe_name(mod.name)}[(instr >> ${mod.start}) & ${hex((1 << mod.size) - 1)}], fp); +% else: + if (instr & BIT(${mod.start})) fputs(".${mod.name}", fp); % endif % endif % endfor diff --git a/src/panfrost/bifrost/valhall/valhall.py b/src/panfrost/bifrost/valhall/valhall.py index 2e740dc8cd8..8c792404270 100644 --- a/src/panfrost/bifrost/valhall/valhall.py +++ b/src/panfrost/bifrost/valhall/valhall.py @@ -73,17 +73,18 @@ def build_enum(el): return Enum(el.attrib['name'], values) class Modifier: - def __init__(self, name, start, size, implied = False): + def __init__(self, name, start, size, implied = False, force_enum = None): self.name = name self.start = start self.size = size self.implied = implied + self.is_enum = (force_enum is not None) or size > 1 - if size == 1: + if not self.is_enum: self.bare_values = ['', name] self.default = 0 else: - enum = enums[name] + enum = enums[force_enum or name] self.bare_values = [x.value for x in enum.values] defaults = [x for x in enum.values if x.default] assert(len(defaults) <= 1)