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 HasEVEX512 =
false;
99 bool HasAVX512CD =
false;
100 bool HasAVX512VPOPCNTDQ =
false;
101 bool HasAVX512VNNI =
false;
102 bool HasAVX512FP16 =
false;
103 bool HasAVX512BF16 =
false;
104 bool HasAVX512ER =
false;
105 bool HasAVX512PF =
false;
106 bool HasAVX512DQ =
false;
107 bool HasAVX512BITALG =
false;
108 bool HasAVX512BW =
false;
109 bool HasAVX512VL =
false;
110 bool HasAVX512VBMI =
false;
111 bool HasAVX512VBMI2 =
false;
112 bool HasAVXIFMA =
false;
113 bool HasAVX512IFMA =
false;
114 bool HasAVX512VP2INTERSECT =
false;
116 bool HasSHA512 =
false;
117 bool HasSHSTK =
false;
122 bool HasCX16 =
false;
123 bool HasFXSR =
false;
124 bool HasXSAVE =
false;
125 bool HasXSAVEOPT =
false;
126 bool HasXSAVEC =
false;
127 bool HasXSAVES =
false;
128 bool HasMWAITX =
false;
129 bool HasCLZERO =
false;
130 bool HasCLDEMOTE =
false;
131 bool HasPCONFIG =
false;
133 bool HasCLFLUSHOPT =
false;
134 bool HasCLWB =
false;
135 bool HasMOVBE =
false;
136 bool HasPREFETCHI =
false;
137 bool HasPREFETCHWT1 =
false;
138 bool HasRDPID =
false;
139 bool HasRDPRU =
false;
140 bool HasRetpolineExternalThunk =
false;
141 bool HasLAHFSAHF =
false;
142 bool HasWBNOINVD =
false;
143 bool HasWAITPKG =
false;
144 bool HasMOVDIRI =
false;
145 bool HasMOVDIR64B =
false;
146 bool HasPTWRITE =
false;
147 bool HasINVPCID =
false;
148 bool HasENQCMD =
false;
149 bool HasAVXVNNIINT16 =
false;
150 bool HasAMXFP16 =
false;
151 bool HasCMPCCXADD =
false;
152 bool HasRAOINT =
false;
153 bool HasAVXVNNIINT8 =
false;
154 bool HasAVXNECONVERT =
false;
156 bool HasWIDEKL =
false;
157 bool HasHRESET =
false;
158 bool HasAVXVNNI =
false;
159 bool HasAMXTILE =
false;
160 bool HasAMXINT8 =
false;
161 bool HasAMXBF16 =
false;
162 bool HasAMXCOMPLEX =
false;
163 bool HasSERIALIZE =
false;
164 bool HasTSXLDTRK =
false;
165 bool HasUINTR =
false;
166 bool HasCRC32 =
false;
170 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
172 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
177 BFloat16Width = BFloat16Align = 16;
178 BFloat16Format = &llvm::APFloat::BFloat();
179 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
184 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
190 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
195 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
196 : LangOptions::FPEvalMethodKind::FEM_Source;
211 return RegName.equals(
"esp") || RegName.equals(
"rsp");
214 bool validateCpuSupports(StringRef FeatureStr)
const override;
216 bool validateCpuIs(StringRef FeatureStr)
const override;
218 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
220 char CPUSpecificManglingCharacter(StringRef Name)
const override;
222 void getCPUSpecificCPUDispatchFeatures(
226 std::optional<unsigned> getCPUCacheLineSize()
const override;
228 bool validateAsmConstraint(
const char *&Name,
232 bool &HasSizeMismatch)
const override {
235 if (RegName.equals(
"esp") || RegName.equals(
"ebp")) {
237 HasSizeMismatch = RegSize != 32;
244 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
245 StringRef Constraint,
unsigned Size)
const override;
247 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
248 StringRef Constraint,
unsigned Size)
const override;
252 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
254 return TargetInfo::checkCFProtectionReturnSupported(Diags);
259 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
261 return TargetInfo::checkCFProtectionBranchSupported(Diags);
264 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
265 StringRef Constraint,
unsigned Size)
const;
267 std::string convertConstraint(
const char *&Constraint)
const override;
269 return "~{dirflag},~{fpsr},~{flags}";
274 StringRef::iterator I, E;
275 for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) {
276 if (isalpha(*I) || *I ==
'@')
300 if ((++I != E) && ((*I ==
'0') || (*I ==
'z')))
316 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
317 bool Enabled)
const final;
322 const std::vector<std::string> &FeaturesVec)
const override;
324 bool isValidFeatureName(StringRef Name)
const override;
326 bool hasFeature(StringRef Feature)
const final;
328 bool handleTargetFeatures(std::vector<std::string> &Features,
332 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
334 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
336 if (getTriple().getArch() == llvm::Triple::x86 &&
337 MMX3DNowLevel == NoMMX3DNow)
347 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
348 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
352 if (Name ==
"generic")
358 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
364 bool setCPU(
const std::string &Name)
override {
365 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
366 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
367 return CPU != llvm::X86::CK_None;
370 unsigned multiVersionSortPriority(StringRef Name)
const override;
372 bool setFPMath(StringRef Name)
override;
375 return getTriple().getArch() != llvm::Triple::x86;
411 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
414 if (TargetAddrSpace ==
ptr64)
420 return getPointerWidthV(AddrSpace);
430 DoubleAlign = LongLongAlign = 32;
431 LongDoubleWidth = 96;
432 LongDoubleAlign = 32;
435 Triple.isOSBinFormatMachO()
436 ?
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
437 "f80:32-n8:16:32-S128"
438 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
439 "f80:32-n8:16:32-S128",
440 Triple.isOSBinFormatMachO() ?
"_" :
"");
441 SizeType = UnsignedInt;
442 PtrDiffType = SignedInt;
443 IntPtrType = SignedInt;
447 RealTypeUsesObjCFPRetMask =
448 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
449 FloatModeKind::LongDouble);
452 MaxAtomicPromoteWidth = 64;
453 MaxAtomicInlineWidth = 32;
457 return TargetInfo::CharPtrBuiltinVaList;
469 StringRef Constraint,
unsigned Size)
const override {
470 switch (Constraint[0]) {
487 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
492 MaxAtomicInlineWidth = 64;
499 return llvm::IntegerType::MAX_INT_BITS;
510 VersionTuple OsVersion = getTriple().getOSVersion();
512 if (OsVersion >= VersionTuple(6, 99, 26) || OsVersion.getMajor() == 0)
513 return X86_32TargetInfo::getFPEvalMethod();
515 return LangOptions::FPEvalMethodKind::FEM_Double;
524 SizeType = UnsignedLong;
525 IntPtrType = SignedLong;
526 PtrDiffType = SignedLong;
535 LongDoubleWidth = 128;
536 LongDoubleAlign = 128;
538 MaxVectorAlign = 256;
540 llvm::Triple T = llvm::Triple(Triple);
542 UseSignedCharForObjCBool =
false;
543 SizeType = UnsignedLong;
544 IntPtrType = SignedLong;
545 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
546 "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-";
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-f80:"
625 "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 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
663 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-f64:"
664 "32-f128:32-n8:16:32-a:0:32-S32");
665 WIntType = UnsignedInt;
670 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
675 X86_32TargetInfo::getTargetDefines(Opts, Builder);
676 Builder.defineMacro(
"__iamcu");
677 Builder.defineMacro(
"__iamcu__");
688 SizeType = UnsignedLong;
689 IntPtrType = SignedLong;
690 PtrDiffType = SignedLong;
695 X86_32TargetInfo::getTargetDefines(Opts, Builder);
696 Builder.defineMacro(
"__INTEL__");
697 Builder.defineMacro(
"__rtems__");
706 const bool IsX32 = getTriple().isX32();
708 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
709 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
710 LongDoubleWidth = 128;
711 LongDoubleAlign = 128;
712 LargeArrayMinWidth = 128;
713 LargeArrayAlign = 128;
715 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
716 PtrDiffType = IsX32 ? SignedInt : SignedLong;
717 IntPtrType = IsX32 ? SignedInt : SignedLong;
718 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
719 Int64Type = IsX32 ? SignedLongLong : SignedLong;
723 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
724 "i64:64-f80:128-n8:16:32:64-S128"
725 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:"
726 "64-i64:64-f80:128-n8:16:32:64-S128"
727 :
"e-m:e-p270:32:32-p271:32:32-p272:64:"
728 "64-i64:64-f80:128-n8:16:32:64-S128");
731 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
734 ComplexLongDoubleUsesFP2Ret =
true;
737 HasBuiltinMSVaList =
true;
740 MaxAtomicPromoteWidth = 128;
741 MaxAtomicInlineWidth = 64;
745 return TargetInfo::X86_64ABIBuiltinVaList;
786 bool &HasSizeMismatch)
const override {
789 if (RegName.equals(
"rsp") || RegName.equals(
"rbp")) {
791 HasSizeMismatch = RegSize != 64;
796 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
802 MaxAtomicInlineWidth = 128;
809 return llvm::IntegerType::MAX_INT_BITS;
819 LongWidth = LongAlign = 32;
820 DoubleAlign = LongLongAlign = 64;
821 IntMaxType = SignedLongLong;
822 Int64Type = SignedLongLong;
823 SizeType = UnsignedLongLong;
824 PtrDiffType = SignedLongLong;
825 IntPtrType = SignedLongLong;
829 return TargetInfo::CharPtrBuiltinVaList;
862 LongDoubleWidth = LongDoubleAlign = 64;
863 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
868 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
869 Builder.defineMacro(
"_M_X64",
"100");
870 Builder.defineMacro(
"_M_AMD64",
"100");
875 return CCK_MicrosoftWin64;
887 LongDoubleWidth = LongDoubleAlign = 128;
888 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
898 this->WCharType = TargetInfo::UnsignedShort;
899 TLSSupported =
false;
904 X86_64TargetInfo::getTargetDefines(Opts, Builder);
905 Builder.defineMacro(
"__x86_64__");
906 Builder.defineMacro(
"__CYGWIN__");
907 Builder.defineMacro(
"__CYGWIN64__");
911 Builder.defineMacro(
"_GNU_SOURCE");
920 Int64Type = SignedLongLong;
922 llvm::Triple T = llvm::Triple(Triple);
924 UseSignedCharForObjCBool =
false;
925 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:"
926 "16:32:64-S128",
"_");
946 IntMaxType = SignedLongLong;
947 Int64Type = SignedLongLong;
958 LongDoubleWidth = 64;
959 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
969 LongDoubleFormat = &llvm::APFloat::IEEEquad();
980 LongDoubleWidth = 64;
981 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
991 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.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
FPEvalMethodKind
Possible float expression evaluation method choices.
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
brief Determine whether this TargetInfo supports the given CPU name for
bool isValidCPUName(StringRef Name) const override
brief 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 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
brief 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)
LangAS
Defines the address space values used by the address space qualifier of QualType.
CallingConv
CallingConv - Specifies the calling convention that a function uses.