Home | History | Annotate | Download | only in Basic
      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 {
     27     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
     28 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     29 #include "clang/Basic/BuiltinsNEON.def"
     30     FirstTSBuiltin
     31   };
     32   }
     33 
     34   /// \brief ARM builtins
     35   namespace ARM {
     36     enum {
     37       LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
     38       LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
     39 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     40 #include "clang/Basic/BuiltinsARM.def"
     41       LastTSBuiltin
     42     };
     43   }
     44 
     45   /// \brief AArch64 builtins
     46   namespace AArch64 {
     47   enum {
     48     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
     49     LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
     50   #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     51   #include "clang/Basic/BuiltinsAArch64.def"
     52     LastTSBuiltin
     53   };
     54   }
     55 
     56   /// \brief PPC builtins
     57   namespace PPC {
     58     enum {
     59         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
     60 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     61 #include "clang/Basic/BuiltinsPPC.def"
     62         LastTSBuiltin
     63     };
     64   }
     65 
     66   /// \brief NVPTX builtins
     67   namespace NVPTX {
     68     enum {
     69         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
     70 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     71 #include "clang/Basic/BuiltinsNVPTX.def"
     72         LastTSBuiltin
     73     };
     74   }
     75 
     76   /// \brief AMDGPU builtins
     77   namespace AMDGPU {
     78   enum {
     79     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
     80   #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     81   #include "clang/Basic/BuiltinsAMDGPU.def"
     82     LastTSBuiltin
     83   };
     84   }
     85 
     86   /// \brief X86 builtins
     87   namespace X86 {
     88     enum {
     89         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
     90 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
     91 #include "clang/Basic/BuiltinsX86.def"
     92         LastTSBuiltin
     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 {
    109       Int8,
    110       Int16,
    111       Int32,
    112       Int64,
    113       Poly8,
    114       Poly16,
    115       Poly64,
    116       Poly128,
    117       Float16,
    118       Float32,
    119       Float64
    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 {
    142         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
    143 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    144 #include "clang/Basic/BuiltinsHexagon.def"
    145         LastTSBuiltin
    146     };
    147   }
    148 
    149   /// \brief MIPS builtins
    150   namespace Mips {
    151     enum {
    152         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
    153 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    154 #include "clang/Basic/BuiltinsMips.def"
    155         LastTSBuiltin
    156     };
    157   }
    158 
    159   /// \brief XCore builtins
    160   namespace XCore {
    161     enum {
    162         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
    163 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    164 #include "clang/Basic/BuiltinsXCore.def"
    165         LastTSBuiltin
    166     };
    167   }
    168 
    169   /// \brief Le64 builtins
    170   namespace Le64 {
    171   enum {
    172     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
    173   #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    174   #include "clang/Basic/BuiltinsLe64.def"
    175     LastTSBuiltin
    176   };
    177   }
    178 
    179   /// \brief SystemZ builtins
    180   namespace SystemZ {
    181     enum {
    182         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
    183 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    184 #include "clang/Basic/BuiltinsSystemZ.def"
    185         LastTSBuiltin
    186     };
    187   }
    188 
    189   /// \brief WebAssembly builtins
    190   namespace WebAssembly {
    191     enum {
    192       LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
    193 #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
    194 #include "clang/Basic/BuiltinsWebAssembly.def"
    195       LastTSBuiltin
    196     };
    197   }
    198 
    199 } // end namespace clang.
    200 
    201 #endif
    202