13#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_ARM_H
14#define LLVM_CLANG_LIB_BASIC_TARGETS_ARM_H
19#include "llvm/Support/Compiler.h"
20#include "llvm/TargetParser/ARMTargetParser.h"
21#include "llvm/TargetParser/ARMTargetParserCommon.h"
22#include "llvm/TargetParser/Triple.h"
43 enum HWDivMode { HWDivThumb = (1 << 0), HWDivARM = (1 << 1) };
45 static bool FPUModeIsVFP(FPUMode Mode) {
46 return Mode & (VFP2FPU | VFP3FPU | VFP4FPU | NeonFPU | FPARMV8);
50 static const char *
const GCCRegNames[];
57 enum { FP_Default, FP_VFP, FP_Neon } FPMath;
59 llvm::ARM::ISAKind ArchISA;
60 llvm::ARM::ArchKind ArchKind = llvm::ARM::ArchKind::ARMV4T;
61 llvm::ARM::ProfileKind ArchProfile;
64 LLVM_PREFERRED_TYPE(FPUMode)
66 LLVM_PREFERRED_TYPE(MVEMode)
69 LLVM_PREFERRED_TYPE(
bool)
71 LLVM_PREFERRED_TYPE(HWDivMode)
75 LLVM_PREFERRED_TYPE(
bool)
76 unsigned SoftFloat : 1;
77 LLVM_PREFERRED_TYPE(
bool)
78 unsigned SoftFloatABI : 1;
80 LLVM_PREFERRED_TYPE(
bool)
82 LLVM_PREFERRED_TYPE(
bool)
84 LLVM_PREFERRED_TYPE(
bool)
86 LLVM_PREFERRED_TYPE(
bool)
88 LLVM_PREFERRED_TYPE(
bool)
90 LLVM_PREFERRED_TYPE(
bool)
92 LLVM_PREFERRED_TYPE(
bool)
93 unsigned HasMatMul : 1;
94 LLVM_PREFERRED_TYPE(
bool)
95 unsigned FPRegsDisabled : 1;
96 LLVM_PREFERRED_TYPE(
bool)
98 LLVM_PREFERRED_TYPE(
bool)
114 FEATURE_COPROC_B1 = (1 << 0),
117 FEATURE_COPROC_B2 = (1 << 1),
119 FEATURE_COPROC_B3 = (1 << 2),
121 FEATURE_COPROC_B4 = (1 << 3),
125 void setABIAPCS(
bool IsAAPCS16);
128 void setArchInfo(llvm::ARM::ArchKind Kind);
132 bool isThumb()
const;
133 bool supportsThumb()
const;
134 bool supportsThumb2()
const;
136 bool hasMVEFloat()
const;
139 StringRef getCPUAttr()
const;
140 StringRef getCPUProfile()
const;
145 StringRef
getABI()
const override;
146 bool setABI(
const std::string &Name)
override;
152 StringRef &Err)
const override;
158 const std::vector<std::string> &FeaturesVec)
const override;
163 return Feature !=
"soft-float-abi";
166 bool handleTargetFeatures(std::vector<std::string> &Features,
171 bool hasBFloat16Type()
const override;
173 bool isValidCPUName(StringRef Name)
const override;
176 bool setCPU(
const std::string &Name)
override;
178 bool setFPMath(StringRef Name)
override;
184 void getTargetDefinesARMV81A(
const LangOptions &Opts,
186 void getTargetDefinesARMV82A(
const LangOptions &Opts,
188 void getTargetDefinesARMV83A(
const LangOptions &Opts,
195 bool isCLZForZeroUndef()
const override;
196 BuiltinVaListKind getBuiltinVaListKind()
const override;
200 bool validateAsmConstraint(
const char *&Name,
202 std::string convertConstraint(
const char *&Constraint)
const override;
204 validateConstraintModifier(StringRef Constraint,
char Modifier,
unsigned Size,
205 std::string &SuggestedModifier)
const override;
206 std::string_view getClobbers()
const override;
213 CallingConvCheckResult checkCallingConvention(
CallingConv CC)
const override;
215 int getEHDataRegisterNumber(
unsigned RegNo)
const override;
217 bool hasSjLjLowering()
const override;
226 return std::make_pair(64, 64);
246 const llvm::Triple Triple;
static bool hasFeature(StringRef Feature, const LangOptions &LangOpts, const TargetInfo &Target)
Determine whether a translation unit built using the current language options has the given feature.
Defines the clang::TargetOptions class.
Concrete class used by the front-end to report problems and issues.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
TargetInfo(const llvm::Triple &T)
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
Options for controlling the target.
unsigned getARMLDREXMask() const override
std::pair< unsigned, unsigned > hardwareInterferenceSizes() const override
The first value in the pair is the minimum offset between two objects to avoid false sharing (destruc...
bool hasBitIntType() const override
Determine whether the _BitInt type is supported on this target.
bool initFeatureMap(llvm::StringMap< bool > &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector< std::string > &FeaturesVec) const override
Initialize the map with the default set of target features for the CPU this should include all legal ...
const char * getBFloat16Mangling() const override
Return the mangled code of bfloat.
bool setABI(const std::string &Name) override
Use the specified ABI.
StringRef getABI() const override
Get the ABI currently in use.
bool validateBranchProtection(StringRef Spec, StringRef Arch, BranchProtectionInfo &BPI, const LangOptions &LO, StringRef &Err) const override
Determine if this TargetInfo supports the given branch protection specification.
ARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool isValidFeatureName(StringRef Feature) const override
Determine whether this TargetInfo supports the given feature.
StringRef getConstraintRegister(StringRef Constraint, StringRef Expression) const override
Extracts a register from the passed constraint (if it is a single-register constraint) and the asm la...
bool useFP16ConversionIntrinsics() const override
Check whether llvm intrinsics such as llvm.convert.to.fp16 should be used to convert to and from __fp...
bool isBranchProtectionSupportedArch(StringRef Arch) const override
Determine if the Architecture in this TargetInfo supports branch protection.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
ARMbeTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
ARMleTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
AppleMachOARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
AppleMachOTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
CygwinARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
DarwinARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
DarwinTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
ItaniumWindowsARMleTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
MicrosoftARMleTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
MinGWARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-— Other target property query methods -----------------------—===//
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
void getVisualStudioDefines(const LangOptions &Opts, MacroBuilder &Builder) const
WindowsARMTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WindowsTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
Defines the clang::TargetInfo interface.
The JSON file list parser is used to communicate input to InstallAPI.
CallingConv
CallingConv - Specifies the calling convention that a function uses.