Home | History | Annotate | Download | only in nir
      1 #! /usr/bin/env python
      2 #
      3 # Copyright (C) 2014 Connor Abbott
      4 #
      5 # Permission is hereby granted, free of charge, to any person obtaining a
      6 # copy of this software and associated documentation files (the "Software"),
      7 # to deal in the Software without restriction, including without limitation
      8 # the rights to use, copy, modify, merge, publish, distribute, sublicense,
      9 # and/or sell copies of the Software, and to permit persons to whom the
     10 # Software is furnished to do so, subject to the following conditions:
     11 #
     12 # The above copyright notice and this permission notice (including the next
     13 # paragraph) shall be included in all copies or substantial portions of the
     14 # Software.
     15 #
     16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19 # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     21 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
     22 # IN THE SOFTWARE.
     23 #
     24 # Authors:
     25 #    Connor Abbott (cwabbott0 (at] gmail.com)
     26 
     27 from nir_opcodes import opcodes
     28 from mako.template import Template
     29 
     30 template = Template("""
     31 #include "nir.h"
     32 
     33 const nir_op_info nir_op_infos[nir_num_opcodes] = {
     34 % for name, opcode in sorted(opcodes.iteritems()):
     35 {
     36    .name = "${name}",
     37    .num_inputs = ${opcode.num_inputs},
     38    .output_size = ${opcode.output_size},
     39    .output_type = ${"nir_type_" + opcode.output_type},
     40    .input_sizes = {
     41       ${ ", ".join(str(size) for size in opcode.input_sizes) }
     42    },
     43    .input_types = {
     44       ${ ", ".join("nir_type_" + type for type in opcode.input_types) }
     45    },
     46    .algebraic_properties =
     47       ${ "0" if opcode.algebraic_properties == "" else " | ".join(
     48             "NIR_OP_IS_" + prop.upper() for prop in
     49                opcode.algebraic_properties.strip().split(" ")) }
     50 },
     51 % endfor
     52 };
     53 """)
     54 
     55 print template.render(opcodes=opcodes)
     56