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
22namespace 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
148