// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // // This is an X-macro header. It does not use `#include` guards, and instead is // designed to be `#include`ed after the x-macro is defined in order for its // inclusion to expand to the desired output. Macro definitions are cleaned up // at the end of this file. // // Supported x-macro is: // - CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name) // Defines a builtin function type. #if !defined(CARBON_SEM_IR_BUILTIN_FUNCTION_KIND) #error \ "Must define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND x-macro to use this file." #define CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(Name) #endif CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(None) // A no-op function definition; calls should be elided when lowering. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(NoOp) // A no-op factory function. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(MakeUninitialized) // A primitive copy for types whose value and initializing representation are // the same. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrimitiveCopy) // Temporary builtins for primitive IO. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrintChar) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PrintInt) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(ReadChar) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(StringAt) // Type factories. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CharLiteralMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLiteralMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLiteralMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntMakeTypeSigned) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntMakeTypeUnsigned) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(MaybeUnformedMakeType) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FormMakeType) // Character conversion. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CharConvertChecked) // Integer conversion. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvert) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvertChar) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntConvertChecked) // Integer arithmetic. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSNegate) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSAdd) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSSub) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMul) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSDiv) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMod) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUNegate) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUAdd) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUSub) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMul) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUDiv) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMod) // Integer bitwise. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntComplement) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntAnd) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntOr) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntXor) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLeftShift) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntRightShift) // Integer comparison. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntEq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntNeq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLess) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLessEq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntGreater) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntGreaterEq) // Integer compound assignment. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSAddAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSSubAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSMulAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSDivAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntSModAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUAddAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUSubAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUMulAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUDivAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntUModAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntAndAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntOrAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntXorAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntLeftShiftAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(IntRightShiftAssign) // Float arithmetic. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatNegate) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatAdd) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatSub) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMul) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatDiv) // Float compound assignment. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatAddAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatSubAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatMulAssign) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatDivAssign) // Float conversion. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatConvertChecked) // Float comparison. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatEq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatNeq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLess) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatLessEq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatGreater) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(FloatGreaterEq) // Bool comparison. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolEq) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(BoolNeq) // Pointers. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerMakeNull) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerIsNull) CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(PointerUnsafeConvert) // Facet type combination. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(TypeAnd) // C++ interop builtins. CARBON_SEM_IR_BUILTIN_FUNCTION_KIND(CppStdInitializerListMake) #undef CARBON_SEM_IR_BUILTIN_FUNCTION_KIND