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