13#ifndef LLVM_CLANG_LIB_BASIC_TARGETS_X86_H
14#define LLVM_CLANG_LIB_BASIC_TARGETS_X86_H
20#include "llvm/Support/Compiler.h"
21#include "llvm/TargetParser/Triple.h"
22#include "llvm/TargetParser/X86TargetParser.h"
71 enum XOPEnum { NoXOP, SSE4A, FMA4, XOP } XOPLevel = NoXOP;
76 bool HasPCLMUL =
false;
77 bool HasVPCLMULQDQ =
false;
79 bool HasLZCNT =
false;
80 bool HasRDRND =
false;
81 bool HasFSGSBASE =
false;
84 bool HasPOPCNT =
false;
86 bool HasPRFCHW =
false;
87 bool HasRDSEED =
false;
93 bool HasAVX10_1 =
false;
94 bool HasAVX10_1_512 =
false;
95 bool HasEVEX512 =
false;
96 bool HasAVX512CD =
false;
97 bool HasAVX512VPOPCNTDQ =
false;
98 bool HasAVX512VNNI =
false;
99 bool HasAVX512FP16 =
false;
100 bool HasAVX512BF16 =
false;
101 bool HasAVX512DQ =
false;
102 bool HasAVX512BITALG =
false;
103 bool HasAVX512BW =
false;
104 bool HasAVX512VL =
false;
105 bool HasAVX512VBMI =
false;
106 bool HasAVX512VBMI2 =
false;
107 bool HasAVXIFMA =
false;
108 bool HasAVX512IFMA =
false;
109 bool HasAVX512VP2INTERSECT =
false;
111 bool HasSHA512 =
false;
112 bool HasSHSTK =
false;
117 bool HasCX16 =
false;
118 bool HasFXSR =
false;
119 bool HasXSAVE =
false;
120 bool HasXSAVEOPT =
false;
121 bool HasXSAVEC =
false;
122 bool HasXSAVES =
false;
123 bool HasMWAITX =
false;
124 bool HasCLZERO =
false;
125 bool HasCLDEMOTE =
false;
126 bool HasPCONFIG =
false;
128 bool HasCLFLUSHOPT =
false;
129 bool HasCLWB =
false;
130 bool HasMOVBE =
false;
131 bool HasPREFETCHI =
false;
132 bool HasRDPID =
false;
133 bool HasRDPRU =
false;
134 bool HasRetpolineExternalThunk =
false;
135 bool HasLAHFSAHF =
false;
136 bool HasWBNOINVD =
false;
137 bool HasWAITPKG =
false;
138 bool HasMOVDIRI =
false;
139 bool HasMOVDIR64B =
false;
140 bool HasPTWRITE =
false;
141 bool HasINVPCID =
false;
142 bool HasENQCMD =
false;
143 bool HasAVXVNNIINT16 =
false;
144 bool HasAMXFP16 =
false;
145 bool HasCMPCCXADD =
false;
146 bool HasRAOINT =
false;
147 bool HasAVXVNNIINT8 =
false;
148 bool HasAVXNECONVERT =
false;
150 bool HasWIDEKL =
false;
151 bool HasHRESET =
false;
152 bool HasAVXVNNI =
false;
153 bool HasAMXTILE =
false;
154 bool HasAMXINT8 =
false;
155 bool HasAMXBF16 =
false;
156 bool HasAMXCOMPLEX =
false;
157 bool HasSERIALIZE =
false;
158 bool HasTSXLDTRK =
false;
159 bool HasUSERMSR =
false;
160 bool HasUINTR =
false;
161 bool HasCRC32 =
false;
163 bool HasEGPR =
false;
164 bool HasPush2Pop2 =
false;
167 bool HasCCMP =
false;
171 bool HasInlineAsmUseGPR32 =
false;
172 bool HasBranchHint =
false;
175 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
177 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
182 BFloat16Width = BFloat16Align = 16;
183 BFloat16Format = &llvm::APFloat::BFloat();
184 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
187 HasUnalignedAccess =
true;
190 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
196 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
201 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
202 : LangOptions::FPEvalMethodKind::FEM_Source;
217 return RegName ==
"esp" || RegName ==
"rsp";
224 bool validateCpuSupports(StringRef FeatureStr)
const override;
226 bool validateCpuIs(StringRef FeatureStr)
const override;
228 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
230 char CPUSpecificManglingCharacter(StringRef Name)
const override;
232 void getCPUSpecificCPUDispatchFeatures(
236 std::optional<unsigned> getCPUCacheLineSize()
const override;
238 bool validateAsmConstraint(
const char *&Name,
242 bool &HasSizeMismatch)
const override {
245 if (RegName ==
"esp" || RegName ==
"ebp") {
247 HasSizeMismatch = RegSize != 32;
254 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
255 StringRef Constraint,
unsigned Size)
const override;
257 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
258 StringRef Constraint,
unsigned Size)
const override;
262 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
264 return TargetInfo::checkCFProtectionReturnSupported(Diags);
269 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
271 return TargetInfo::checkCFProtectionBranchSupported(Diags);
274 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
275 StringRef Constraint,
unsigned Size)
const;
277 std::string convertConstraint(
const char *&Constraint)
const override;
279 return "~{dirflag},~{fpsr},~{flags}";
284 StringRef::iterator I,
E;
285 for (I = Constraint.begin(),
E = Constraint.end(); I !=
E; ++I) {
286 if (isalpha(*I) || *I ==
'@')
310 if ((++I !=
E) && ((*I ==
'0') || (*I ==
'z')))
326 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
327 bool Enabled)
const final;
332 const std::vector<std::string> &FeaturesVec)
const override;
334 bool isValidFeatureName(StringRef Name)
const override;
336 bool hasFeature(StringRef Feature)
const final;
338 bool handleTargetFeatures(std::vector<std::string> &Features,
342 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
344 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
346 if (getTriple().getArch() == llvm::Triple::x86 && !HasMMX)
356 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
357 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
361 if (Name ==
"generic")
367 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
373 bool setCPU(
const std::string &Name)
override {
374 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
375 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
376 return CPU != llvm::X86::CK_None;
379 unsigned multiVersionSortPriority(StringRef Name)
const override;
381 bool setFPMath(StringRef Name)
override;
384 return getTriple().getArch() != llvm::Triple::x86;
420 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
423 if (TargetAddrSpace ==
ptr64)
429 return getPointerWidthV(AddrSpace);
439 DoubleAlign = LongLongAlign = 32;
440 LongDoubleWidth = 96;
441 LongDoubleAlign = 32;
443 resetDataLayout(Triple.isOSBinFormatMachO()
444 ?
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
445 "128-f64:32:64-f80:32-n8:16:32-S128"
446 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
447 "128-f64:32:64-f80:32-n8:16:32-S128",
448 Triple.isOSBinFormatMachO() ?
"_" :
"");
449 SizeType = UnsignedInt;
450 PtrDiffType = SignedInt;
451 IntPtrType = SignedInt;
455 RealTypeUsesObjCFPRetMask =
456 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
457 FloatModeKind::LongDouble);
460 MaxAtomicPromoteWidth = 64;
461 MaxAtomicInlineWidth = 32;
465 return TargetInfo::CharPtrBuiltinVaList;
477 StringRef Constraint,
unsigned Size)
const override {
478 switch (Constraint[0]) {
495 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
500 MaxAtomicInlineWidth = 64;
507 return llvm::IntegerType::MAX_INT_BITS;
523 SizeType = UnsignedLong;
524 IntPtrType = SignedLong;
525 PtrDiffType = SignedLong;
534 LongDoubleWidth = 128;
535 LongDoubleAlign = 128;
537 MaxVectorAlign = 256;
539 llvm::Triple
T = llvm::Triple(Triple);
541 UseSignedCharForObjCBool =
false;
542 SizeType = UnsignedLong;
543 IntPtrType = SignedLong;
544 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-"
545 "f64:32:64-f80:128-n8:16:32-S128",
547 HasAlignMac68kSupport =
true;
568 DoubleAlign = LongLongAlign = 64;
570 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
571 bool IsMSVC = getTriple().isWindowsMSVCEnvironment();
572 std::string Layout = IsWinCOFF ?
"e-m:x" :
"e-m:e";
573 Layout +=
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-";
574 Layout += IsMSVC ?
"f80:128" :
"f80:32";
575 Layout +=
"-n8:16:32-a:0:32-S32";
576 resetDataLayout(Layout, IsWinCOFF ?
"_" :
"");
587 LongDoubleWidth = LongDoubleAlign = 64;
588 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
593 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
597 Builder.defineMacro(
"_M_IX86",
"600");
612 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
613 Builder.defineMacro(
"_X86_");
622 this->WCharType = TargetInfo::UnsignedShort;
623 DoubleAlign = LongLongAlign = 64;
624 resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-"
625 "i128:128-f80:32-n8:16:32-a:0:32-S32",
631 X86_32TargetInfo::getTargetDefines(Opts, Builder);
632 Builder.defineMacro(
"_X86_");
633 Builder.defineMacro(
"__CYGWIN__");
634 Builder.defineMacro(
"__CYGWIN32__");
638 Builder.defineMacro(
"_GNU_SOURCE");
652 Builder.defineMacro(
"__INTEL__");
661 LongDoubleWidth = 64;
662 DefaultAlignForAttributeAligned = 32;
663 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
664 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-"
665 "f64:32-f128:32-n8:16:32-a:0:32-S32");
666 WIntType = UnsignedInt;
671 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
676 X86_32TargetInfo::getTargetDefines(Opts, Builder);
677 Builder.defineMacro(
"__iamcu");
678 Builder.defineMacro(
"__iamcu__");
689 SizeType = UnsignedLong;
690 IntPtrType = SignedLong;
691 PtrDiffType = SignedLong;
696 X86_32TargetInfo::getTargetDefines(Opts, Builder);
697 Builder.defineMacro(
"__INTEL__");
698 Builder.defineMacro(
"__rtems__");
707 const bool IsX32 = getTriple().isX32();
709 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
710 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
711 LongDoubleWidth = 128;
712 LongDoubleAlign = 128;
713 LargeArrayMinWidth = 128;
714 LargeArrayAlign = 128;
716 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
717 PtrDiffType = IsX32 ? SignedInt : SignedLong;
718 IntPtrType = IsX32 ? SignedInt : SignedLong;
719 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
720 Int64Type = IsX32 ? SignedLongLong : SignedLong;
724 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
725 "i64:64-i128:128-f80:128-n8:16:32:64-S128"
726 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:"
727 "64-i128:128-f80:128-n8:16:32:64-S128"
728 :
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:"
729 "64-i128:128-f80:128-n8:16:32:64-S128");
732 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
735 ComplexLongDoubleUsesFP2Ret =
true;
738 HasBuiltinMSVaList =
true;
741 MaxAtomicPromoteWidth = 128;
742 MaxAtomicInlineWidth = 64;
746 return TargetInfo::X86_64ABIBuiltinVaList;
788 bool &HasSizeMismatch)
const override {
791 if (RegName ==
"rsp" || RegName ==
"rbp") {
793 HasSizeMismatch = RegSize != 64;
798 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
804 MaxAtomicInlineWidth = 128;
811 return llvm::IntegerType::MAX_INT_BITS;
821 LongWidth = LongAlign = 32;
822 DoubleAlign = LongLongAlign = 64;
823 IntMaxType = SignedLongLong;
824 Int64Type = SignedLongLong;
825 SizeType = UnsignedLongLong;
826 PtrDiffType = SignedLongLong;
827 IntPtrType = SignedLongLong;
831 return TargetInfo::CharPtrBuiltinVaList;
865 LongDoubleWidth = LongDoubleAlign = 64;
866 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
871 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
872 Builder.defineMacro(
"_M_X64",
"100");
873 Builder.defineMacro(
"_M_AMD64",
"100");
878 return CCK_MicrosoftWin64;
890 LongDoubleWidth = LongDoubleAlign = 128;
891 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
901 this->WCharType = TargetInfo::UnsignedShort;
902 TLSSupported =
false;
907 X86_64TargetInfo::getTargetDefines(Opts, Builder);
908 Builder.defineMacro(
"__x86_64__");
909 Builder.defineMacro(
"__CYGWIN__");
910 Builder.defineMacro(
"__CYGWIN64__");
914 Builder.defineMacro(
"_GNU_SOURCE");
923 Int64Type = SignedLongLong;
925 llvm::Triple
T = llvm::Triple(Triple);
927 UseSignedCharForObjCBool =
false;
928 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-"
929 "f80:128-n8:16:32:64-S128",
950 IntMaxType = SignedLongLong;
951 Int64Type = SignedLongLong;
962 LongDoubleWidth = 64;
963 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
973 LongDoubleFormat = &llvm::APFloat::IEEEquad();
984 LongDoubleWidth = 64;
985 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
995 LongDoubleFormat = &llvm::APFloat::IEEEquad();
Provides LLVM's BitmaskEnum facility to enumeration types declared in namespace clang.
static unsigned getCharWidth(tok::TokenKind kind, const TargetInfo &Target)
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.
FPEvalMethodKind
Possible float expression evaluation method choices.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Exposes information about the current target.
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
Options for controlling the target.
AndroidX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
AndroidX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CygwinX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CygwinX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
DarwinI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
DarwinX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
HaikuX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MCUX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
bool allowsLargerPreferedTypeAlignment() const override
Whether target allows to overalign ABI-specified preferred alignment.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MicrosoftX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override
MicrosoftX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MinGWX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
MinGWX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
NetBSDI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OHOSX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OHOSX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OpenBSDI386TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
OpenBSDX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
RTEMSX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
X86TargetInfo::getTargetDefines - Return the set of the X86-specific macro definitions for this parti...
WindowsX86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
WindowsX86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
BuiltinVaListKind getBuiltinVaListKind() const override
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
bool isSPRegName(StringRef RegName) const override
bool isValidTuneCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name for tuning.
bool supportsCpuSupports() const override
bool isValidCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name.
bool setCPU(const std::string &Name) override
Target the specified CPU.
X86TargetInfo(const llvm::Triple &Triple, const TargetOptions &)
bool supportsExtendIntArgs() const override
Whether the option -fextend-arguments={32,64} is supported on the target.
CallingConv getDefaultCallingConv() const override
Gets the default calling convention for the given target and declaration context.
bool useFP16ConversionIntrinsics() const override
Check whether llvm intrinsics such as llvm.convert.to.fp16 should be used to convert to and from __fp...
bool hasSjLjLowering() const override
Controls if __builtin_longjmp / __builtin_setjmp can be lowered to llvm.eh.sjlj.longjmp / llvm....
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
bool supportsCpuIs() const override
bool supportsCpuInit() const override
bool checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const override
Check if the target supports CFProtection branch.
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...
std::string_view getClobbers() const override
Returns a string of target-specific clobbers, in LLVM format.
bool supportSourceEvalMethod() const override
bool checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const override
Check if the target supports CFProtection return.
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
Return the value for the C99 FLT_EVAL_METHOD macro.
uint64_t getPointerWidthV(LangAS AS) const override
void setSupportedOpenCLOpts() override
Set supported OpenCL extensions and optional core features.
bool supportsTargetAttributeTune() const override
Determine whether this TargetInfo supports tune in target attribute.
const char * getLongDoubleMangling() const override
Return the mangled code of long double.
bool checkArithmeticFenceSupported() const override
Controls if __arithmetic_fence is supported in the targeted backend.
bool validateGlobalRegisterVariable(StringRef RegName, unsigned RegSize, bool &HasSizeMismatch) const override
Validate register name used for global register variables.
StringRef getABI() const override
Get the ABI currently in use.
ArrayRef< TargetInfo::GCCRegAlias > getGCCRegAliases() const override
uint64_t getPointerAlignV(LangAS AddrSpace) const override
X86_32TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
size_t getMaxBitIntWidth() const override
void setMaxAtomicWidth() override
Set the maximum inline or promote width lock-free atomic operation for the given target.
int getEHDataRegisterNumber(unsigned RegNo) const override
Return the register number that __builtin_eh_return_regno would return with the specified argument.
bool hasBitIntType() const override
Determine whether the _BitInt type is supported on this target.
bool validateOperandSize(const llvm::StringMap< bool > &FeatureMap, StringRef Constraint, unsigned Size) const override
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
bool validateGlobalRegisterVariable(StringRef RegName, unsigned RegSize, bool &HasSizeMismatch) const override
Validate register name used for global register variables.
bool hasInt128Type() const override
Determine whether the __int128 type is supported on this target.
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
CallingConv getDefaultCallingConv() const override
Gets the default calling convention for the given target and declaration context.
bool hasBitIntType() const override
Determine whether the _BitInt type is supported on this target.
int getEHDataRegisterNumber(unsigned RegNo) const override
Return the register number that __builtin_eh_return_regno would return with the specified argument.
void setMaxAtomicWidth() override
Set the maximum inline or promote width lock-free atomic operation for the given target.
size_t getMaxBitIntWidth() const override
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
X86_64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
unsigned getUnwindWordWidth() const override
unsigned getRegisterWidth() const override
Return the "preferred" register width on this target.
Defines the clang::TargetInfo interface.
static const unsigned X86AddrSpaceMap[]
void DefineStd(MacroBuilder &Builder, StringRef MacroName, const LangOptions &Opts)
DefineStd - Define a macro name and standard variants.
void addCygMingDefines(const LangOptions &Opts, MacroBuilder &Builder)
The JSON file list parser is used to communicate input to InstallAPI.
LangAS
Defines the address space values used by the address space qualifier of QualType.
const FunctionProtoType * T
CallingConv
CallingConv - Specifies the calling convention that a function uses.