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