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"
75 } MMX3DNowLevel = NoMMX3DNow;
76 enum XOPEnum { NoXOP, SSE4A, FMA4, XOP } XOPLevel = NoXOP;
81 bool HasPCLMUL =
false;
82 bool HasVPCLMULQDQ =
false;
84 bool HasLZCNT =
false;
85 bool HasRDRND =
false;
86 bool HasFSGSBASE =
false;
89 bool HasPOPCNT =
false;
91 bool HasPRFCHW =
false;
92 bool HasRDSEED =
false;
98 bool HasAVX10_1 =
false;
99 bool HasAVX10_1_512 =
false;
100 bool HasEVEX512 =
false;
101 bool HasAVX512CD =
false;
102 bool HasAVX512VPOPCNTDQ =
false;
103 bool HasAVX512VNNI =
false;
104 bool HasAVX512FP16 =
false;
105 bool HasAVX512BF16 =
false;
106 bool HasAVX512ER =
false;
107 bool HasAVX512PF =
false;
108 bool HasAVX512DQ =
false;
109 bool HasAVX512BITALG =
false;
110 bool HasAVX512BW =
false;
111 bool HasAVX512VL =
false;
112 bool HasAVX512VBMI =
false;
113 bool HasAVX512VBMI2 =
false;
114 bool HasAVXIFMA =
false;
115 bool HasAVX512IFMA =
false;
116 bool HasAVX512VP2INTERSECT =
false;
118 bool HasSHA512 =
false;
119 bool HasSHSTK =
false;
124 bool HasCX16 =
false;
125 bool HasFXSR =
false;
126 bool HasXSAVE =
false;
127 bool HasXSAVEOPT =
false;
128 bool HasXSAVEC =
false;
129 bool HasXSAVES =
false;
130 bool HasMWAITX =
false;
131 bool HasCLZERO =
false;
132 bool HasCLDEMOTE =
false;
133 bool HasPCONFIG =
false;
135 bool HasCLFLUSHOPT =
false;
136 bool HasCLWB =
false;
137 bool HasMOVBE =
false;
138 bool HasPREFETCHI =
false;
139 bool HasPREFETCHWT1 =
false;
140 bool HasRDPID =
false;
141 bool HasRDPRU =
false;
142 bool HasRetpolineExternalThunk =
false;
143 bool HasLAHFSAHF =
false;
144 bool HasWBNOINVD =
false;
145 bool HasWAITPKG =
false;
146 bool HasMOVDIRI =
false;
147 bool HasMOVDIR64B =
false;
148 bool HasPTWRITE =
false;
149 bool HasINVPCID =
false;
150 bool HasENQCMD =
false;
151 bool HasAVXVNNIINT16 =
false;
152 bool HasAMXFP16 =
false;
153 bool HasCMPCCXADD =
false;
154 bool HasRAOINT =
false;
155 bool HasAVXVNNIINT8 =
false;
156 bool HasAVXNECONVERT =
false;
158 bool HasWIDEKL =
false;
159 bool HasHRESET =
false;
160 bool HasAVXVNNI =
false;
161 bool HasAMXTILE =
false;
162 bool HasAMXINT8 =
false;
163 bool HasAMXBF16 =
false;
164 bool HasAMXCOMPLEX =
false;
165 bool HasSERIALIZE =
false;
166 bool HasTSXLDTRK =
false;
167 bool HasUSERMSR =
false;
168 bool HasUINTR =
false;
169 bool HasCRC32 =
false;
171 bool HasEGPR =
false;
172 bool HasPush2Pop2 =
false;
175 bool HasCCMP =
false;
179 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
181 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
186 BFloat16Width = BFloat16Align = 16;
187 BFloat16Format = &llvm::APFloat::BFloat();
188 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
191 HasUnalignedAccess =
true;
194 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
200 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
205 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
206 : LangOptions::FPEvalMethodKind::FEM_Source;
221 return RegName.equals(
"esp") || RegName.equals(
"rsp");
228 bool validateCpuSupports(StringRef FeatureStr)
const override;
230 bool validateCpuIs(StringRef FeatureStr)
const override;
232 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
234 char CPUSpecificManglingCharacter(StringRef Name)
const override;
236 void getCPUSpecificCPUDispatchFeatures(
240 std::optional<unsigned> getCPUCacheLineSize()
const override;
242 bool validateAsmConstraint(
const char *&Name,
246 bool &HasSizeMismatch)
const override {
249 if (RegName.equals(
"esp") || RegName.equals(
"ebp")) {
251 HasSizeMismatch = RegSize != 32;
258 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
259 StringRef Constraint,
unsigned Size)
const override;
261 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
262 StringRef Constraint,
unsigned Size)
const override;
266 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
268 return TargetInfo::checkCFProtectionReturnSupported(Diags);
273 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
275 return TargetInfo::checkCFProtectionBranchSupported(Diags);
278 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
279 StringRef Constraint,
unsigned Size)
const;
281 std::string convertConstraint(
const char *&Constraint)
const override;
283 return "~{dirflag},~{fpsr},~{flags}";
288 StringRef::iterator I, E;
289 for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) {
290 if (isalpha(*I) || *I ==
'@')
314 if ((++I != E) && ((*I ==
'0') || (*I ==
'z')))
330 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
331 bool Enabled)
const final;
336 const std::vector<std::string> &FeaturesVec)
const override;
338 bool isValidFeatureName(StringRef Name)
const override;
340 bool hasFeature(StringRef Feature)
const final;
342 bool handleTargetFeatures(std::vector<std::string> &Features,
346 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
348 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
350 if (getTriple().getArch() == llvm::Triple::x86 &&
351 MMX3DNowLevel == NoMMX3DNow)
361 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
362 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
366 if (Name ==
"generic")
372 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
378 bool setCPU(
const std::string &Name)
override {
379 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
380 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
381 return CPU != llvm::X86::CK_None;
384 unsigned multiVersionSortPriority(StringRef Name)
const override;
386 bool setFPMath(StringRef Name)
override;
389 return getTriple().getArch() != llvm::Triple::x86;
425 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
428 if (TargetAddrSpace ==
ptr64)
434 return getPointerWidthV(AddrSpace);
444 DoubleAlign = LongLongAlign = 32;
445 LongDoubleWidth = 96;
446 LongDoubleAlign = 32;
448 resetDataLayout(Triple.isOSBinFormatMachO()
449 ?
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
450 "128-f64:32:64-f80:32-n8:16:32-S128"
451 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
452 "128-f64:32:64-f80:32-n8:16:32-S128",
453 Triple.isOSBinFormatMachO() ?
"_" :
"");
454 SizeType = UnsignedInt;
455 PtrDiffType = SignedInt;
456 IntPtrType = SignedInt;
460 RealTypeUsesObjCFPRetMask =
461 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
462 FloatModeKind::LongDouble);
465 MaxAtomicPromoteWidth = 64;
466 MaxAtomicInlineWidth = 32;
470 return TargetInfo::CharPtrBuiltinVaList;
482 StringRef Constraint,
unsigned Size)
const override {
483 switch (Constraint[0]) {
500 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
505 MaxAtomicInlineWidth = 64;
512 return llvm::IntegerType::MAX_INT_BITS;
523 VersionTuple OsVersion = getTriple().getOSVersion();
525 if (OsVersion >= VersionTuple(6, 99, 26) || OsVersion.getMajor() == 0)
526 return X86_32TargetInfo::getFPEvalMethod();
528 return LangOptions::FPEvalMethodKind::FEM_Double;
537 SizeType = UnsignedLong;
538 IntPtrType = SignedLong;
539 PtrDiffType = SignedLong;
548 LongDoubleWidth = 128;
549 LongDoubleAlign = 128;
551 MaxVectorAlign = 256;
553 llvm::Triple
T = llvm::Triple(Triple);
555 UseSignedCharForObjCBool =
false;
556 SizeType = UnsignedLong;
557 IntPtrType = SignedLong;
558 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-"
559 "f64:32:64-f80:128-n8:16:32-S128",
561 HasAlignMac68kSupport =
true;
582 DoubleAlign = LongLongAlign = 64;
584 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
585 bool IsMSVC = getTriple().isWindowsMSVCEnvironment();
586 std::string Layout = IsWinCOFF ?
"e-m:x" :
"e-m:e";
587 Layout +=
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-";
588 Layout += IsMSVC ?
"f80:128" :
"f80:32";
589 Layout +=
"-n8:16:32-a:0:32-S32";
590 resetDataLayout(Layout, IsWinCOFF ?
"_" :
"");
601 LongDoubleWidth = LongDoubleAlign = 64;
602 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
607 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
611 Builder.defineMacro(
"_M_IX86",
"600");
626 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
627 Builder.defineMacro(
"_X86_");
636 this->WCharType = TargetInfo::UnsignedShort;
637 DoubleAlign = LongLongAlign = 64;
638 resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-"
639 "i128:128-f80:32-n8:16:32-a:0:32-S32",
645 X86_32TargetInfo::getTargetDefines(Opts, Builder);
646 Builder.defineMacro(
"_X86_");
647 Builder.defineMacro(
"__CYGWIN__");
648 Builder.defineMacro(
"__CYGWIN32__");
652 Builder.defineMacro(
"_GNU_SOURCE");
666 Builder.defineMacro(
"__INTEL__");
675 LongDoubleWidth = 64;
676 DefaultAlignForAttributeAligned = 32;
677 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
678 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-"
679 "f64:32-f128:32-n8:16:32-a:0:32-S32");
680 WIntType = UnsignedInt;
685 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
690 X86_32TargetInfo::getTargetDefines(Opts, Builder);
691 Builder.defineMacro(
"__iamcu");
692 Builder.defineMacro(
"__iamcu__");
703 SizeType = UnsignedLong;
704 IntPtrType = SignedLong;
705 PtrDiffType = SignedLong;
710 X86_32TargetInfo::getTargetDefines(Opts, Builder);
711 Builder.defineMacro(
"__INTEL__");
712 Builder.defineMacro(
"__rtems__");
721 const bool IsX32 = getTriple().isX32();
723 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
724 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
725 LongDoubleWidth = 128;
726 LongDoubleAlign = 128;
727 LargeArrayMinWidth = 128;
728 LargeArrayAlign = 128;
730 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
731 PtrDiffType = IsX32 ? SignedInt : SignedLong;
732 IntPtrType = IsX32 ? SignedInt : SignedLong;
733 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
734 Int64Type = IsX32 ? SignedLongLong : SignedLong;
738 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
739 "i64:64-i128:128-f80:128-n8:16:32:64-S128"
740 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:"
741 "64-i128:128-f80:128-n8:16:32:64-S128"
742 :
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:"
743 "64-i128:128-f80:128-n8:16:32:64-S128");
746 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
749 ComplexLongDoubleUsesFP2Ret =
true;
752 HasBuiltinMSVaList =
true;
755 MaxAtomicPromoteWidth = 128;
756 MaxAtomicInlineWidth = 64;
760 return TargetInfo::X86_64ABIBuiltinVaList;
802 bool &HasSizeMismatch)
const override {
805 if (RegName.equals(
"rsp") || RegName.equals(
"rbp")) {
807 HasSizeMismatch = RegSize != 64;
812 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
818 MaxAtomicInlineWidth = 128;
825 return llvm::IntegerType::MAX_INT_BITS;
835 LongWidth = LongAlign = 32;
836 DoubleAlign = LongLongAlign = 64;
837 IntMaxType = SignedLongLong;
838 Int64Type = SignedLongLong;
839 SizeType = UnsignedLongLong;
840 PtrDiffType = SignedLongLong;
841 IntPtrType = SignedLongLong;
845 return TargetInfo::CharPtrBuiltinVaList;
879 LongDoubleWidth = LongDoubleAlign = 64;
880 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
885 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
886 Builder.defineMacro(
"_M_X64",
"100");
887 Builder.defineMacro(
"_M_AMD64",
"100");
892 return CCK_MicrosoftWin64;
904 LongDoubleWidth = LongDoubleAlign = 128;
905 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
915 this->WCharType = TargetInfo::UnsignedShort;
916 TLSSupported =
false;
921 X86_64TargetInfo::getTargetDefines(Opts, Builder);
922 Builder.defineMacro(
"__x86_64__");
923 Builder.defineMacro(
"__CYGWIN__");
924 Builder.defineMacro(
"__CYGWIN64__");
928 Builder.defineMacro(
"_GNU_SOURCE");
937 Int64Type = SignedLongLong;
939 llvm::Triple
T = llvm::Triple(Triple);
941 UseSignedCharForObjCBool =
false;
942 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-"
943 "f80:128-n8:16:32:64-S128",
964 IntMaxType = SignedLongLong;
965 Int64Type = SignedLongLong;
976 LongDoubleWidth = 64;
977 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
987 LongDoubleFormat = &llvm::APFloat::IEEEquad();
998 LongDoubleWidth = 64;
999 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
1009 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)
LangOptions::FPEvalMethodKind getFPEvalMethod() const override
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.