clang  3.7.0
TargetBuiltins.h
Go to the documentation of this file.
1 //===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
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_TARGETBUILTINS_H
17 #define LLVM_CLANG_BASIC_TARGETBUILTINS_H
18 
19 #include <stdint.h>
20 #include "clang/Basic/Builtins.h"
21 #undef PPC
22 
23 namespace clang {
24 
25  namespace NEON {
26  enum {
28 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
29 #include "clang/Basic/BuiltinsNEON.def"
31  };
32  }
33 
34  /// \brief ARM builtins
35  namespace ARM {
36  enum {
39 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
40 #include "clang/Basic/BuiltinsARM.def"
42  };
43  }
44 
45  /// \brief AArch64 builtins
46  namespace AArch64 {
47  enum {
50  #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
51  #include "clang/Basic/BuiltinsAArch64.def"
53  };
54  }
55 
56  /// \brief PPC builtins
57  namespace PPC {
58  enum {
60 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
61 #include "clang/Basic/BuiltinsPPC.def"
63  };
64  }
65 
66  /// \brief NVPTX builtins
67  namespace NVPTX {
68  enum {
70 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
71 #include "clang/Basic/BuiltinsNVPTX.def"
73  };
74  }
75 
76  /// \brief AMDGPU builtins
77  namespace AMDGPU {
78  enum {
80  #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
81  #include "clang/Basic/BuiltinsAMDGPU.def"
83  };
84  }
85 
86  /// \brief X86 builtins
87  namespace X86 {
88  enum {
90 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
91 #include "clang/Basic/BuiltinsX86.def"
93  };
94  }
95 
96  /// \brief Flags to identify the types for overloaded Neon builtins.
97  ///
98  /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
99  class NeonTypeFlags {
100  enum {
101  EltTypeMask = 0xf,
102  UnsignedFlag = 0x10,
103  QuadFlag = 0x20
104  };
105  uint32_t Flags;
106 
107  public:
108  enum EltType {
120  };
121 
122  NeonTypeFlags(unsigned F) : Flags(F) {}
123  NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
124  if (IsUnsigned)
125  Flags |= UnsignedFlag;
126  if (IsQuad)
127  Flags |= QuadFlag;
128  }
129 
130  EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
131  bool isPoly() const {
132  EltType ET = getEltType();
133  return ET == Poly8 || ET == Poly16;
134  }
135  bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
136  bool isQuad() const { return (Flags & QuadFlag) != 0; }
137  };
138 
139  /// \brief Hexagon builtins
140  namespace Hexagon {
141  enum {
143 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
144 #include "clang/Basic/BuiltinsHexagon.def"
146  };
147  }
148 
149  /// \brief MIPS builtins
150  namespace Mips {
151  enum {
153 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
154 #include "clang/Basic/BuiltinsMips.def"
156  };
157  }
158 
159  /// \brief XCore builtins
160  namespace XCore {
161  enum {
163 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
164 #include "clang/Basic/BuiltinsXCore.def"
166  };
167  }
168 
169  /// \brief Le64 builtins
170  namespace Le64 {
171  enum {
173  #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
174  #include "clang/Basic/BuiltinsLe64.def"
176  };
177  }
178 
179  /// \brief SystemZ builtins
180  namespace SystemZ {
181  enum {
183 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
184 #include "clang/Basic/BuiltinsSystemZ.def"
186  };
187  }
188 } // end namespace clang.
189 
190 #endif
bool isQuad() const
bool isUnsigned() const
EltType getEltType() const
NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad)
NeonTypeFlags(unsigned F)
Flags to identify the types for overloaded Neon builtins.
bool isPoly() const
Defines enum values for all the target-independent builtin functions.