blob: a3980d993f5194793188156e38c2905f4b4bf8c0 [file] [log] [blame]
#!/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()