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