]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/clang/include/clang/Basic/TargetBuiltins.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / clang / include / clang / Basic / TargetBuiltins.h
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