Stephen Hines | c568f1e | 2014-07-21 00:47:37 -0700 | [diff] [blame] | 1 | //===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===// |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
Chris Lattner | 0bc735f | 2007-12-29 19:59:25 +0000 | [diff] [blame] | 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
James Dennett | 2f7f5b1 | 2012-07-02 07:01:42 +0000 | [diff] [blame] | 9 | /// |
| 10 | /// \file |
| 11 | /// \brief Enumerates target-specific builtins in their own namespaces within |
| 12 | /// namespace ::clang. |
| 13 | /// |
| 14 | //===----------------------------------------------------------------------===// |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 15 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 16 | #ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H |
| 17 | #define LLVM_CLANG_BASIC_TARGETBUILTINS_H |
Anders Carlsson | c099b9a | 2007-12-10 19:30:18 +0000 | [diff] [blame] | 18 | |
Chris Lattner | 6b15cdc | 2009-06-14 01:05:48 +0000 | [diff] [blame] | 19 | #include "clang/Basic/Builtins.h" |
Matthijs Kooijman | e9484fc | 2008-06-26 08:39:30 +0000 | [diff] [blame] | 20 | #undef PPC |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 21 | |
Chris Lattner | fb344d3 | 2007-12-11 04:36:28 +0000 | [diff] [blame] | 22 | namespace clang { |
Chris Lattner | 2752c01 | 2010-03-03 19:03:45 +0000 | [diff] [blame] | 23 | |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 24 | 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 Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 33 | /// \brief ARM builtins |
Chris Lattner | 2752c01 | 2010-03-03 19:03:45 +0000 | [diff] [blame] | 34 | namespace ARM { |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 35 | enum { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 36 | LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, |
| 37 | LastNEONBuiltin = NEON::FirstTSBuiltin - 1, |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 38 | #define BUILTIN(ID, TYPE, ATTRS) BI##ID, |
Chris Lattner | 2752c01 | 2010-03-03 19:03:45 +0000 | [diff] [blame] | 39 | #include "clang/Basic/BuiltinsARM.def" |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 40 | LastTSBuiltin |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 41 | }; |
Chris Lattner | fb344d3 | 2007-12-11 04:36:28 +0000 | [diff] [blame] | 42 | } |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 43 | |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 44 | /// \brief AArch64 builtins |
| 45 | namespace AArch64 { |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 46 | enum { |
| 47 | LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, |
| 48 | LastNEONBuiltin = NEON::FirstTSBuiltin - 1, |
| 49 | #define BUILTIN(ID, TYPE, ATTRS) BI##ID, |
Stephen Hines | 6bcf27b | 2014-05-29 04:14:42 -0700 | [diff] [blame] | 50 | #include "clang/Basic/BuiltinsAArch64.def" |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 51 | LastTSBuiltin |
| 52 | }; |
| 53 | } |
| 54 | |
James Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 55 | /// \brief PPC builtins |
Chris Lattner | fb344d3 | 2007-12-11 04:36:28 +0000 | [diff] [blame] | 56 | namespace PPC { |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 57 | enum { |
| 58 | LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, |
| 59 | #define BUILTIN(ID, TYPE, ATTRS) BI##ID, |
Chris Lattner | 6b15cdc | 2009-06-14 01:05:48 +0000 | [diff] [blame] | 60 | #include "clang/Basic/BuiltinsPPC.def" |
Anders Carlsson | c916d70 | 2007-12-10 08:48:18 +0000 | [diff] [blame] | 61 | LastTSBuiltin |
| 62 | }; |
Chris Lattner | fb344d3 | 2007-12-11 04:36:28 +0000 | [diff] [blame] | 63 | } |
Chris Lattner | 2752c01 | 2010-03-03 19:03:45 +0000 | [diff] [blame] | 64 | |
James Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 65 | /// \brief NVPTX builtins |
Justin Holewinski | 2c585b9 | 2012-05-24 17:43:12 +0000 | [diff] [blame] | 66 | namespace NVPTX { |
Justin Holewinski | 285dc65 | 2011-04-20 19:34:15 +0000 | [diff] [blame] | 67 | enum { |
| 68 | LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, |
| 69 | #define BUILTIN(ID, TYPE, ATTRS) BI##ID, |
Justin Holewinski | 2c585b9 | 2012-05-24 17:43:12 +0000 | [diff] [blame] | 70 | #include "clang/Basic/BuiltinsNVPTX.def" |
Justin Holewinski | 285dc65 | 2011-04-20 19:34:15 +0000 | [diff] [blame] | 71 | LastTSBuiltin |
| 72 | }; |
| 73 | } |
| 74 | |
Stephen Hines | c568f1e | 2014-07-21 00:47:37 -0700 | [diff] [blame] | 75 | /// \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 Holewinski | 285dc65 | 2011-04-20 19:34:15 +0000 | [diff] [blame] | 84 | |
James Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 85 | /// \brief X86 builtins |
Chris Lattner | 2752c01 | 2010-03-03 19:03:45 +0000 | [diff] [blame] | 86 | 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 Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 95 | /// \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 Wilson | da95f73 | 2011-11-08 01:16:11 +0000 | [diff] [blame] | 98 | 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 Qin | 624bb5e | 2013-11-14 03:29:16 +0000 | [diff] [blame] | 114 | Poly64, |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 115 | Poly128, |
Bob Wilson | da95f73 | 2011-11-08 01:16:11 +0000 | [diff] [blame] | 116 | Float16, |
Tim Northover | b793f0d | 2013-08-01 09:23:19 +0000 | [diff] [blame] | 117 | Float32, |
| 118 | Float64 |
Bob Wilson | da95f73 | 2011-11-08 01:16:11 +0000 | [diff] [blame] | 119 | }; |
| 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 Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 138 | /// \brief Hexagon builtins |
Tony Linthicum | 9631939 | 2011-12-12 21:14:55 +0000 | [diff] [blame] | 139 | 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 Atanasyan | fbf7005 | 2012-06-28 18:23:16 +0000 | [diff] [blame] | 147 | |
James Dennett | af50aab | 2012-07-02 23:17:34 +0000 | [diff] [blame] | 148 | /// \brief MIPS builtins |
Simon Atanasyan | fbf7005 | 2012-06-28 18:23:16 +0000 | [diff] [blame] | 149 | 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 Lytton | 5f15f4d | 2013-08-13 09:43:10 +0000 | [diff] [blame] | 157 | |
| 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 Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 167 | |
| 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 Lattner | fb344d3 | 2007-12-11 04:36:28 +0000 | [diff] [blame] | 178 | } // end namespace clang. |
Anders Carlsson | c099b9a | 2007-12-10 19:30:18 +0000 | [diff] [blame] | 179 | |
Anders Carlsson | c099b9a | 2007-12-10 19:30:18 +0000 | [diff] [blame] | 180 | #endif |