xref: /aosp_15_r20/external/mesa3d/src/amd/compiler/aco_opcodes_cpp.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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