1 //===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
10 /// Enumerates target-specific builtins in their own namespaces within
11 /// namespace ::clang.
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
16 #define LLVM_CLANG_BASIC_TARGETBUILTINS_H
19 #include "clang/Basic/Builtins.h"
26 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
27 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
28 #include "clang/Basic/BuiltinsNEON.def"
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"
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"
58 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
59 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
60 #include "clang/Basic/BuiltinsPPC.def"
68 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
69 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
70 #include "clang/Basic/BuiltinsNVPTX.def"
78 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
79 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
80 #include "clang/Basic/BuiltinsAMDGPU.def"
88 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
89 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
90 #include "clang/Basic/BuiltinsX86.def"
92 LastX86CommonBuiltin = FirstX86_64Builtin - 1,
93 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
94 #include "clang/Basic/BuiltinsX86_64.def"
99 /// Flags to identify the types for overloaded Neon builtins.
101 /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
102 class NeonTypeFlags {
125 NeonTypeFlags(unsigned F) : Flags(F) {}
126 NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
128 Flags |= UnsignedFlag;
133 EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
134 bool isPoly() const {
135 EltType ET = getEltType();
136 return ET == Poly8 || ET == Poly16;
138 bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
139 bool isQuad() const { return (Flags & QuadFlag) != 0; }
145 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
146 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
147 #include "clang/Basic/BuiltinsHexagon.def"
155 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
156 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
157 #include "clang/Basic/BuiltinsMips.def"
165 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
166 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
167 #include "clang/Basic/BuiltinsXCore.def"
175 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
176 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
177 #include "clang/Basic/BuiltinsLe64.def"
185 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
186 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
187 #include "clang/Basic/BuiltinsSystemZ.def"
192 /// WebAssembly builtins
193 namespace WebAssembly {
195 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
196 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
197 #include "clang/Basic/BuiltinsWebAssembly.def"
202 } // end namespace clang.