TargetBuiltins.h revision 360784
1//===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8/// 9/// \file 10/// Enumerates target-specific builtins in their own namespaces within 11/// namespace ::clang. 12/// 13//===----------------------------------------------------------------------===// 14 15#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H 16#define LLVM_CLANG_BASIC_TARGETBUILTINS_H 17 18#include <stdint.h> 19#include "clang/Basic/Builtins.h" 20#undef PPC 21 22namespace clang { 23 24 namespace NEON { 25 enum { 26 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 27#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 28#include "clang/Basic/BuiltinsNEON.def" 29 FirstTSBuiltin 30 }; 31 } 32 33 /// ARM builtins 34 namespace ARM { 35 enum { 36 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 37 LastNEONBuiltin = NEON::FirstTSBuiltin - 1, 38#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 39#include "clang/Basic/BuiltinsARM.def" 40 LastTSBuiltin 41 }; 42 } 43 44 /// AArch64 builtins 45 namespace AArch64 { 46 enum { 47 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 48 LastNEONBuiltin = NEON::FirstTSBuiltin - 1, 49 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 50 #include "clang/Basic/BuiltinsAArch64.def" 51 LastTSBuiltin 52 }; 53 } 54 55 /// BPF builtins 56 namespace BPF { 57 enum { 58 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 59 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 60 #include "clang/Basic/BuiltinsBPF.def" 61 LastTSBuiltin 62 }; 63 } 64 65 /// PPC builtins 66 namespace PPC { 67 enum { 68 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 69#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 70#include "clang/Basic/BuiltinsPPC.def" 71 LastTSBuiltin 72 }; 73 } 74 75 /// NVPTX builtins 76 namespace NVPTX { 77 enum { 78 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 79#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 80#include "clang/Basic/BuiltinsNVPTX.def" 81 LastTSBuiltin 82 }; 83 } 84 85 /// AMDGPU builtins 86 namespace AMDGPU { 87 enum { 88 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 89 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 90 #include "clang/Basic/BuiltinsAMDGPU.def" 91 LastTSBuiltin 92 }; 93 } 94 95 /// X86 builtins 96 namespace X86 { 97 enum { 98 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 99#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 100#include "clang/Basic/BuiltinsX86.def" 101 FirstX86_64Builtin, 102 LastX86CommonBuiltin = FirstX86_64Builtin - 1, 103#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 104#include "clang/Basic/BuiltinsX86_64.def" 105 LastTSBuiltin 106 }; 107 } 108 109 /// Flags to identify the types for overloaded Neon builtins. 110 /// 111 /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h. 112 class NeonTypeFlags { 113 enum { 114 EltTypeMask = 0xf, 115 UnsignedFlag = 0x10, 116 QuadFlag = 0x20 117 }; 118 uint32_t Flags; 119 120 public: 121 enum EltType { 122 Int8, 123 Int16, 124 Int32, 125 Int64, 126 Poly8, 127 Poly16, 128 Poly64, 129 Poly128, 130 Float16, 131 Float32, 132 Float64 133 }; 134 135 NeonTypeFlags(unsigned F) : Flags(F) {} 136 NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) { 137 if (IsUnsigned) 138 Flags |= UnsignedFlag; 139 if (IsQuad) 140 Flags |= QuadFlag; 141 } 142 143 EltType getEltType() const { return (EltType)(Flags & EltTypeMask); } 144 bool isPoly() const { 145 EltType ET = getEltType(); 146 return ET == Poly8 || ET == Poly16; 147 } 148 bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; } 149 bool isQuad() const { return (Flags & QuadFlag) != 0; } 150 }; 151 152 /// Hexagon builtins 153 namespace Hexagon { 154 enum { 155 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 156#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 157#include "clang/Basic/BuiltinsHexagon.def" 158 LastTSBuiltin 159 }; 160 } 161 162 /// MIPS builtins 163 namespace Mips { 164 enum { 165 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 166#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 167#include "clang/Basic/BuiltinsMips.def" 168 LastTSBuiltin 169 }; 170 } 171 172 /// XCore builtins 173 namespace XCore { 174 enum { 175 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 176#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 177#include "clang/Basic/BuiltinsXCore.def" 178 LastTSBuiltin 179 }; 180 } 181 182 /// Le64 builtins 183 namespace Le64 { 184 enum { 185 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 186 #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 187 #include "clang/Basic/BuiltinsLe64.def" 188 LastTSBuiltin 189 }; 190 } 191 192 /// SystemZ builtins 193 namespace SystemZ { 194 enum { 195 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 196#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 197#include "clang/Basic/BuiltinsSystemZ.def" 198 LastTSBuiltin 199 }; 200 } 201 202 /// WebAssembly builtins 203 namespace WebAssembly { 204 enum { 205 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 206#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 207#include "clang/Basic/BuiltinsWebAssembly.def" 208 LastTSBuiltin 209 }; 210 } 211 212} // end namespace clang. 213 214#endif 215