1 2template = """\ 3/* 4 * Copyright (c) 2018 Valve Corporation 5 * 6 * SPDX-License-Identifier: MIT 7 * 8 * This file was generated by aco_opcodes_cpp.py 9 */ 10 11#include "aco_ir.h" 12 13namespace aco { 14 15<% 16opcode_names = sorted(instructions.keys()) 17can_use_input_modifiers = "".join([instructions[name].input_mod for name in reversed(opcode_names)]) 18can_use_output_modifiers = "".join([instructions[name].output_mod for name in reversed(opcode_names)]) 19is_atomic = "".join([instructions[name].is_atomic for name in reversed(opcode_names)]) 20%> 21 22extern const aco::Info instr_info = { 23 { 24 % for name in opcode_names: 25 ${instructions[name].op.gfx7}, 26 % endfor 27 }, 28 { 29 % for name in opcode_names: 30 ${instructions[name].op.gfx9}, 31 % endfor 32 }, 33 { 34 % for name in opcode_names: 35 ${instructions[name].op.gfx10}, 36 % endfor 37 }, 38 { 39 % for name in opcode_names: 40 ${instructions[name].op.gfx11}, 41 % endfor 42 }, 43 { 44 % for name in opcode_names: 45 ${instructions[name].op.gfx12}, 46 % endfor 47 }, 48 std::bitset<${len(opcode_names)}>("${can_use_input_modifiers}"), 49 std::bitset<${len(opcode_names)}>("${can_use_output_modifiers}"), 50 std::bitset<${len(opcode_names)}>("${is_atomic}"), 51 { 52 % for name in opcode_names: 53 "${name}", 54 % endfor 55 }, 56 { 57 % for name in opcode_names: 58 aco::Format::${str(instructions[name].format.name)}, 59 % endfor 60 }, 61 { 62 % for name in opcode_names: 63 ${instructions[name].operand_size}, 64 % endfor 65 }, 66 { 67 % for name in opcode_names: 68 instr_class::${instructions[name].cls.value}, 69 % endfor 70 }, 71 { 72 % for name in opcode_names: 73 ${hex(instructions[name].definitions)}, 74 % endfor 75 }, 76 { 77 % for name in opcode_names: 78 ${hex(instructions[name].operands)}, 79 % endfor 80 }, 81}; 82 83} 84""" 85 86from aco_opcodes import instructions 87from mako.template import Template 88 89print(Template(template).render(instructions=instructions)) 90