1 //===--- TargetBuiltins.h - Target specific builtin IDs -------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// \brief Enumerates target-specific builtins in their own namespaces within 12 /// namespace ::clang. 13 /// 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_CLANG_BASIC_TARGET_BUILTINS_H 17 #define LLVM_CLANG_BASIC_TARGET_BUILTINS_H 18 19 #include "clang/Basic/Builtins.h" 20 #undef PPC 21 22 namespace clang { 23 24 /// \brief AArch64 builtins 25 namespace AArch64 { 26 enum { 27 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 28 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 29 #include "clang/Basic/BuiltinsAArch64.def" 30 LastTSBuiltin 31 }; 32 } 33 /// \brief ARM builtins 34 namespace ARM { 35 enum { 36 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 37 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 38 #include "clang/Basic/BuiltinsARM.def" 39 LastTSBuiltin 40 }; 41 } 42 43 /// \brief PPC builtins 44 namespace PPC { 45 enum { 46 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 47 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 48 #include "clang/Basic/BuiltinsPPC.def" 49 LastTSBuiltin 50 }; 51 } 52 53 /// \brief NVPTX builtins 54 namespace NVPTX { 55 enum { 56 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 57 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 58 #include "clang/Basic/BuiltinsNVPTX.def" 59 LastTSBuiltin 60 }; 61 } 62 63 64 /// \brief X86 builtins 65 namespace X86 { 66 enum { 67 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 68 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 69 #include "clang/Basic/BuiltinsX86.def" 70 LastTSBuiltin 71 }; 72 } 73 74 /// \brief Flags to identify the types for overloaded Neon builtins. 75 /// 76 /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h. 77 class NeonTypeFlags { 78 enum { 79 EltTypeMask = 0xf, 80 UnsignedFlag = 0x10, 81 QuadFlag = 0x20 82 }; 83 uint32_t Flags; 84 85 public: 86 enum EltType { 87 Int8, 88 Int16, 89 Int32, 90 Int64, 91 Poly8, 92 Poly16, 93 Poly64, 94 Float16, 95 Float32, 96 Float64 97 }; 98 99 NeonTypeFlags(unsigned F) : Flags(F) {} 100 NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) { 101 if (IsUnsigned) 102 Flags |= UnsignedFlag; 103 if (IsQuad) 104 Flags |= QuadFlag; 105 } 106 107 EltType getEltType() const { return (EltType)(Flags & EltTypeMask); } 108 bool isPoly() const { 109 EltType ET = getEltType(); 110 return ET == Poly8 || ET == Poly16; 111 } 112 bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; } 113 bool isQuad() const { return (Flags & QuadFlag) != 0; } 114 }; 115 116 /// \brief Hexagon builtins 117 namespace Hexagon { 118 enum { 119 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 120 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 121 #include "clang/Basic/BuiltinsHexagon.def" 122 LastTSBuiltin 123 }; 124 } 125 126 /// \brief MIPS builtins 127 namespace Mips { 128 enum { 129 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 130 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 131 #include "clang/Basic/BuiltinsMips.def" 132 LastTSBuiltin 133 }; 134 } 135 136 /// \brief XCore builtins 137 namespace XCore { 138 enum { 139 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 140 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 141 #include "clang/Basic/BuiltinsXCore.def" 142 LastTSBuiltin 143 }; 144 } 145 } // end namespace clang. 146 147 #endif 148