builtin_function_kind.def 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // Part of the Carbon Language project, under the Apache License v2.0 with LLVM
  2. // Exceptions. See /LICENSE for license information.
  3. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. //
  5. // This is an X-macro header. It does not use `#include` guards, and instead is
  6. // designed to be `#include`ed after the x-macro is defined in order for its
  7. // inclusion to expand to the desired output. Macro definitions are cleaned up
  8. // at the end of this file.
  9. //
  10. // Supported x-macro is:
  11. // - CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name)
  12. // Defines a builtin function type.
  13. #if !defined(CARBON_SEM_IR_BUILTIN_FUNCTION_KIND)
  14. #error \
  15. "Must define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND x-macro to use this file."
  16. #define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name)
  17. #endif
  18. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(None)
  19. // A no-op function definition; calls should be elided when lowering.
  20. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(NoOp)
  21. // A no-op factory function.
  22. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(MakeUninitialized)
  23. // A primitive copy for types whose value and initializing representation are
  24. // the same.
  25. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrimitiveCopy)
  26. // Temporary builtins for primitive IO.
  27. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrintChar)
  28. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrintInt)
  29. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(ReadChar)
  30. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(StringAt)
  31. // Type factories.
  32. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CharLiteralMakeType)
  33. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLiteralMakeType)
  34. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLiteralMakeType)
  35. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntMakeTypeSigned)
  36. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntMakeTypeUnsigned)
  37. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMakeType)
  38. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolMakeType)
  39. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(MaybeUnformedMakeType)
  40. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FormMakeType)
  41. // Character conversion.
  42. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CharConvertChecked)
  43. // Integer conversion.
  44. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvert)
  45. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvertChar)
  46. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvertChecked)
  47. // Integer arithmetic.
  48. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSNegate)
  49. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSAdd)
  50. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSSub)
  51. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMul)
  52. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSDiv)
  53. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMod)
  54. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUNegate)
  55. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUAdd)
  56. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUSub)
  57. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMul)
  58. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUDiv)
  59. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMod)
  60. // Integer bitwise.
  61. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntComplement)
  62. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntAnd)
  63. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntOr)
  64. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntXor)
  65. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLeftShift)
  66. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntRightShift)
  67. // Integer comparison.
  68. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntEq)
  69. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntNeq)
  70. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLess)
  71. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLessEq)
  72. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntGreater)
  73. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntGreaterEq)
  74. // Integer compound assignment.
  75. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSAddAssign)
  76. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSSubAssign)
  77. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMulAssign)
  78. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSDivAssign)
  79. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSModAssign)
  80. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUAddAssign)
  81. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUSubAssign)
  82. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMulAssign)
  83. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUDivAssign)
  84. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUModAssign)
  85. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntAndAssign)
  86. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntOrAssign)
  87. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntXorAssign)
  88. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLeftShiftAssign)
  89. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntRightShiftAssign)
  90. // Float arithmetic.
  91. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatNegate)
  92. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatAdd)
  93. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatSub)
  94. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMul)
  95. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatDiv)
  96. // Float compound assignment.
  97. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatAddAssign)
  98. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatSubAssign)
  99. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMulAssign)
  100. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatDivAssign)
  101. // Float conversion.
  102. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatConvertChecked)
  103. // Float comparison.
  104. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatEq)
  105. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatNeq)
  106. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLess)
  107. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLessEq)
  108. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatGreater)
  109. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatGreaterEq)
  110. // Bool comparison.
  111. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolEq)
  112. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolNeq)
  113. // Pointers.
  114. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerMakeNull)
  115. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerIsNull)
  116. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerUnsafeConvert)
  117. // Facet type combination.
  118. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(TypeAnd)
  119. // C++ interop builtins.
  120. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CppStdInitializerListMake)
  121. #undef CARBON_SEM_IR_BUILTIN_FUNCTION_KIND