2014-11-24 09:15:30 +00:00
|
|
|
//===--- TargetBuiltins.h - Target specific builtin IDs ---------*- C++ -*-===//
|
2009-06-02 17:58:47 +00:00
|
|
|
//
|
2019-08-20 20:50:49 +00:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2009-06-02 17:58:47 +00:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
2012-08-15 20:02:54 +00:00
|
|
|
///
|
|
|
|
/// \file
|
2018-07-28 11:06:01 +00:00
|
|
|
/// Enumerates target-specific builtins in their own namespaces within
|
2012-08-15 20:02:54 +00:00
|
|
|
/// namespace ::clang.
|
|
|
|
///
|
|
|
|
//===----------------------------------------------------------------------===//
|
2009-06-02 17:58:47 +00:00
|
|
|
|
2015-01-18 16:23:48 +00:00
|
|
|
#ifndef LLVM_CLANG_BASIC_TARGETBUILTINS_H
|
|
|
|
#define LLVM_CLANG_BASIC_TARGETBUILTINS_H
|
2009-06-02 17:58:47 +00:00
|
|
|
|
2015-05-27 18:47:56 +00:00
|
|
|
#include <stdint.h>
|
2009-06-14 09:24:02 +00:00
|
|
|
#include "clang/Basic/Builtins.h"
|
2009-06-02 17:58:47 +00:00
|
|
|
#undef PPC
|
|
|
|
|
|
|
|
namespace clang {
|
2010-03-06 09:23:02 +00:00
|
|
|
|
2014-11-24 09:15:30 +00:00
|
|
|
namespace NEON {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
|
2013-06-10 20:45:12 +00:00
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
2014-11-24 09:15:30 +00:00
|
|
|
#include "clang/Basic/BuiltinsNEON.def"
|
|
|
|
FirstTSBuiltin
|
|
|
|
};
|
2013-06-10 20:45:12 +00:00
|
|
|
}
|
2014-11-24 09:15:30 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// ARM builtins
|
2010-03-06 09:23:02 +00:00
|
|
|
namespace ARM {
|
2009-06-02 17:58:47 +00:00
|
|
|
enum {
|
2014-11-24 09:15:30 +00:00
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
|
2009-06-02 17:58:47 +00:00
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
2010-03-06 09:23:02 +00:00
|
|
|
#include "clang/Basic/BuiltinsARM.def"
|
2014-11-24 09:15:30 +00:00
|
|
|
LastTSBuiltin
|
2009-06-02 17:58:47 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// AArch64 builtins
|
2014-11-24 09:15:30 +00:00
|
|
|
namespace AArch64 {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
|
|
|
|
LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsAArch64.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// PPC builtins
|
2009-06-02 17:58:47 +00:00
|
|
|
namespace PPC {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
2009-06-14 09:24:02 +00:00
|
|
|
#include "clang/Basic/BuiltinsPPC.def"
|
2009-06-02 17:58:47 +00:00
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2010-03-06 09:23:02 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// NVPTX builtins
|
2012-08-15 20:02:54 +00:00
|
|
|
namespace NVPTX {
|
2011-05-02 19:39:53 +00:00
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
2012-08-15 20:02:54 +00:00
|
|
|
#include "clang/Basic/BuiltinsNVPTX.def"
|
2011-05-02 19:39:53 +00:00
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// AMDGPU builtins
|
2015-06-21 14:00:56 +00:00
|
|
|
namespace AMDGPU {
|
2014-11-24 09:15:30 +00:00
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
2015-06-21 14:00:56 +00:00
|
|
|
#include "clang/Basic/BuiltinsAMDGPU.def"
|
2014-11-24 09:15:30 +00:00
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2011-05-02 19:39:53 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// X86 builtins
|
2010-03-06 09:23:02 +00:00
|
|
|
namespace X86 {
|
2017-01-02 19:18:08 +00:00
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
|
2010-03-06 09:23:02 +00:00
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsX86.def"
|
2017-01-02 19:18:08 +00:00
|
|
|
FirstX86_64Builtin,
|
|
|
|
LastX86CommonBuiltin = FirstX86_64Builtin - 1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsX86_64.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
2010-03-06 09:23:02 +00:00
|
|
|
}
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// Flags to identify the types for overloaded Neon builtins.
|
2012-08-15 20:02:54 +00:00
|
|
|
///
|
|
|
|
/// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
|
2012-04-14 14:01:31 +00:00
|
|
|
class NeonTypeFlags {
|
|
|
|
enum {
|
|
|
|
EltTypeMask = 0xf,
|
|
|
|
UnsignedFlag = 0x10,
|
|
|
|
QuadFlag = 0x20
|
|
|
|
};
|
|
|
|
uint32_t Flags;
|
|
|
|
|
|
|
|
public:
|
|
|
|
enum EltType {
|
|
|
|
Int8,
|
|
|
|
Int16,
|
|
|
|
Int32,
|
|
|
|
Int64,
|
|
|
|
Poly8,
|
|
|
|
Poly16,
|
2013-12-22 00:07:40 +00:00
|
|
|
Poly64,
|
2014-11-24 09:15:30 +00:00
|
|
|
Poly128,
|
2012-04-14 14:01:31 +00:00
|
|
|
Float16,
|
2013-12-22 00:07:40 +00:00
|
|
|
Float32,
|
|
|
|
Float64
|
2012-04-14 14:01:31 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
NeonTypeFlags(unsigned F) : Flags(F) {}
|
|
|
|
NeonTypeFlags(EltType ET, bool IsUnsigned, bool IsQuad) : Flags(ET) {
|
|
|
|
if (IsUnsigned)
|
|
|
|
Flags |= UnsignedFlag;
|
|
|
|
if (IsQuad)
|
|
|
|
Flags |= QuadFlag;
|
|
|
|
}
|
|
|
|
|
|
|
|
EltType getEltType() const { return (EltType)(Flags & EltTypeMask); }
|
|
|
|
bool isPoly() const {
|
|
|
|
EltType ET = getEltType();
|
|
|
|
return ET == Poly8 || ET == Poly16;
|
|
|
|
}
|
|
|
|
bool isUnsigned() const { return (Flags & UnsignedFlag) != 0; }
|
|
|
|
bool isQuad() const { return (Flags & QuadFlag) != 0; }
|
|
|
|
};
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// Hexagon builtins
|
2012-04-14 14:01:31 +00:00
|
|
|
namespace Hexagon {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsHexagon.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2012-08-15 20:02:54 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// MIPS builtins
|
2012-08-15 20:02:54 +00:00
|
|
|
namespace Mips {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsMips.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2013-12-22 00:07:40 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// XCore builtins
|
2013-12-22 00:07:40 +00:00
|
|
|
namespace XCore {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsXCore.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2015-01-18 16:23:48 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// Le64 builtins
|
2015-01-18 16:23:48 +00:00
|
|
|
namespace Le64 {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsLe64.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// SystemZ builtins
|
2015-05-27 18:47:56 +00:00
|
|
|
namespace SystemZ {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsSystemZ.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
2015-12-30 11:49:41 +00:00
|
|
|
|
2018-07-28 11:06:01 +00:00
|
|
|
/// WebAssembly builtins
|
2015-12-30 11:49:41 +00:00
|
|
|
namespace WebAssembly {
|
|
|
|
enum {
|
|
|
|
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
|
|
|
|
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
|
|
|
|
#include "clang/Basic/BuiltinsWebAssembly.def"
|
|
|
|
LastTSBuiltin
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2009-06-02 17:58:47 +00:00
|
|
|
} // end namespace clang.
|
|
|
|
|
|
|
|
#endif
|