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 HasAVX10_2 =
false;
96 bool HasAVX10_2_512 =
false;
97 bool HasEVEX512 =
false;
98 bool HasAVX512CD =
false;
99 bool HasAVX512VPOPCNTDQ =
false;
100 bool HasAVX512VNNI =
false;
101 bool HasAVX512FP16 =
false;
102 bool HasAVX512BF16 =
false;
103 bool HasAVX512DQ =
false;
104 bool HasAVX512BITALG =
false;
105 bool HasAVX512BW =
false;
106 bool HasAVX512VL =
false;
107 bool HasAVX512VBMI =
false;
108 bool HasAVX512VBMI2 =
false;
109 bool HasAVXIFMA =
false;
110 bool HasAVX512IFMA =
false;
111 bool HasAVX512VP2INTERSECT =
false;
113 bool HasSHA512 =
false;
114 bool HasSHSTK =
false;
119 bool HasCX16 =
false;
120 bool HasFXSR =
false;
121 bool HasXSAVE =
false;
122 bool HasXSAVEOPT =
false;
123 bool HasXSAVEC =
false;
124 bool HasXSAVES =
false;
125 bool HasMWAITX =
false;
126 bool HasCLZERO =
false;
127 bool HasCLDEMOTE =
false;
128 bool HasPCONFIG =
false;
130 bool HasCLFLUSHOPT =
false;
131 bool HasCLWB =
false;
132 bool HasMOVBE =
false;
133 bool HasPREFETCHI =
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 HasAVXVNNIINT16 =
false;
146 bool HasAMXFP16 =
false;
147 bool HasCMPCCXADD =
false;
148 bool HasRAOINT =
false;
149 bool HasAVXVNNIINT8 =
false;
150 bool HasAVXNECONVERT =
false;
152 bool HasWIDEKL =
false;
153 bool HasHRESET =
false;
154 bool HasAVXVNNI =
false;
155 bool HasAMXTILE =
false;
156 bool HasAMXINT8 =
false;
157 bool HasAMXBF16 =
false;
158 bool HasAMXCOMPLEX =
false;
159 bool HasSERIALIZE =
false;
160 bool HasTSXLDTRK =
false;
161 bool HasUSERMSR =
false;
162 bool HasUINTR =
false;
163 bool HasCRC32 =
false;
165 bool HasEGPR =
false;
166 bool HasPush2Pop2 =
false;
169 bool HasCCMP =
false;
173 bool HasInlineAsmUseGPR32 =
false;
174 bool HasBranchHint =
false;
177 llvm::X86::CPUKind CPU = llvm::X86::CK_None;
179 enum FPMathKind { FP_Default, FP_SSE, FP_387 } FPMath = FP_Default;
184 BFloat16Width = BFloat16Align = 16;
185 BFloat16Format = &llvm::APFloat::BFloat();
186 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
189 HasUnalignedAccess =
true;
192 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
198 return LongDoubleFormat == &llvm::APFloat::IEEEquad() ?
"g" :
"e";
203 return SSELevel == NoSSE ? LangOptions::FPEvalMethodKind::FEM_Extended
204 : LangOptions::FPEvalMethodKind::FEM_Source;
219 return RegName ==
"esp" || RegName ==
"rsp";
226 bool validateCpuSupports(StringRef FeatureStr)
const override;
228 bool validateCpuIs(StringRef FeatureStr)
const override;
230 bool validateCPUSpecificCPUDispatch(StringRef Name)
const override;
232 char CPUSpecificManglingCharacter(StringRef Name)
const override;
234 void getCPUSpecificCPUDispatchFeatures(
238 std::optional<unsigned> getCPUCacheLineSize()
const override;
240 bool validateAsmConstraint(
const char *&Name,
244 bool &HasSizeMismatch)
const override {
247 if (RegName ==
"esp" || RegName ==
"ebp") {
249 HasSizeMismatch = RegSize != 32;
256 bool validateOutputSize(
const llvm::StringMap<bool> &FeatureMap,
257 StringRef Constraint,
unsigned Size)
const override;
259 bool validateInputSize(
const llvm::StringMap<bool> &FeatureMap,
260 StringRef Constraint,
unsigned Size)
const override;
264 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
266 return TargetInfo::checkCFProtectionReturnSupported(Diags);
271 if (CPU == llvm::X86::CK_None || CPU >= llvm::X86::CK_PentiumPro)
273 return TargetInfo::checkCFProtectionBranchSupported(Diags);
276 virtual bool validateOperandSize(
const llvm::StringMap<bool> &FeatureMap,
277 StringRef Constraint,
unsigned Size)
const;
279 std::string convertConstraint(
const char *&Constraint)
const override;
281 return "~{dirflag},~{fpsr},~{flags}";
286 StringRef::iterator I,
E;
287 for (I = Constraint.begin(),
E = Constraint.end(); I !=
E; ++I) {
288 if (isalpha(*I) || *I ==
'@')
312 if ((++I !=
E) && ((*I ==
'0') || (*I ==
'z')))
328 void setFeatureEnabled(llvm::StringMap<bool> &Features, StringRef Name,
329 bool Enabled)
const final;
334 const std::vector<std::string> &FeaturesVec)
const override;
336 bool isValidFeatureName(StringRef Name)
const override;
338 bool hasFeature(StringRef Feature)
const final;
340 bool handleTargetFeatures(std::vector<std::string> &Features,
344 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX512F)
346 if (getTriple().getArch() == llvm::Triple::x86_64 && SSELevel >= AVX)
348 if (getTriple().getArch() == llvm::Triple::x86 && !HasMMX)
358 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
359 return llvm::X86::parseArchX86(Name, Only64Bit) != llvm::X86::CK_None;
363 if (Name ==
"generic")
369 return llvm::X86::parseTuneCPU(Name) != llvm::X86::CK_None;
375 bool setCPU(
const std::string &Name)
override {
376 bool Only64Bit = getTriple().getArch() != llvm::Triple::x86;
377 CPU = llvm::X86::parseArchX86(Name, Only64Bit);
378 return CPU != llvm::X86::CK_None;
381 unsigned multiVersionSortPriority(StringRef Name)
const override;
383 bool setFPMath(StringRef Name)
override;
386 return getTriple().getArch() != llvm::Triple::x86;
422 unsigned TargetAddrSpace = getTargetAddressSpace(AS);
425 if (TargetAddrSpace ==
ptr64)
431 return getPointerWidthV(AddrSpace);
441 DoubleAlign = LongLongAlign = 32;
442 LongDoubleWidth = 96;
443 LongDoubleAlign = 32;
445 resetDataLayout(Triple.isOSBinFormatMachO()
446 ?
"e-m:o-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 :
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:"
449 "128-f64:32:64-f80:32-n8:16:32-S128",
450 Triple.isOSBinFormatMachO() ?
"_" :
"");
451 SizeType = UnsignedInt;
452 PtrDiffType = SignedInt;
453 IntPtrType = SignedInt;
457 RealTypeUsesObjCFPRetMask =
458 (
unsigned)(FloatModeKind::Float | FloatModeKind::Double |
459 FloatModeKind::LongDouble);
462 MaxAtomicPromoteWidth = 64;
463 MaxAtomicInlineWidth = 32;
467 return TargetInfo::CharPtrBuiltinVaList;
479 StringRef Constraint,
unsigned Size)
const override {
480 switch (Constraint[0]) {
497 return X86TargetInfo::validateOperandSize(FeatureMap, Constraint, Size);
502 MaxAtomicInlineWidth = 64;
509 return llvm::IntegerType::MAX_INT_BITS;
525 SizeType = UnsignedLong;
526 IntPtrType = SignedLong;
527 PtrDiffType = SignedLong;
536 LongDoubleWidth = 128;
537 LongDoubleAlign = 128;
539 MaxVectorAlign = 256;
541 llvm::Triple
T = llvm::Triple(Triple);
543 UseSignedCharForObjCBool =
false;
544 SizeType = UnsignedLong;
545 IntPtrType = SignedLong;
546 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-"
547 "f64:32:64-f80:128-n8:16:32-S128",
549 HasAlignMac68kSupport =
true;
570 DoubleAlign = LongLongAlign = 64;
572 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
573 bool IsMSVC = getTriple().isWindowsMSVCEnvironment();
574 std::string Layout = IsWinCOFF ?
"e-m:x" :
"e-m:e";
575 Layout +=
"-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-";
576 Layout += IsMSVC ?
"f80:128" :
"f80:32";
577 Layout +=
"-n8:16:32-a:0:32-S32";
578 resetDataLayout(Layout, IsWinCOFF ?
"_" :
"");
589 LongDoubleWidth = LongDoubleAlign = 64;
590 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
595 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
599 Builder.defineMacro(
"_M_IX86",
"600");
614 WindowsX86_32TargetInfo::getTargetDefines(Opts, Builder);
615 Builder.defineMacro(
"_X86_");
624 this->WCharType = TargetInfo::UnsignedShort;
625 DoubleAlign = LongLongAlign = 64;
626 resetDataLayout(
"e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-"
627 "i128:128-f80:32-n8:16:32-a:0:32-S32",
633 X86_32TargetInfo::getTargetDefines(Opts, Builder);
634 Builder.defineMacro(
"_X86_");
635 Builder.defineMacro(
"__CYGWIN__");
636 Builder.defineMacro(
"__CYGWIN32__");
640 Builder.defineMacro(
"_GNU_SOURCE");
654 Builder.defineMacro(
"__INTEL__");
663 LongDoubleWidth = 64;
664 DefaultAlignForAttributeAligned = 32;
665 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
666 resetDataLayout(
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:32-"
667 "f64:32-f128:32-n8:16:32-a:0:32-S32");
668 WIntType = UnsignedInt;
673 return CC ==
CC_C ? CCCR_OK : CCCR_Warning;
678 X86_32TargetInfo::getTargetDefines(Opts, Builder);
679 Builder.defineMacro(
"__iamcu");
680 Builder.defineMacro(
"__iamcu__");
691 SizeType = UnsignedLong;
692 IntPtrType = SignedLong;
693 PtrDiffType = SignedLong;
698 X86_32TargetInfo::getTargetDefines(Opts, Builder);
699 Builder.defineMacro(
"__INTEL__");
700 Builder.defineMacro(
"__rtems__");
709 const bool IsX32 = getTriple().isX32();
711 getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
712 LongWidth = LongAlign = PointerWidth = PointerAlign = IsX32 ? 32 : 64;
713 LongDoubleWidth = 128;
714 LongDoubleAlign = 128;
715 LargeArrayMinWidth = 128;
716 LargeArrayAlign = 128;
718 SizeType = IsX32 ? UnsignedInt : UnsignedLong;
719 PtrDiffType = IsX32 ? SignedInt : SignedLong;
720 IntPtrType = IsX32 ? SignedInt : SignedLong;
721 IntMaxType = IsX32 ? SignedLongLong : SignedLong;
722 Int64Type = IsX32 ? SignedLongLong : SignedLong;
726 resetDataLayout(IsX32 ?
"e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-"
727 "i64:64-i128:128-f80:128-n8:16:32:64-S128"
728 : IsWinCOFF ?
"e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:"
729 "64-i128:128-f80:128-n8:16:32:64-S128"
730 :
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:"
731 "64-i128:128-f80:128-n8:16:32:64-S128");
734 RealTypeUsesObjCFPRetMask = (
unsigned)FloatModeKind::LongDouble;
737 ComplexLongDoubleUsesFP2Ret =
true;
740 HasBuiltinMSVaList =
true;
743 MaxAtomicPromoteWidth = 128;
744 MaxAtomicInlineWidth = 64;
748 return TargetInfo::X86_64ABIBuiltinVaList;
790 bool &HasSizeMismatch)
const override {
793 if (RegName ==
"rsp" || RegName ==
"rbp") {
795 HasSizeMismatch = RegSize != 64;
800 return X86TargetInfo::validateGlobalRegisterVariable(RegName, RegSize,
806 MaxAtomicInlineWidth = 128;
813 return llvm::IntegerType::MAX_INT_BITS;
823 LongWidth = LongAlign = 32;
824 DoubleAlign = LongLongAlign = 64;
825 IntMaxType = SignedLongLong;
826 Int64Type = SignedLongLong;
827 SizeType = UnsignedLongLong;
828 PtrDiffType = SignedLongLong;
829 IntPtrType = SignedLongLong;
833 return TargetInfo::CharPtrBuiltinVaList;
867 LongDoubleWidth = LongDoubleAlign = 64;
868 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
873 WindowsX86_64TargetInfo::getTargetDefines(Opts, Builder);
874 Builder.defineMacro(
"_M_X64",
"100");
875 Builder.defineMacro(
"_M_AMD64",
"100");
880 return CCK_MicrosoftWin64;
892 LongDoubleWidth = LongDoubleAlign = 128;
893 LongDoubleFormat = &llvm::APFloat::x87DoubleExtended();
903 this->WCharType = TargetInfo::UnsignedShort;
904 TLSSupported =
false;
909 X86_64TargetInfo::getTargetDefines(Opts, Builder);
910 Builder.defineMacro(
"__x86_64__");
911 Builder.defineMacro(
"__CYGWIN__");
912 Builder.defineMacro(
"__CYGWIN64__");
916 Builder.defineMacro(
"_GNU_SOURCE");
925 Int64Type = SignedLongLong;
927 llvm::Triple
T = llvm::Triple(Triple);
929 UseSignedCharForObjCBool =
false;
930 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-"
931 "f80:128-n8:16:32:64-S128",
952 IntMaxType = SignedLongLong;
953 Int64Type = SignedLongLong;
964 LongDoubleWidth = 64;
965 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
975 LongDoubleFormat = &llvm::APFloat::IEEEquad();
986 LongDoubleWidth = 64;
987 LongDoubleFormat = &llvm::APFloat::IEEEdouble();
997 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.