From cc8fec8b74b84df7e3b5c093877f899146d1f59d Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 5 Jun 2021 14:47:39 -0400 Subject: [PATCH] agx: Generate enums from Python Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_opcodes.h.py | 13 +++++++++++-- src/asahi/compiler/agx_opcodes.py | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/asahi/compiler/agx_opcodes.h.py b/src/asahi/compiler/agx_opcodes.h.py index e39221a72ec..55e5839445e 100644 --- a/src/asahi/compiler/agx_opcodes.h.py +++ b/src/asahi/compiler/agx_opcodes.h.py @@ -36,6 +36,14 @@ enum agx_opcode { AGX_NUM_OPCODES }; +% for name in enums: +enum agx_${name} { +% for k in enums[name]: + AGX_${name.upper()}_${enums[name][k].replace('.', '_').upper()} = ${k}, +% endfor +}; +% endfor + /* Runtime accessible info on each defined opcode */ <% assert(len(immediates) < 32); %> @@ -69,6 +77,7 @@ extern const struct agx_opcode_info agx_opcodes_info[AGX_NUM_OPCODES]; """ from mako.template import Template -from agx_opcodes import opcodes, immediates +from agx_opcodes import opcodes, immediates, enums -print(Template(template).render(opcodes=opcodes, immediates=immediates)) +print(Template(template).render(opcodes=opcodes, immediates=immediates, + enums=enums)) diff --git a/src/asahi/compiler/agx_opcodes.py b/src/asahi/compiler/agx_opcodes.py index 6141adbe905..ba75bd5ec7c 100644 --- a/src/asahi/compiler/agx_opcodes.py +++ b/src/asahi/compiler/agx_opcodes.py @@ -23,6 +23,7 @@ SOFTWARE. opcodes = {} immediates = {} +enums = {} class Opcode(object): def __init__(self, name, dests, srcs, imms, is_float, can_eliminate, encoding_16, encoding_32): @@ -67,6 +68,10 @@ def immediate(name, ctype = "uint32_t"): immediates[name] = imm return imm +def enum(name, value_dict): + enums[name] = value_dict + return immediate(name, "enum agx_" + name) + L = (1 << 15) _ = None