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)