xref: /aosp_15_r20/external/mesa3d/src/etnaviv/isa/enums.h.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1#!/usr/bin/env python3
2#
3# Copyright © 2024 Igalia S.L.
4# SPDX-License-Identifier: MIT
5
6template = """/*
7 * Copyright © 2024 Igalia S.L.
8 * SPDX-License-Identifier: MIT
9 */
10
11#pragma once
12
13#include "util/macros.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19% for name, enum in enums.items():
20enum PACKED ${prefix}_${name} {
21% for k, v in enum.items():
22   % if v:
23   ${k} = ${v},
24   % else:
25   ${k},
26   %endif
27% endfor
28};
29
30% endfor
31
32#ifdef __cplusplus
33} /* extern C */
34#endif
35"""
36
37import argparse
38import sys, os
39sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../compiler/isaspec")
40
41from mako.template import Template
42from isa import ISA
43
44def main():
45    parser = argparse.ArgumentParser()
46    parser.add_argument('--xml', required=True, type=str, action="store",
47                        help='source isaspec xml file')
48    parser.add_argument('--output', required=True, type=str, action="store",
49                        help='output C header file')
50    args = parser.parse_args()
51
52    isa = ISA(args.xml)
53    prefix = 'isa'
54    enums = {}
55
56    for name, enum in isa.enums.items():
57        name = name.replace('#', '')
58        e = {}
59
60        for k, v in enum.values.items():
61            v = v.get_name().replace('.', '').replace('[', '').replace(']', '').upper()
62            item = prefix.upper() + '_' + name.upper() + '_' + v
63            e[item] = k
64
65        enums[name] = e
66
67    opc = {}
68
69    for instr in isa.instructions():
70        opc[prefix.upper() + '_OPC_' + instr.name.upper()] = None
71
72    enums['opc'] = opc
73
74    with open(args.output, "w", encoding="UTF-8") as fh:
75        fh.write(Template(template).render(prefix=prefix, enums=enums))
76
77if __name__ == '__main__':
78    main()
79