xref: /aosp_15_r20/external/mesa3d/src/asahi/compiler/agx_opcodes.c.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Workertemplate = """/*
2*61046927SAndroid Build Coastguard Worker * Copyright 2021 Alyssa Rosenzweig
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker#include "agx_opcodes.h"
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker<%
9*61046927SAndroid Build Coastguard Workerdef make_encoding(encoding):
10*61046927SAndroid Build Coastguard Worker   if encoding is None:
11*61046927SAndroid Build Coastguard Worker      return "{ 0 }"
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker   return "{{ {}, {}, {} }}".format(hex(encoding.exact), encoding.length_short, int(encoding.extensible))
14*61046927SAndroid Build Coastguard Worker%>
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard Workerconst struct agx_opcode_info agx_opcodes_info[AGX_NUM_OPCODES] = {
17*61046927SAndroid Build Coastguard Worker% for opcode in opcodes:
18*61046927SAndroid Build Coastguard Worker<%
19*61046927SAndroid Build Coastguard Worker   op = opcodes[opcode]
20*61046927SAndroid Build Coastguard Worker   imms = ["AGX_IMMEDIATE_" + imm.name.upper() for imm in op.imms]
21*61046927SAndroid Build Coastguard Worker   if len(imms) == 0:
22*61046927SAndroid Build Coastguard Worker      imms = ["0"]
23*61046927SAndroid Build Coastguard Worker%>
24*61046927SAndroid Build Coastguard Worker   [AGX_OPCODE_${opcode.upper()}] = {
25*61046927SAndroid Build Coastguard Worker      "${opcode}", ${op.srcs}, ${op.dests}, ${" | ".join(imms)},
26*61046927SAndroid Build Coastguard Worker      ${make_encoding(op.encoding_32)},
27*61046927SAndroid Build Coastguard Worker      ${make_encoding(op.encoding_16)},
28*61046927SAndroid Build Coastguard Worker      AGX_SCHEDULE_CLASS_${op.schedule_class.upper()},
29*61046927SAndroid Build Coastguard Worker      ${int(op.is_float)},
30*61046927SAndroid Build Coastguard Worker      ${int(op.can_eliminate)},
31*61046927SAndroid Build Coastguard Worker      ${int(op.can_reorder)},
32*61046927SAndroid Build Coastguard Worker   },
33*61046927SAndroid Build Coastguard Worker% endfor
34*61046927SAndroid Build Coastguard Worker};
35*61046927SAndroid Build Coastguard Worker"""
36*61046927SAndroid Build Coastguard Worker
37*61046927SAndroid Build Coastguard Workerfrom mako.template import Template
38*61046927SAndroid Build Coastguard Workerfrom agx_opcodes import opcodes
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Workerprint(Template(template).render(opcodes=opcodes))
41