1194179Sed//===--- TargetBuiltins.h - Target specific builtin IDs -------------------===// 2194179Sed// 3194179Sed// The LLVM Compiler Infrastructure 4194179Sed// 5194179Sed// This file is distributed under the University of Illinois Open Source 6194179Sed// License. See LICENSE.TXT for details. 7194179Sed// 8194179Sed//===----------------------------------------------------------------------===// 9239462Sdim/// 10239462Sdim/// \file 11239462Sdim/// \brief Enumerates target-specific builtins in their own namespaces within 12239462Sdim/// namespace ::clang. 13239462Sdim/// 14239462Sdim//===----------------------------------------------------------------------===// 15194179Sed 16194179Sed#ifndef LLVM_CLANG_BASIC_TARGET_BUILTINS_H 17194179Sed#define LLVM_CLANG_BASIC_TARGET_BUILTINS_H 18194179Sed 19194179Sed#include "clang/Basic/Builtins.h" 20194179Sed#undef PPC 21194179Sed 22194179Sednamespace clang { 23204793Srdivacky 24251662Sdim /// \brief AArch64 builtins 25251662Sdim namespace AArch64 { 26251662Sdim enum { 27251662Sdim LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 28251662Sdim#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 29251662Sdim#include "clang/Basic/BuiltinsAArch64.def" 30251662Sdim LastTSBuiltin 31251662Sdim }; 32251662Sdim } 33239462Sdim /// \brief ARM builtins 34204793Srdivacky namespace ARM { 35194179Sed enum { 36194179Sed LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 37194179Sed#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 38204793Srdivacky#include "clang/Basic/BuiltinsARM.def" 39194179Sed LastTSBuiltin 40194179Sed }; 41194179Sed } 42194179Sed 43239462Sdim /// \brief PPC builtins 44194179Sed namespace PPC { 45194179Sed enum { 46194179Sed LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 47194179Sed#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 48194179Sed#include "clang/Basic/BuiltinsPPC.def" 49194179Sed LastTSBuiltin 50194179Sed }; 51194179Sed } 52204793Srdivacky 53239462Sdim /// \brief NVPTX builtins 54239462Sdim namespace NVPTX { 55221345Sdim enum { 56221345Sdim LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 57221345Sdim#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 58239462Sdim#include "clang/Basic/BuiltinsNVPTX.def" 59221345Sdim LastTSBuiltin 60221345Sdim }; 61221345Sdim } 62221345Sdim 63221345Sdim 64239462Sdim /// \brief X86 builtins 65204793Srdivacky namespace X86 { 66204793Srdivacky enum { 67204793Srdivacky LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 68204793Srdivacky#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 69204793Srdivacky#include "clang/Basic/BuiltinsX86.def" 70204793Srdivacky LastTSBuiltin 71204793Srdivacky }; 72204793Srdivacky } 73204793Srdivacky 74239462Sdim /// \brief Flags to identify the types for overloaded Neon builtins. 75239462Sdim /// 76239462Sdim /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h. 77234353Sdim class NeonTypeFlags { 78234353Sdim enum { 79234353Sdim EltTypeMask = 0xf, 80234353Sdim UnsignedFlag = 0x10, 81234353Sdim QuadFlag = 0x20 82234353Sdim }; 83234353Sdim uint32_t Flags; 84234353Sdim 85234353Sdim public: 86234353Sdim enum EltType { 87234353Sdim Int8, 88234353Sdim Int16, 89234353Sdim Int32, 90234353Sdim Int64, 91234353Sdim Poly8, 92234353Sdim Poly16, 93234353Sdim Float16, 94234353Sdim Float32 95234353Sdim }; 96234353Sdim 97234353Sdim NeonTypeFlags(unsigned F) : Flags(F) {} 98234353Sdim NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) { 99234353Sdim if (IsUnsigned) 100234353Sdim Flags |= UnsignedFlag; 101234353Sdim if (IsQuad) 102234353Sdim Flags |= QuadFlag; 103234353Sdim } 104234353Sdim 105234353Sdim EltType getEltType() const { return (EltType)(Flags & EltTypeMask); } 106234353Sdim bool isPoly() const { 107234353Sdim EltType ET = getEltType(); 108234353Sdim return ET == Poly8 || ET == Poly16; 109234353Sdim } 110234353Sdim bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; } 111234353Sdim bool isQuad() const { return (Flags & QuadFlag) != 0; } 112234353Sdim }; 113234353Sdim 114239462Sdim /// \brief Hexagon builtins 115234353Sdim namespace Hexagon { 116234353Sdim enum { 117234353Sdim LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 118234353Sdim#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 119234353Sdim#include "clang/Basic/BuiltinsHexagon.def" 120234353Sdim LastTSBuiltin 121234353Sdim }; 122234353Sdim } 123239462Sdim 124239462Sdim /// \brief MIPS builtins 125239462Sdim namespace Mips { 126239462Sdim enum { 127239462Sdim LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 128239462Sdim#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 129239462Sdim#include "clang/Basic/BuiltinsMips.def" 130239462Sdim LastTSBuiltin 131239462Sdim }; 132239462Sdim } 133194179Sed} // end namespace clang. 134194179Sed 135194179Sed#endif 136