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 HasAVX512CD =
false;
99 bool HasAVX512VPOPCNTDQ =
false;
100 bool HasAVX512VNNI =
false;
101 bool HasAVX512FP16 =
false;
102 bool HasAVX512BF16 =
false;
103 bool HasAVX512ER =
false;
104 bool HasAVX512PF =
false;
105 bool HasAVX512DQ =
false;
106 bool HasAVX512BITALG =
false;
107 bool HasAVX512BW =
false;
108 bool HasAVX512VL =
false;
109 bool HasAVX512VBMI =
false;
110 bool HasAVX512VBMI2 =
false;
111 bool HasAVXIFMA =
false;
112 bool HasAVX512IFMA =
false;
113 bool HasAVX512VP2INTERSECT =
false;
115 bool HasSHSTK =
false;
118 bool HasCX16 =
false;
119 bool HasFXSR =
false;
120 bool HasXSAVE =
false;
121 bool HasXSAVEOPT =
false;
122 bool HasXSAVEC =
false;
123 bool HasXSAVES =
false;
124 bool HasMWAITX =
false;
125 bool HasCLZERO =
false;
126 bool HasCLDEMOTE =
false;
127 bool HasPCONFIG =
false;
129 bool HasCLFLUSHOPT =
false;
130 bool HasCLWB =
false;
131 bool HasMOVBE =
false;
132 bool HasPREFETCHI =
false;
133 bool HasPREFETCHWT1 =
false;
134 bool HasRDPID =
false;
135 bool HasRDPRU =
false;
136 bool HasRetpolineExternalThunk =
false;
137 bool HasLAHFSAHF =
false;
138 bool HasWBNOINVD =
false;
139 bool HasWAITPKG =
false;
140 bool HasMOVDIRI =
false;
141 bool HasMOVDIR64B =
false;
142 bool HasPTWRITE =
false;
143 bool HasINVPCID =
false;
144 bool HasENQCMD =
false;
145 bool HasAMXFP16 =
false;
146 bool HasCMPCCXADD =
false;
147 bool HasRAOINT =
false;
148 bool HasAVXVNNIINT8 =
false;
149 bool HasAVXNECONVERT =
false;
151 bool HasWIDEKL =
false;
152 bool HasHRESET =
false;
153 bool HasAVXVNNI =
false;
154 bool HasAMXTILE =
false;
155 bool HasAMXINT8 =
false;
156 bool HasAMXBF16 =
false;
157 bool HasSERIALIZE =
false;
158 bool HasTSXLDTRK =
false;
159 bool HasUINTR =
false;
160 bool HasCRC32 =
false;
164 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
166 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
171 BFloat16Width = BFloat16Align = 16;
172 BFloat16Format = &llvm::APFloat::BFloat();
173 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
178 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
184 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
189 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
190 : LangOptions::FPEvalMethodKind::FEM_Source;
205 return RegName.equals(
"esp") || RegName.equals(
"rsp");
208 bool validateCpuSupports(StringRef Name)
const override;
210 bool validateCpuIs(StringRef Name)
const override;
212 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
214 char CPUSpecificManglingCharacter(StringRef Name)
const override;
216 void getCPUSpecificCPUDispatchFeatures(
220 StringRef getCPUSpecificTuneName(StringRef Name)
const override;
222 std::optional<unsigned> getCPUCacheLineSize()
const override;
224 bool validateAsmConstraint(
const char *&Name,
228 bool &HasSizeMismatch)
const override {
231 if (RegName.equals(
"esp") || RegName.equals(
"ebp")) {
233 HasSizeMismatch = RegSize != 32;
240 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
241 StringRef Constraint,
unsigned Size)
const override;
243 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
244 StringRef Constraint,
unsigned Size)
const override;
248 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
250 return TargetInfo::checkCFProtectionReturnSupported(Diags);
255 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
257 return TargetInfo::checkCFProtectionBranchSupported(Diags);
260 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
261 StringRef Constraint,
unsigned Size)
const;
263 std::string convertConstraint(
const char *&Constraint)
const override;
265 return "~{dirflag},~{fpsr},~{flags}";
270 StringRef::iterator I, E;
271 for (I = Constraint.begin(), E = Constraint.end(); I != E; ++I) {
272 if (isalpha(*I) || *I ==
'@')
296 if ((++I != E) && ((*I ==
'0') || (*I ==
'z')))
312 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
313 bool Enabled)
const final;
318 const std::vector<std::string> &FeaturesVec)
const override;
320 bool isValidFeatureName(StringRef Name)
const override;
322 bool hasFeature(StringRef Feature)
const final;
324 bool handleTargetFeatures(std::vector<std::string> &Features,
328 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
330 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
332 if (getTriple().getArch() == llvm::Triple::x86 &&
333 MMX3DNowLevel == NoMMX3DNow)
343 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
344 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
348 if (Name ==
"generic")
354 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
360 bool setCPU(
const std::string &Name)
override {
361 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
362 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
363 return CPU != llvm::X86::CK_None;
366 unsigned multiVersionSortPriority(StringRef Name)
const override;
368 bool setFPMath(StringRef Name)
override;
371 return getTriple().getArch() != llvm::Triple::x86;
407 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
410 if (TargetAddrSpace ==
ptr64)
416 return getPointerWidthV(AddrSpace);
427 DoubleAlign = LongLongAlign = 32;
428 LongDoubleWidth = 96;
429 LongDoubleAlign = 32;
432 Triple.isOSBinFormatMachO()
433 ?
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
434 "f80:32-n8:16:32-S128"
435 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
436 "f80:32-n8:16:32-S128",
437 Triple.isOSBinFormatMachO() ?
"_" :
"");
438 SizeType = UnsignedInt;
439 PtrDiffType = SignedInt;
440 IntPtrType = SignedInt;
444 RealTypeUsesObjCFPRetMask =
445 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
446 FloatModeKind::LongDouble);
449 MaxAtomicPromoteWidth = 64;
450 MaxAtomicInlineWidth = 32;
454 return TargetInfo::CharPtrBuiltinVaList;
466 StringRef Constraint,
unsigned Size)
const override {
467 switch (Constraint[0]) {
484 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
489 MaxAtomicInlineWidth = 64;
496 return llvm::IntegerType::MAX_INT_BITS;
507 VersionTuple OsVersion = getTriple().getOSVersion();
509 if (OsVersion >= VersionTuple(6, 99, 26) || OsVersion.getMajor() == 0)
510 return X86_32TargetInfo::getFPEvalMethod();
512 return LangOptions::FPEvalMethodKind::FEM_Double;
521 SizeType = UnsignedLong;
522 IntPtrType = SignedLong;
523 PtrDiffType = SignedLong;
532 LongDoubleWidth = 128;
533 LongDoubleAlign = 128;
535 MaxVectorAlign = 256;
537 llvm::Triple T = llvm::Triple(Triple);
539 UseSignedCharForObjCBool =
false;
540 SizeType = UnsignedLong;
541 IntPtrType = SignedLong;
542 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-"
543 "f80:128-n8:16:32-S128",
"_");
544 HasAlignMac68kSupport =
true;
565 DoubleAlign = LongLongAlign = 64;
567 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
568 bool IsMSVC = getTriple().isWindowsMSVCEnvironment();
569 std::string Layout = IsWinCOFF ?
"e-m:x" :
"e-m:e";
570 Layout +=
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-";
571 Layout += IsMSVC ?
"f80:128" :
"f80:32";
572 Layout +=
"-n8:16:32-a:0:32-S32";
573 resetDataLayout(Layout, IsWinCOFF ?
"_" :
"");
584 LongDoubleWidth = LongDoubleAlign = 64;
585 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
590 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
594 Builder.defineMacro(
"_M_IX86",
"600");
609 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
610 Builder.defineMacro(
"_X86_");
619 this->WCharType = TargetInfo::UnsignedShort;
620 DoubleAlign = LongLongAlign = 64;
621 resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:"
622 "32-n8:16:32-a:0:32-S32",
628 X86_32TargetInfo::getTargetDefines(Opts, Builder);
629 Builder.defineMacro(
"_X86_");
630 Builder.defineMacro(
"__CYGWIN__");
631 Builder.defineMacro(
"__CYGWIN32__");
635 Builder.defineMacro(
"_GNU_SOURCE");
649 Builder.defineMacro(
"__INTEL__");
658 LongDoubleWidth = 64;
659 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
660 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-f64:"
661 "32-f128:32-n8:16:32-a:0:32-S32");
662 WIntType = UnsignedInt;
667 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
672 X86_32TargetInfo::getTargetDefines(Opts, Builder);
673 Builder.defineMacro(
"__iamcu");
674 Builder.defineMacro(
"__iamcu__");
685 SizeType = UnsignedLong;
686 IntPtrType = SignedLong;
687 PtrDiffType = SignedLong;
692 X86_32TargetInfo::getTargetDefines(Opts, Builder);
693 Builder.defineMacro(
"__INTEL__");
694 Builder.defineMacro(
"__rtems__");
703 const bool IsX32 = getTriple().isX32();
705 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
706 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
707 LongDoubleWidth = 128;
708 LongDoubleAlign = 128;
709 LargeArrayMinWidth = 128;
710 LargeArrayAlign = 128;
712 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
713 PtrDiffType = IsX32 ? SignedInt : SignedLong;
714 IntPtrType = IsX32 ? SignedInt : SignedLong;
715 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
716 Int64Type = IsX32 ? SignedLongLong : SignedLong;
720 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
721 "i64:64-f80:128-n8:16:32:64-S128"
722 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:"
723 "64-i64:64-f80:128-n8:16:32:64-S128"
724 :
"e-m:e-p270:32:32-p271:32:32-p272:64:"
725 "64-i64:64-f80:128-n8:16:32:64-S128");
728 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
731 ComplexLongDoubleUsesFP2Ret =
true;
734 HasBuiltinMSVaList =
true;
737 MaxAtomicPromoteWidth = 128;
738 MaxAtomicInlineWidth = 64;
742 return TargetInfo::X86_64ABIBuiltinVaList;
783 bool &HasSizeMismatch)
const override {
786 if (RegName.equals(
"rsp") || RegName.equals(
"rbp")) {
788 HasSizeMismatch = RegSize != 64;
793 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
799 MaxAtomicInlineWidth = 128;
806 return llvm::IntegerType::MAX_INT_BITS;
816 LongWidth = LongAlign = 32;
817 DoubleAlign = LongLongAlign = 64;
818 IntMaxType = SignedLongLong;
819 Int64Type = SignedLongLong;
820 SizeType = UnsignedLongLong;
821 PtrDiffType = SignedLongLong;
822 IntPtrType = SignedLongLong;
826 return TargetInfo::CharPtrBuiltinVaList;
859 LongDoubleWidth = LongDoubleAlign = 64;
860 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
865 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
866 Builder.defineMacro(
"_M_X64",
"100");
867 Builder.defineMacro(
"_M_AMD64",
"100");
872 return CCK_MicrosoftWin64;
884 LongDoubleWidth = LongDoubleAlign = 128;
885 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
895 this->WCharType = TargetInfo::UnsignedShort;
896 TLSSupported =
false;
901 X86_64TargetInfo::getTargetDefines(Opts, Builder);
902 Builder.defineMacro(
"__x86_64__");
903 Builder.defineMacro(
"__CYGWIN__");
904 Builder.defineMacro(
"__CYGWIN64__");
908 Builder.defineMacro(
"_GNU_SOURCE");
917 Int64Type = SignedLongLong;
919 llvm::Triple T = llvm::Triple(Triple);
921 UseSignedCharForObjCBool =
false;
922 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:"
923 "16:32:64-S128",
"_");
943 IntMaxType = SignedLongLong;
944 Int64Type = SignedLongLong;
955 LongDoubleWidth = 64;
956 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
966 LongDoubleFormat = &llvm::APFloat::IEEEquad();
977 LongDoubleWidth = 64;
978 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
988 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....
const char * getBFloat16Mangling() const override
Return the mangled code of bfloat.
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...
const char * 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.