| #!/usr/bin/env python3 |
| # |
| # Copyright © 2024 Igalia S.L. |
| # SPDX-License-Identifier: MIT |
| |
| template = """/* |
| * Copyright © 2024 Igalia S.L. |
| * SPDX-License-Identifier: MIT |
| */ |
| |
| #pragma once |
| |
| #include "util/macros.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| % for name, enum in enums.items(): |
| enum PACKED ${prefix}_${name} { |
| % for k, v in enum.items(): |
| % if v: |
| ${k} = ${v}, |
| % else: |
| ${k}, |
| %endif |
| % endfor |
| }; |
| |
| % endfor |
| |
| #ifdef __cplusplus |
| } /* extern C */ |
| #endif |
| """ |
| |
| import argparse |
| import sys, os |
| sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../compiler/isaspec") |
| |
| from mako.template import Template |
| from isa import ISA |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('--xml', required=True, type=str, action="store", |
| help='source isaspec xml file') |
| parser.add_argument('--output', required=True, type=str, action="store", |
| help='output C header file') |
| args = parser.parse_args() |
| |
| isa = ISA(args.xml) |
| prefix = 'isa' |
| enums = {} |
| |
| for name, enum in isa.enums.items(): |
| name = name.replace('#', '') |
| e = {} |
| |
| for k, v in enum.values.items(): |
| v = v.get_name().replace('.', '').replace('[', '').replace(']', '').upper() |
| item = prefix.upper() + '_' + name.upper() + '_' + v |
| e[item] = k |
| |
| enums[name] = e |
| |
| opc = {} |
| |
| for instr in isa.instructions(): |
| opc[prefix.upper() + '_OPC_' + instr.name.upper()] = None |
| |
| enums['opc'] = opc |
| |
| with open(args.output, "w", encoding="UTF-8") as fh: |
| fh.write(Template(template).render(prefix=prefix, enums=enums)) |
| |
| if __name__ == '__main__': |
| main() |