Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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@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.