1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines//===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===// 2c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson// 3c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson// The LLVM Compiler Infrastructure 4c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson// 50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source 60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details. 7c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson// 8c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson//===----------------------------------------------------------------------===// 92f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// 102f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \file 112f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// \brief Enumerates target-specific builtins in their own namespaces within 122f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// namespace ::clang. 132f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett/// 142f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett//===----------------------------------------------------------------------===// 15c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson 166b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#ifndef LLVM_CLANG_BASIC_TARGET_BUILTINS_H 176b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#define LLVM_CLANG_BASIC_TARGET_BUILTINS_H 18c099b9a94f52f9d2c9135cfcfbc32bc17401500bAnders Carlsson 196b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#include "clang/Basic/Builtins.h" 20e9484fc09a82b0bcd9f4921083440df4aea04f52Matthijs Kooijman#undef PPC 21c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson 22fb344d3ddd538746be75941d50b78ff148441abcChris Lattnernamespace clang { 232752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines namespace NEON { 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines enum { 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Basic/BuiltinsNEON.def" 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines FirstTSBuiltin 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 33af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief ARM builtins 342752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner namespace ARM { 35c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson enum { 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastNEONBuiltin = NEON::FirstTSBuiltin - 1, 38c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 392752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner#include "clang/Basic/BuiltinsARM.def" 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastTSBuiltin 41c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson }; 42fb344d3ddd538746be75941d50b78ff148441abcChris Lattner } 43c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines /// \brief AArch64 builtins 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines namespace AArch64 { 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines enum { 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastNEONBuiltin = NEON::FirstTSBuiltin - 1, 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines #include "clang/Basic/BuiltinsAArch64.def" 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines LastTSBuiltin 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines }; 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 55af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief PPC builtins 56fb344d3ddd538746be75941d50b78ff148441abcChris Lattner namespace PPC { 57c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson enum { 58c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 59c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 606b15cdc1312f8fc45c86ee75e2a85106700e97f6Chris Lattner#include "clang/Basic/BuiltinsPPC.def" 61c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson LastTSBuiltin 62c916d70e0b65bbf6c2800e2818995ab1ce31388eAnders Carlsson }; 63fb344d3ddd538746be75941d50b78ff148441abcChris Lattner } 642752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner 65af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief NVPTX builtins 662c585b991596859f39860b6094247ba027a03530Justin Holewinski namespace NVPTX { 67285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski enum { 68285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 69285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 702c585b991596859f39860b6094247ba027a03530Justin Holewinski#include "clang/Basic/BuiltinsNVPTX.def" 71285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski LastTSBuiltin 72285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski }; 73285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski } 74285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski 75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines /// \brief R600 builtins 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines namespace R600 { 77ef8225444452a1486bd721f3285301fe84643b00Stephen Hines enum { 78ef8225444452a1486bd721f3285301fe84643b00Stephen Hines LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1, 79ef8225444452a1486bd721f3285301fe84643b00Stephen Hines #define BUILTIN(ID, TYPE, ATTRS) BI##ID, 80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines #include "clang/Basic/BuiltinsR600.def" 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hines LastTSBuiltin 82ef8225444452a1486bd721f3285301fe84643b00Stephen Hines }; 83ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 84285dc6530b37d632cd858bac444d29044de4d283Justin Holewinski 85af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief X86 builtins 862752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner namespace X86 { 872752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner enum { 882752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 892752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 902752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner#include "clang/Basic/BuiltinsX86.def" 912752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner LastTSBuiltin 922752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner }; 932752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner } 942752c0137d95aa2f4ee1cdff4b564bac842e041bChris Lattner 95af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief Flags to identify the types for overloaded Neon builtins. 96af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// 97af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h. 98da95f73b59f9af964e33725c515139d34c90c863Bob Wilson class NeonTypeFlags { 99da95f73b59f9af964e33725c515139d34c90c863Bob Wilson enum { 100da95f73b59f9af964e33725c515139d34c90c863Bob Wilson EltTypeMask = 0xf, 101da95f73b59f9af964e33725c515139d34c90c863Bob Wilson UnsignedFlag = 0x10, 102da95f73b59f9af964e33725c515139d34c90c863Bob Wilson QuadFlag = 0x20 103da95f73b59f9af964e33725c515139d34c90c863Bob Wilson }; 104da95f73b59f9af964e33725c515139d34c90c863Bob Wilson uint32_t Flags; 105da95f73b59f9af964e33725c515139d34c90c863Bob Wilson 106da95f73b59f9af964e33725c515139d34c90c863Bob Wilson public: 107da95f73b59f9af964e33725c515139d34c90c863Bob Wilson enum EltType { 108da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Int8, 109da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Int16, 110da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Int32, 111da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Int64, 112da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Poly8, 113da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Poly16, 114624bb5e59dbcc24efeee7dff12c9b48d2b5077e9Kevin Qin Poly64, 115651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Poly128, 116da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Float16, 117b793f0d3448a15277cd6b6cc4ba558ded39a8084Tim Northover Float32, 118b793f0d3448a15277cd6b6cc4ba558ded39a8084Tim Northover Float64 119da95f73b59f9af964e33725c515139d34c90c863Bob Wilson }; 120da95f73b59f9af964e33725c515139d34c90c863Bob Wilson 121da95f73b59f9af964e33725c515139d34c90c863Bob Wilson NeonTypeFlags(unsigned F) : Flags(F) {} 122da95f73b59f9af964e33725c515139d34c90c863Bob Wilson NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) { 123da95f73b59f9af964e33725c515139d34c90c863Bob Wilson if (IsUnsigned) 124da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Flags |= UnsignedFlag; 125da95f73b59f9af964e33725c515139d34c90c863Bob Wilson if (IsQuad) 126da95f73b59f9af964e33725c515139d34c90c863Bob Wilson Flags |= QuadFlag; 127da95f73b59f9af964e33725c515139d34c90c863Bob Wilson } 128da95f73b59f9af964e33725c515139d34c90c863Bob Wilson 129da95f73b59f9af964e33725c515139d34c90c863Bob Wilson EltType getEltType() const { return (EltType)(Flags & EltTypeMask); } 130da95f73b59f9af964e33725c515139d34c90c863Bob Wilson bool isPoly() const { 131da95f73b59f9af964e33725c515139d34c90c863Bob Wilson EltType ET = getEltType(); 132da95f73b59f9af964e33725c515139d34c90c863Bob Wilson return ET == Poly8 || ET == Poly16; 133da95f73b59f9af964e33725c515139d34c90c863Bob Wilson } 134da95f73b59f9af964e33725c515139d34c90c863Bob Wilson bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; } 135da95f73b59f9af964e33725c515139d34c90c863Bob Wilson bool isQuad() const { return (Flags & QuadFlag) != 0; } 136da95f73b59f9af964e33725c515139d34c90c863Bob Wilson }; 137da95f73b59f9af964e33725c515139d34c90c863Bob Wilson 138af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief Hexagon builtins 1399631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum namespace Hexagon { 1409631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum enum { 1419631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 1429631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 1439631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum#include "clang/Basic/BuiltinsHexagon.def" 1449631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum LastTSBuiltin 1459631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum }; 1469631939f82c0eaa6fb3936a0ce58a41adfbc9011Tony Linthicum } 147fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan 148af50aab0c317462129d73ae8000c6394c718598dJames Dennett /// \brief MIPS builtins 149fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan namespace Mips { 150fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan enum { 151fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 152fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 153fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan#include "clang/Basic/BuiltinsMips.def" 154fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan LastTSBuiltin 155fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan }; 156fbf7005138d199bad238f0dd1ff509931a24ab10Simon Atanasyan } 1575f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton 1585f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton /// \brief XCore builtins 1595f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton namespace XCore { 1605f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton enum { 1615f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1, 1625f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton#define BUILTIN(ID, TYPE, ATTRS) BI##ID, 1635f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton#include "clang/Basic/BuiltinsXCore.def" 1645f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton LastTSBuiltin 1655f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton }; 1665f15f4daf0e225ea8463fe2ef522c009c95ffc9cRobert Lytton } 167fb344d3ddd538746be75941d50b78ff148441abcChris Lattner} // end namespace clang. 168c099b9a94f52f9d2c9135cfcfbc32bc17401500bAnders Carlsson 169c099b9a94f52f9d2c9135cfcfbc32bc17401500bAnders Carlsson#endif 170