blob: e112c654b5d0f20a812d364dfa4fe38c5df86dd9 [file] [log] [blame]
Stephen Hinesc568f1e2014-07-21 00:47:37 -07001//===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
Anders Carlssonc916d702007-12-10 08:48:18 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner0bc735f2007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Anders Carlssonc916d702007-12-10 08:48:18 +00007//
8//===----------------------------------------------------------------------===//
James Dennett2f7f5b12012-07-02 07:01:42 +00009///
10/// \file
11/// \brief Enumerates target-specific builtins in their own namespaces within
12/// namespace ::clang.
13///
14//===----------------------------------------------------------------------===//
Anders Carlssonc916d702007-12-10 08:48:18 +000015
Stephen Hines176edba2014-12-01 14:53:08 -080016#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
17#define LLVM_CLANG_BASIC_TARGETBUILTINS_H
Anders Carlssonc099b9a2007-12-10 19:30:18 +000018
Chris Lattner6b15cdc2009-06-14 01:05:48 +000019#include "clang/Basic/Builtins.h"
Matthijs Kooijmane9484fc2008-06-26 08:39:30 +000020#undef PPC
Anders Carlssonc916d702007-12-10 08:48:18 +000021
Chris Lattnerfb344d32007-12-11 04:36:28 +000022namespace clang {
Chris Lattner2752c012010-03-03 19:03:45 +000023
Stephen Hines651f13c2014-04-23 16:59:28 -070024 namespace NEON {
25 enum {
26 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
27#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
28#include "clang/Basic/BuiltinsNEON.def"
29 FirstTSBuiltin
30 };
31 }
32
James Dennettaf50aab2012-07-02 23:17:34 +000033 /// \brief ARM builtins
Chris Lattner2752c012010-03-03 19:03:45 +000034 namespace ARM {
Anders Carlssonc916d702007-12-10 08:48:18 +000035 enum {
Stephen Hines651f13c2014-04-23 16:59:28 -070036 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
37 LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
Anders Carlssonc916d702007-12-10 08:48:18 +000038#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
Chris Lattner2752c012010-03-03 19:03:45 +000039#include "clang/Basic/BuiltinsARM.def"
Stephen Hines651f13c2014-04-23 16:59:28 -070040 LastTSBuiltin
Anders Carlssonc916d702007-12-10 08:48:18 +000041 };
Chris Lattnerfb344d32007-12-11 04:36:28 +000042 }
Anders Carlssonc916d702007-12-10 08:48:18 +000043
Stephen Hines6bcf27b2014-05-29 04:14:42 -070044 /// \brief AArch64 builtins
45 namespace AArch64 {
Stephen Hines651f13c2014-04-23 16:59:28 -070046 enum {
47 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
48 LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
49 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
Stephen Hines6bcf27b2014-05-29 04:14:42 -070050 #include "clang/Basic/BuiltinsAArch64.def"
Stephen Hines651f13c2014-04-23 16:59:28 -070051 LastTSBuiltin
52 };
53 }
54
James Dennettaf50aab2012-07-02 23:17:34 +000055 /// \brief PPC builtins
Chris Lattnerfb344d32007-12-11 04:36:28 +000056 namespace PPC {
Anders Carlssonc916d702007-12-10 08:48:18 +000057 enum {
58 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
59#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
Chris Lattner6b15cdc2009-06-14 01:05:48 +000060#include "clang/Basic/BuiltinsPPC.def"
Anders Carlssonc916d702007-12-10 08:48:18 +000061 LastTSBuiltin
62 };
Chris Lattnerfb344d32007-12-11 04:36:28 +000063 }
Chris Lattner2752c012010-03-03 19:03:45 +000064
James Dennettaf50aab2012-07-02 23:17:34 +000065 /// \brief NVPTX builtins
Justin Holewinski2c585b92012-05-24 17:43:12 +000066 namespace NVPTX {
Justin Holewinski285dc652011-04-20 19:34:15 +000067 enum {
68 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
69#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
Justin Holewinski2c585b92012-05-24 17:43:12 +000070#include "clang/Basic/BuiltinsNVPTX.def"
Justin Holewinski285dc652011-04-20 19:34:15 +000071 LastTSBuiltin
72 };
73 }
74
Stephen Hinesc568f1e2014-07-21 00:47:37 -070075 /// \brief R600 builtins
76 namespace R600 {
77 enum {
78 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
79 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
80 #include "clang/Basic/BuiltinsR600.def"
81 LastTSBuiltin
82 };
83 }
Justin Holewinski285dc652011-04-20 19:34:15 +000084
James Dennettaf50aab2012-07-02 23:17:34 +000085 /// \brief X86 builtins
Chris Lattner2752c012010-03-03 19:03:45 +000086 namespace X86 {
87 enum {
88 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
89#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
90#include "clang/Basic/BuiltinsX86.def"
91 LastTSBuiltin
92 };
93 }
94
James Dennettaf50aab2012-07-02 23:17:34 +000095 /// \brief Flags to identify the types for overloaded Neon builtins.
96 ///
97 /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
Bob Wilsonda95f732011-11-08 01:16:11 +000098 class NeonTypeFlags {
99 enum {
100 EltTypeMask = 0xf,
101 UnsignedFlag = 0x10,
102 QuadFlag = 0x20
103 };
104 uint32_t Flags;
105
106 public:
107 enum EltType {
108 Int8,
109 Int16,
110 Int32,
111 Int64,
112 Poly8,
113 Poly16,
Kevin Qin624bb5e2013-11-14 03:29:16 +0000114 Poly64,
Stephen Hines651f13c2014-04-23 16:59:28 -0700115 Poly128,
Bob Wilsonda95f732011-11-08 01:16:11 +0000116 Float16,
Tim Northoverb793f0d2013-08-01 09:23:19 +0000117 Float32,
118 Float64
Bob Wilsonda95f732011-11-08 01:16:11 +0000119 };
120
121 NeonTypeFlags(unsigned F) : Flags(F) {}
122 NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
123 if (IsUnsigned)
124 Flags |= UnsignedFlag;
125 if (IsQuad)
126 Flags |= QuadFlag;
127 }
128
129 EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
130 bool isPoly() const {
131 EltType ET = getEltType();
132 return ET == Poly8 || ET == Poly16;
133 }
134 bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
135 bool isQuad() const { return (Flags & QuadFlag) != 0; }
136 };
137
James Dennettaf50aab2012-07-02 23:17:34 +0000138 /// \brief Hexagon builtins
Tony Linthicum96319392011-12-12 21:14:55 +0000139 namespace Hexagon {
140 enum {
141 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
142#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
143#include "clang/Basic/BuiltinsHexagon.def"
144 LastTSBuiltin
145 };
146 }
Simon Atanasyanfbf70052012-06-28 18:23:16 +0000147
James Dennettaf50aab2012-07-02 23:17:34 +0000148 /// \brief MIPS builtins
Simon Atanasyanfbf70052012-06-28 18:23:16 +0000149 namespace Mips {
150 enum {
151 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
152#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
153#include "clang/Basic/BuiltinsMips.def"
154 LastTSBuiltin
155 };
156 }
Robert Lytton5f15f4d2013-08-13 09:43:10 +0000157
158 /// \brief XCore builtins
159 namespace XCore {
160 enum {
161 LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
162#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
163#include "clang/Basic/BuiltinsXCore.def"
164 LastTSBuiltin
165 };
166 }
Stephen Hines176edba2014-12-01 14:53:08 -0800167
168 /// \brief Le64 builtins
169 namespace Le64 {
170 enum {
171 LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
172 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
173 #include "clang/Basic/BuiltinsLe64.def"
174 LastTSBuiltin
175 };
176 }
177
Chris Lattnerfb344d32007-12-11 04:36:28 +0000178} // end namespace clang.
Anders Carlssonc099b9a2007-12-10 19:30:18 +0000179
Anders Carlssonc099b9a2007-12-10 19:30:18 +0000180#endif