;
30#define BUILTIN(ID, TYPE, ATTRS) \ 31 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 32#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ 33 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 34#include "clang/Basic/BuiltinsNEON.def" 36#define BUILTIN(ID, TYPE, ATTRS) \ 37 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 38#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ 39 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 40#include "clang/Basic/BuiltinsSVE.def" 42#define BUILTIN(ID, TYPE, ATTRS) \ 43 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 44#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ 45 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 46#include "clang/Basic/BuiltinsSME.def" 48#define BUILTIN(ID, TYPE, ATTRS) \ 49 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 50#define LANGBUILTIN(ID, TYPE, ATTRS, LANG) \ 51 {#ID, TYPE, ATTRS, nullptr, HeaderDesc::NO_HEADER, LANG}, 52#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) \ 53 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::NO_HEADER, ALL_LANGUAGES}, 54#define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE) \ 55 {#ID, TYPE, ATTRS, FEATURE, HeaderDesc::HEADER, LANGS}, 56#include "clang/Basic/BuiltinsAArch64.def" 60 if(*ArchInfo == llvm::AArch64::ARMV8R) {
70}
else if(ArchInfo->Version.getMajor() == 8) {
71 if(ArchInfo->Version.getMinor() >= 7u) {
74 if(ArchInfo->Version.getMinor() >= 6u) {
78 if(ArchInfo->Version.getMinor() >= 5u) {
79HasAlternativeNZCV =
true;
86 if(ArchInfo->Version.getMinor() >= 4u) {
91 if(ArchInfo->Version.getMinor() >= 3u) {
95 if(ArchInfo->Version.getMinor() >= 2u) {
98 if(ArchInfo->Version.getMinor() >= 1u) {
103}
else if(ArchInfo->Version.getMajor() == 9) {
104 if(ArchInfo->Version.getMinor() >= 2u) {
107 if(ArchInfo->Version.getMinor() >= 1u) {
114HasAlternativeNZCV =
true;
115HasFRInt3264 =
true;
154 if(Triple.isArch64Bit())
199 if(Triple.getOS() == llvm::Triple::Linux)
201 else if(Triple.getOS() == llvm::Triple::UnknownOS)
203Opts.
EABIVersion== llvm::EABI::GNU ?
"\01_mcount":
"mcount";
209 if(Name !=
"aapcs"&& Name !=
"aapcs-soft"&& Name !=
"darwinpcs"&&
210Name !=
"pauthtest")
218 if(
hasFeature(
"fp") && ABI ==
"aapcs-soft") {
221Diags.
Report(diag::err_target_unsupported_abi_with_fpu) << ABI;
224 if(
getTriple().getEnvironment() == llvm::Triple::PAuthTest &&
225 getTriple().getOS() != llvm::Triple::Linux) {
226Diags.
Report(diag::err_target_unsupported_abi_for_triple)
234StringRef RegName,
unsignedRegSize,
bool&HasSizeMismatch)
const{
235 if(RegName ==
"sp") {
236HasSizeMismatch = RegSize != 64;
239 if(RegName.starts_with(
"w"))
240HasSizeMismatch = RegSize != 32;
241 else if(RegName.starts_with(
"x"))
242HasSizeMismatch = RegSize != 64;
245StringRef RegNum = RegName.drop_front();
248 returnRegNum ==
"0"||
250llvm::AArch64::isX18ReservedByDefault(
getTriple())) ||
256StringRef &Err)
const{
257llvm::ARM::ParsedBranchProtection PBP;
258 if(!llvm::ARM::parseBranchProtection(Spec, PBP, Err, HasPAuthLR))
262llvm::StringSwitch<LangOptions::SignReturnAddressScopeKind>(PBP.Scope)
267 if(PBP.Key ==
"a_key")
279 returnllvm::AArch64::parseCpu(Name).has_value();
288llvm::AArch64::fillValidCPUArchList(Values);
293Builder.defineMacro(
"__ARM_FEATURE_QRDMX",
"1");
304Builder.defineMacro(
"__ARM_FEATURE_COMPLEX",
"1");
305Builder.defineMacro(
"__ARM_FEATURE_JCVT",
"1");
318Builder.defineMacro(
"__ARM_FEATURE_FRINT",
"1");
399Builder.defineMacro(
"__amd64__");
400Builder.defineMacro(
"__amd64");
401Builder.defineMacro(
"__x86_64");
402Builder.defineMacro(
"__x86_64__");
403Builder.defineMacro(
"__arm64ec__");
405Builder.defineMacro(
"__aarch64__");
409Builder.defineMacro(
"__GCC_ASM_FLAG_OUTPUTS__");
412 if(CodeModel ==
"default")
413CodeModel =
"small";
414 for(
char&
c: CodeModel)
416Builder.defineMacro(
"__AARCH64_CMODEL_"+ CodeModel +
"__");
419Builder.defineMacro(
"__ARM_ACLE_VERSION(year, quarter, patch)",
420 "(100 * (year) + 10 * (quarter) + (patch))");
421#define ARM_ACLE_VERSION(Y, Q, P) (100 * (Y) + 10 * (Q) + (P)) 423Builder.defineMacro(
"__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL",
425#undef ARM_ACLE_VERSION 426Builder.defineMacro(
"__ARM_ARCH",
427std::to_string(ArchInfo->Version.getMajor()));
428Builder.defineMacro(
"__ARM_ARCH_PROFILE",
429std::string(
"'") + (
char)ArchInfo->Profile +
"'");
431Builder.defineMacro(
"__ARM_64BIT_STATE",
"1");
432Builder.defineMacro(
"__ARM_PCS_AAPCS64",
"1");
433Builder.defineMacro(
"__ARM_ARCH_ISA_A64",
"1");
435Builder.defineMacro(
"__ARM_FEATURE_CLZ",
"1");
436Builder.defineMacro(
"__ARM_FEATURE_FMA",
"1");
437Builder.defineMacro(
"__ARM_FEATURE_LDREX",
"0xF");
438Builder.defineMacro(
"__ARM_FEATURE_IDIV",
"1");
439Builder.defineMacro(
"__ARM_FEATURE_DIV");
440Builder.defineMacro(
"__ARM_FEATURE_NUMERIC_MAXMIN",
"1");
441Builder.defineMacro(
"__ARM_FEATURE_DIRECTED_ROUNDING",
"1");
443Builder.defineMacro(
"__ARM_ALIGN_MAX_STACK_PWR",
"4");
447Builder.defineMacro(
"__ARM_STATE_ZA",
"1");
448Builder.defineMacro(
"__ARM_STATE_ZT0",
"1");
452Builder.defineMacro(
"__ARM_FP",
"0xE");
456Builder.defineMacro(
"__ARM_FP16_FORMAT_IEEE",
"1");
457Builder.defineMacro(
"__ARM_FP16_ARGS",
"1");
460Builder.defineMacro(
"__ARM_NEON_SVE_BRIDGE",
"1");
462 if(Opts.UnsafeFPMath)
463Builder.defineMacro(
"__ARM_FP_FAST",
"1");
465Builder.defineMacro(
"__ARM_SIZEOF_WCHAR_T",
466Twine(Opts.WCharSize ? Opts.WCharSize : 4));
468Builder.defineMacro(
"__ARM_SIZEOF_MINIMAL_ENUM", Opts.ShortEnums ?
"1":
"4");
470 if(FPU & NeonMode) {
471Builder.defineMacro(
"__ARM_NEON",
"1");
473Builder.defineMacro(
"__ARM_NEON_FP",
"0xE");
477Builder.defineMacro(
"__ARM_FEATURE_SVE",
"1");
480Builder.defineMacro(
"__ARM_FEATURE_SVE2",
"1");
483Builder.defineMacro(
"__ARM_FEATURE_SVE2p1",
"1");
485 if(HasSVE2 && HasSVEAES)
486Builder.defineMacro(
"__ARM_FEATURE_SVE2_AES",
"1");
488 if(HasSVE2 && HasSVEBitPerm)
489Builder.defineMacro(
"__ARM_FEATURE_SVE2_BITPERM",
"1");
491 if(HasSVE2 && HasSVE2SHA3)
492Builder.defineMacro(
"__ARM_FEATURE_SVE2_SHA3",
"1");
494 if(HasSVE2 && HasSVE2SM4)
495Builder.defineMacro(
"__ARM_FEATURE_SVE2_SM4",
"1");
498Builder.defineMacro(
"__ARM_FEATURE_SVE_B16B16",
"1");
501Builder.defineMacro(
"__ARM_FEATURE_SME");
502Builder.defineMacro(
"__ARM_FEATURE_LOCALLY_STREAMING",
"1");
506Builder.defineMacro(
"__ARM_FEATURE_SME2",
"1");
509Builder.defineMacro(
"__ARM_FEATURE_SME2p1",
"1");
512Builder.defineMacro(
"__ARM_FEATURE_SME_F16F16",
"1");
515Builder.defineMacro(
"__ARM_FEATURE_SME_B16B16",
"1");
518Builder.defineMacro(
"__ARM_FEATURE_CRC32",
"1");
521Builder.defineMacro(
"__ARM_FEATURE_RCPC",
"3");
523Builder.defineMacro(
"__ARM_FEATURE_RCPC",
"1");
526Builder.defineMacro(
"__HAVE_FUNCTION_MULTI_VERSIONING",
"1");
530 if(HasAES && HasSHA2)
531Builder.defineMacro(
"__ARM_FEATURE_CRYPTO",
"1");
534Builder.defineMacro(
"__ARM_FEATURE_AES",
"1");
537Builder.defineMacro(
"__ARM_FEATURE_SHA2",
"1");
540Builder.defineMacro(
"__ARM_FEATURE_SHA3",
"1");
541Builder.defineMacro(
"__ARM_FEATURE_SHA512",
"1");
545Builder.defineMacro(
"__ARM_FEATURE_SM3",
"1");
546Builder.defineMacro(
"__ARM_FEATURE_SM4",
"1");
550Builder.defineMacro(
"__ARM_FEATURE_PAUTH",
"1");
553Builder.defineMacro(
"__ARM_FEATURE_PAUTH_LR",
"1");
556Builder.defineMacro(
"__ARM_FEATURE_BTI",
"1");
559Builder.defineMacro(
"__ARM_FEATURE_UNALIGNED",
"1");
561 if((FPU & NeonMode) && HasFullFP16)
562Builder.defineMacro(
"__ARM_FEATURE_FP16_VECTOR_ARITHMETIC",
"1");
564Builder.defineMacro(
"__ARM_FEATURE_FP16_SCALAR_ARITHMETIC",
"1");
567Builder.defineMacro(
"__ARM_FEATURE_DOTPROD",
"1");
570Builder.defineMacro(
"__ARM_FEATURE_MEMORY_TAGGING",
"1");
573Builder.defineMacro(
"__ARM_FEATURE_TME",
"1");
576Builder.defineMacro(
"__ARM_FEATURE_MATMUL_INT8",
"1");
579Builder.defineMacro(
"__ARM_FEATURE_ATOMICS",
"1");
582Builder.defineMacro(
"__ARM_FEATURE_BF16",
"1");
583Builder.defineMacro(
"__ARM_FEATURE_BF16_VECTOR_ARITHMETIC",
"1");
584Builder.defineMacro(
"__ARM_BF16_FORMAT_ALTERNATIVE",
"1");
585Builder.defineMacro(
"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC",
"1");
588 if((FPU & SveMode) && HasBFloat16) {
589Builder.defineMacro(
"__ARM_FEATURE_SVE_BF16",
"1");
592 if((FPU & SveMode) && HasMatmulFP64)
593Builder.defineMacro(
"__ARM_FEATURE_SVE_MATMUL_FP64",
"1");
595 if((FPU & SveMode) && HasMatmulFP32)
596Builder.defineMacro(
"__ARM_FEATURE_SVE_MATMUL_FP32",
"1");
598 if((FPU & SveMode) && HasMatMul)
599Builder.defineMacro(
"__ARM_FEATURE_SVE_MATMUL_INT8",
"1");
601 if((FPU & NeonMode) && HasFP16FML)
602Builder.defineMacro(
"__ARM_FEATURE_FP16_FML",
"1");
620 if(Opts.BranchProtectionPAuthLR)
623Builder.defineMacro(
"__ARM_FEATURE_PAC_DEFAULT", std::to_string(
Value));
626 if(Opts.BranchTargetEnforcement)
627Builder.defineMacro(
"__ARM_FEATURE_BTI_DEFAULT",
"1");
629 if(Opts.GuardedControlStack)
630Builder.defineMacro(
"__ARM_FEATURE_GCS_DEFAULT",
"1");
633Builder.defineMacro(
"__ARM_FEATURE_LS64",
"1");
636Builder.defineMacro(
"__ARM_FEATURE_RNG",
"1");
639Builder.defineMacro(
"__ARM_FEATURE_MOPS",
"1");
642Builder.defineMacro(
"__ARM_FEATURE_SYSREG128",
"1");
645Builder.defineMacro(
"__ARM_FEATURE_GCS",
"1");
647 if(*ArchInfo == llvm::AArch64::ARMV8_1A)
649 else if(*ArchInfo == llvm::AArch64::ARMV8_2A)
651 else if(*ArchInfo == llvm::AArch64::ARMV8_3A)
653 else if(*ArchInfo == llvm::AArch64::ARMV8_4A)
655 else if(*ArchInfo == llvm::AArch64::ARMV8_5A)
657 else if(*ArchInfo == llvm::AArch64::ARMV8_6A)
659 else if(*ArchInfo == llvm::AArch64::ARMV8_7A)
661 else if(*ArchInfo == llvm::AArch64::ARMV8_8A)
663 else if(*ArchInfo == llvm::AArch64::ARMV8_9A)
665 else if(*ArchInfo == llvm::AArch64::ARMV9A)
667 else if(*ArchInfo == llvm::AArch64::ARMV9_1A)
669 else if(*ArchInfo == llvm::AArch64::ARMV9_2A)
671 else if(*ArchInfo == llvm::AArch64::ARMV9_3A)
673 else if(*ArchInfo == llvm::AArch64::ARMV9_4A)
675 else if(*ArchInfo == llvm::AArch64::ARMV9_5A)
677 else if(*ArchInfo == llvm::AArch64::ARMV9_6A)
681Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
682Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
683Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
684Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
685Builder.defineMacro(
"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16");
688Builder.defineMacro(
"__FP_FAST_FMA",
"1");
689Builder.defineMacro(
"__FP_FAST_FMAF",
"1");
693Builder.defineMacro(
"__ARM_FEATURE_SVE_VECTOR_OPERATORS",
"2");
695 if(Opts.VScaleMin && Opts.VScaleMin == Opts.VScaleMax) {
696Builder.defineMacro(
"__ARM_FEATURE_SVE_BITS", Twine(Opts.VScaleMin * 128));
705std::optional<std::pair<unsigned, unsigned>>
708 if(LangOpts.VScaleMin || LangOpts.VScaleMax)
709 returnstd::pair<unsigned, unsigned>(
710LangOpts.VScaleMin ? LangOpts.VScaleMin : 1, LangOpts.VScaleMax);
713 returnstd::pair<unsigned, unsigned>(1, 16);
719 returnllvm::AArch64::getFMVPriority(Features);
724 if(
autoExt = llvm::AArch64::parseFMVExtension(Name))
725 returnExt->ID.has_value();
732FeatureStr.split(Features,
"+");
733 for(
auto&Feature : Features)
734 if(!llvm::AArch64::parseFMVExtension(Feature.trim()).has_value())
740 returnllvm::StringSwitch<bool>(Feature)
741.Cases(
"aarch64",
"arm64",
"arm",
true)
742.Case(
"fmv", HasFMV)
743.Case(
"fp", FPU & FPUMode)
744.Cases(
"neon",
"simd", FPU & NeonMode)
745.Case(
"jscvt", HasJSCVT)
746.Case(
"fcma", HasFCMA)
747.Case(
"rng", HasRandGen)
748.Case(
"flagm", HasFlagM)
749.Case(
"flagm2", HasAlternativeNZCV)
750.Case(
"fp16fml", HasFP16FML)
751.Case(
"dotprod", HasDotProd)
752.Case(
"sm4", HasSM4)
753.Case(
"rdm", HasRDM)
754.Case(
"lse", HasLSE)
755.Case(
"crc", HasCRC)
756.Case(
"sha2", HasSHA2)
757.Case(
"sha3", HasSHA3)
758.Cases(
"aes",
"pmull", HasAES)
759.Cases(
"fp16",
"fullfp16", HasFullFP16)
760.Case(
"dit", HasDIT)
761.Case(
"dpb", HasCCPP)
762.Case(
"dpb2", HasCCDP)
763.Case(
"rcpc", HasRCPC)
764.Case(
"frintts", HasFRInt3264)
765.Case(
"i8mm", HasMatMul)
766.Case(
"bf16", HasBFloat16)
767.Case(
"sve", FPU & SveMode)
768.Case(
"sve-b16b16", HasSVEB16B16)
769.Case(
"f32mm", FPU & SveMode && HasMatmulFP32)
770.Case(
"f64mm", FPU & SveMode && HasMatmulFP64)
771.Case(
"sve2", FPU & SveMode && HasSVE2)
772.Case(
"sve-aes", HasSVEAES)
773.Case(
"sve-bitperm", FPU & HasSVEBitPerm)
774.Case(
"sve2-sha3", FPU & SveMode && HasSVE2SHA3)
775.Case(
"sve2-sm4", FPU & SveMode && HasSVE2SM4)
776.Case(
"sve2p1", FPU & SveMode && HasSVE2p1)
777.Case(
"sme", HasSME)
778.Case(
"sme2", HasSME2)
779.Case(
"sme2p1", HasSME2p1)
780.Case(
"sme-f64f64", HasSMEF64F64)
781.Case(
"sme-i16i64", HasSMEI16I64)
782.Case(
"sme-fa64", HasSMEFA64)
783.Case(
"sme-f16f16", HasSMEF16F16)
784.Case(
"sme-b16b16", HasSMEB16B16)
785.Case(
"memtag", HasMTE)
787.Case(
"predres", HasPredRes)
788.Cases(
"ssbs",
"ssbs2", HasSSBS)
789.Case(
"bti", HasBTI)
790.Cases(
"ls64",
"ls64_v",
"ls64_accdata", HasLS64)
791.Case(
"wfxt", HasWFxT)
792.Case(
"rcpc3", HasRCPC3)
797StringRef Name,
boolEnabled)
const{
798Features[Name] = Enabled;
801 conststd::optional<llvm::AArch64::ArchInfo> ArchInfo =
802llvm::AArch64::ArchInfo::findBySubArch(Name);
811 for(
const auto*OtherArch : llvm::AArch64::ArchInfos)
812 if(ArchInfo->implies(*OtherArch))
813Features[OtherArch->getSubArch()] =
true;
816std::vector<StringRef> CPUFeats;
817 if(llvm::AArch64::getExtensionFeatures(ArchInfo->DefaultExts, CPUFeats)) {
818 for(
autoF : CPUFeats) {
819assert(F[0] ==
'+'&&
"Expected + in target feature!");
820Features[F.drop_front(1)] =
true;
827 for(
const auto&Feature : Features) {
828 if(Feature ==
"-fp-armv8")
830 if(Feature ==
"-neon")
832 if(Feature ==
"-sve")
835 if(Feature ==
"+neon"|| Feature ==
"+fp-armv8")
837 if(Feature ==
"+jscvt") {
841 if(Feature ==
"+fcma") {
846 if(Feature ==
"+sve") {
851 if(Feature ==
"+sve2") {
857 if(Feature ==
"+sve2p1") {
864 if(Feature ==
"+sve-aes") {
869 if(Feature ==
"+sve2-sha3") {
876 if(Feature ==
"+sve2-sm4") {
883 if(Feature ==
"+sve-b16b16")
884HasSVEB16B16 =
true;
885 if(Feature ==
"+sve-bitperm") {
888HasSVEBitPerm =
true;
890 if(Feature ==
"+f32mm") {
894HasMatmulFP32 =
true;
896 if(Feature ==
"+f64mm") {
900HasMatmulFP64 =
true;
902 if(Feature ==
"+sme") {
907 if(Feature ==
"+sme2") {
913 if(Feature ==
"+sme2p1") {
920 if(Feature ==
"+sme-f64f64") {
922HasSMEF64F64 =
true;
926 if(Feature ==
"+sme-i16i64") {
928HasSMEI16I64 =
true;
932 if(Feature ==
"+sme-fa64") {
939 if(Feature ==
"+sme-f16f16") {
944HasSMEF16F16 =
true;
946 if(Feature ==
"+sme-b16b16") {
951HasSVEB16B16 =
true;
952HasSMEB16B16 =
true;
954 if(Feature ==
"+sb")
956 if(Feature ==
"+predres")
958 if(Feature ==
"+ssbs")
960 if(Feature ==
"+bti")
962 if(Feature ==
"+wfxt")
964 if(Feature ==
"-fmv")
966 if(Feature ==
"+crc")
968 if(Feature ==
"+rcpc")
970 if(Feature ==
"+aes") {
974 if(Feature ==
"+sha2") {
978 if(Feature ==
"+sha3") {
983 if(Feature ==
"+rdm") {
987 if(Feature ==
"+dit")
989 if(Feature ==
"+cccp")
991 if(Feature ==
"+ccdp") {
995 if(Feature ==
"+fptoint")
996HasFRInt3264 =
true;
997 if(Feature ==
"+sm4") {
1001 if(Feature ==
"+strict-align")
1005 if(Feature ==
"+v8a"&& ArchInfo->Version < llvm::AArch64::ARMV8A.Version)
1006ArchInfo = &llvm::AArch64::ARMV8A;
1007 if(Feature ==
"+v8.1a"&&
1008ArchInfo->Version < llvm::AArch64::ARMV8_1A.Version)
1009ArchInfo = &llvm::AArch64::ARMV8_1A;
1010 if(Feature ==
"+v8.2a"&&
1011ArchInfo->Version < llvm::AArch64::ARMV8_2A.Version)
1012ArchInfo = &llvm::AArch64::ARMV8_2A;
1013 if(Feature ==
"+v8.3a"&&
1014ArchInfo->Version < llvm::AArch64::ARMV8_3A.Version)
1015ArchInfo = &llvm::AArch64::ARMV8_3A;
1016 if(Feature ==
"+v8.4a"&&
1017ArchInfo->Version < llvm::AArch64::ARMV8_4A.Version)
1018ArchInfo = &llvm::AArch64::ARMV8_4A;
1019 if(Feature ==
"+v8.5a"&&
1020ArchInfo->Version < llvm::AArch64::ARMV8_5A.Version)
1021ArchInfo = &llvm::AArch64::ARMV8_5A;
1022 if(Feature ==
"+v8.6a"&&
1023ArchInfo->Version < llvm::AArch64::ARMV8_6A.Version)
1024ArchInfo = &llvm::AArch64::ARMV8_6A;
1025 if(Feature ==
"+v8.7a"&&
1026ArchInfo->Version < llvm::AArch64::ARMV8_7A.Version)
1027ArchInfo = &llvm::AArch64::ARMV8_7A;
1028 if(Feature ==
"+v8.8a"&&
1029ArchInfo->Version < llvm::AArch64::ARMV8_8A.Version)
1030ArchInfo = &llvm::AArch64::ARMV8_8A;
1031 if(Feature ==
"+v8.9a"&&
1032ArchInfo->Version < llvm::AArch64::ARMV8_9A.Version)
1033ArchInfo = &llvm::AArch64::ARMV8_9A;
1034 if(Feature ==
"+v9a"&& ArchInfo->Version < llvm::AArch64::ARMV9A.Version)
1035ArchInfo = &llvm::AArch64::ARMV9A;
1036 if(Feature ==
"+v9.1a"&&
1037ArchInfo->Version < llvm::AArch64::ARMV9_1A.Version)
1038ArchInfo = &llvm::AArch64::ARMV9_1A;
1039 if(Feature ==
"+v9.2a"&&
1040ArchInfo->Version < llvm::AArch64::ARMV9_2A.Version)
1041ArchInfo = &llvm::AArch64::ARMV9_2A;
1042 if(Feature ==
"+v9.3a"&&
1043ArchInfo->Version < llvm::AArch64::ARMV9_3A.Version)
1044ArchInfo = &llvm::AArch64::ARMV9_3A;
1045 if(Feature ==
"+v9.4a"&&
1046ArchInfo->Version < llvm::AArch64::ARMV9_4A.Version)
1047ArchInfo = &llvm::AArch64::ARMV9_4A;
1048 if(Feature ==
"+v9.5a"&&
1049ArchInfo->Version < llvm::AArch64::ARMV9_5A.Version)
1050ArchInfo = &llvm::AArch64::ARMV9_5A;
1051 if(Feature ==
"+v9.6a"&&
1052ArchInfo->Version < llvm::AArch64::ARMV9_6A.Version)
1053ArchInfo = &llvm::AArch64::ARMV9_6A;
1054 if(Feature ==
"+v8r")
1055ArchInfo = &llvm::AArch64::ARMV8R;
1056 if(Feature ==
"+fullfp16") {
1058HasFullFP16 =
true;
1060 if(Feature ==
"+dotprod") {
1064 if(Feature ==
"+fp16fml") {
1066HasFullFP16 =
true;
1069 if(Feature ==
"+mte")
1071 if(Feature ==
"+tme")
1073 if(Feature ==
"+pauth")
1075 if(Feature ==
"+i8mm")
1077 if(Feature ==
"+bf16")
1078HasBFloat16 =
true;
1079 if(Feature ==
"+lse")
1081 if(Feature ==
"+ls64")
1083 if(Feature ==
"+rand")
1085 if(Feature ==
"+flagm")
1087 if(Feature ==
"+altnzcv") {
1089HasAlternativeNZCV =
true;
1091 if(Feature ==
"+mops")
1093 if(Feature ==
"+d128")
1095 if(Feature ==
"+gcs")
1097 if(Feature ==
"+rcpc3")
1099 if(Feature ==
"+pauth-lr") {
1108 for(
const auto&Feature : Features) {
1109 if(Feature ==
"-d128")
1144 if(Features ==
"default")
1147Features.split(AttrFeatures,
",");
1148 boolFoundArch =
false;
1150 autoSplitAndAddFeatures = [](StringRef FeatString,
1151std::vector<std::string> &Features,
1152llvm::AArch64::ExtensionSet &FeatureBits) {
1154FeatString.split(SplitFeatures, StringRef(
"+"), -1,
false);
1155 for(StringRef Feature : SplitFeatures) {
1156 if(FeatureBits.parseModifier(Feature))
1164 if(Feature.starts_with(
"no"))
1165Features.push_back(
"-"+ Feature.drop_front(2).str());
1167Features.push_back(
"+"+ Feature.str());
1171llvm::AArch64::ExtensionSet FeatureBits;
1176 for(
auto&Feature : AttrFeatures) {
1177Feature = Feature.trim();
1178 if(Feature.starts_with(
"fpmath="))
1181 if(Feature.starts_with(
"branch-protection=")) {
1182Ret.BranchProtection = Feature.split(
'=').second.trim();
1186 if(Feature.starts_with(
"arch=")) {
1188Ret.Duplicate =
"arch=";
1190std::pair<StringRef, StringRef> Split =
1191Feature.split(
"=").second.trim().split(
"+");
1192 constllvm::AArch64::ArchInfo *AI = llvm::AArch64::parseArch(Split.first);
1198FeatureBits.addArchDefaults(*AI);
1200SplitAndAddFeatures(Split.second, Ret.Features, FeatureBits);
1201}
else if(Feature.starts_with(
"cpu=")) {
1202 if(!Ret.CPU.empty())
1203Ret.Duplicate =
"cpu=";
1207std::pair<StringRef, StringRef> Split =
1208Feature.split(
"=").second.trim().split(
"+");
1209Ret.CPU = Split.first;
1210 if(
autoCpuInfo = llvm::AArch64::parseCpu(Ret.CPU)) {
1211FeatureBits.addCPUDefaults(*CpuInfo);
1212SplitAndAddFeatures(Split.second, Ret.Features, FeatureBits);
1215}
else if(Feature.starts_with(
"tune=")) {
1216 if(!Ret.Tune.empty())
1217Ret.Duplicate =
"tune=";
1219Ret.Tune = Feature.split(
"=").second.trim();
1220}
else if(Feature.starts_with(
"+")) {
1221SplitAndAddFeatures(Feature, Ret.Features, FeatureBits);
1223 if(FeatureBits.parseModifier(Feature,
true))
1231 if(Feature.starts_with(
"no-"))
1232Ret.Features.push_back(
"-"+ Feature.drop_front(3).str());
1234Ret.Features.push_back(
"+"+ Feature.str());
1237FeatureBits.toLLVMFeatureList(Ret.Features);
1270const char*
constAArch64TargetInfo::GCCRegNames[] = {
1274 "w0",
"w1",
"w2",
"w3",
"w4",
"w5",
"w6",
"w7",
"w8",
"w9",
"w10",
"w11",
1275 "w12",
"w13",
"w14",
"w15",
"w16",
"w17",
"w18",
"w19",
"w20",
"w21",
"w22",
1276 "w23",
"w24",
"w25",
"w26",
"w27",
"w28",
"w29",
"w30",
"wsp",
1279 "x0",
"x1",
"x2",
"x3",
"x4",
"x5",
"x6",
"x7",
"x8",
"x9",
"x10",
"x11",
1280 "x12",
"x13",
"x14",
"x15",
"x16",
"x17",
"x18",
"x19",
"x20",
"x21",
"x22",
1281 "x23",
"x24",
"x25",
"x26",
"x27",
"x28",
"fp",
"lr",
"sp",
1284 "s0",
"s1",
"s2",
"s3",
"s4",
"s5",
"s6",
"s7",
"s8",
"s9",
"s10",
"s11",
1285 "s12",
"s13",
"s14",
"s15",
"s16",
"s17",
"s18",
"s19",
"s20",
"s21",
"s22",
1286 "s23",
"s24",
"s25",
"s26",
"s27",
"s28",
"s29",
"s30",
"s31",
1289 "d0",
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d10",
"d11",
1290 "d12",
"d13",
"d14",
"d15",
"d16",
"d17",
"d18",
"d19",
"d20",
"d21",
"d22",
1291 "d23",
"d24",
"d25",
"d26",
"d27",
"d28",
"d29",
"d30",
"d31",
1294 "v0",
"v1",
"v2",
"v3",
"v4",
"v5",
"v6",
"v7",
"v8",
"v9",
"v10",
"v11",
1295 "v12",
"v13",
"v14",
"v15",
"v16",
"v17",
"v18",
"v19",
"v20",
"v21",
"v22",
1296 "v23",
"v24",
"v25",
"v26",
"v27",
"v28",
"v29",
"v30",
"v31",
1299 "z0",
"z1",
"z2",
"z3",
"z4",
"z5",
"z6",
"z7",
"z8",
"z9",
"z10",
1300 "z11",
"z12",
"z13",
"z14",
"z15",
"z16",
"z17",
"z18",
"z19",
"z20",
"z21",
1301 "z22",
"z23",
"z24",
"z25",
"z26",
"z27",
"z28",
"z29",
"z30",
"z31",
1304 "p0",
"p1",
"p2",
"p3",
"p4",
"p5",
"p6",
"p7",
"p8",
"p9",
"p10",
1305 "p11",
"p12",
"p13",
"p14",
"p15",
1308 "pn0",
"pn1",
"pn2",
"pn3",
"pn4",
"pn5",
"pn6",
"pn7",
"pn8",
1309 "pn9",
"pn10",
"pn11",
"pn12",
"pn13",
"pn14",
"pn15",
1322{{
"w31"},
"wsp"},
1335{{
"r10"},
"x10"},
1336{{
"r11"},
"x11"},
1337{{
"r12"},
"x12"},
1338{{
"r13"},
"x13"},
1339{{
"r14"},
"x14"},
1340{{
"r15"},
"x15"},
1341{{
"r16"},
"x16"},
1342{{
"r17"},
"x17"},
1343{{
"r18"},
"x18"},
1344{{
"r19"},
"x19"},
1345{{
"r20"},
"x20"},
1346{{
"r21"},
"x21"},
1347{{
"r22"},
"x22"},
1348{{
"r23"},
"x23"},
1349{{
"r24"},
"x24"},
1350{{
"r25"},
"x25"},
1351{{
"r26"},
"x26"},
1352{{
"r27"},
"x27"},
1353{{
"r28"},
"x28"},
1354{{
"r29",
"x29"},
"fp"},
1355{{
"r30",
"x30"},
"lr"},
1366 constexpr unsignedlen = 5;
1367 autoRV = llvm::StringSwitch<unsigned>(Name)
1368.Case(
"@cceq", len)
1369.Case(
"@ccne", len)
1370.Case(
"@cchs", len)
1371.Case(
"@cccs", len)
1372.Case(
"@cccc", len)
1373.Case(
"@cclo", len)
1374.Case(
"@ccmi", len)
1375.Case(
"@ccpl", len)
1376.Case(
"@ccvs", len)
1377.Case(
"@ccvc", len)
1378.Case(
"@cchi", len)
1379.Case(
"@ccls", len)
1380.Case(
"@ccge", len)
1381.Case(
"@cclt", len)
1382.Case(
"@ccgt", len)
1383.Case(
"@ccle", len)
1391 switch(*Constraint) {
1393R = std::string(
"@3") + std::string(Constraint, 3);
1398std::string Converted =
"{"+ std::string(Constraint, Len) +
"}";
1399Constraint += Len - 1;
1402 returnstd::string(1, *Constraint);
1434 if(Name[1] ==
'p'&&
1435(Name[2] ==
'l'|| Name[2] ==
'a'|| Name[2] ==
'h')) {
1441 if(Name[1] ==
'c'&& (Name[2] ==
'i'|| Name[2] ==
'j')) {
1476StringRef Constraint,
charModifier,
unsignedSize,
1477std::string &SuggestedModifier)
const{
1479Constraint = Constraint.ltrim(
"=+&");
1481 switch(Constraint[0]) {
1501SuggestedModifier =
"w";
1519 constllvm::APSInt &value)
const{
1520 return0 <= value && value <= 3;
1529voidAArch64leTargetInfo::setDataLayout() {
1530 if(
getTriple().isOSBinFormatMachO()) {
1532 resetDataLayout(
"e-m:o-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-" 1533 "i128:128-n32:64-S128-Fn32",
1536 resetDataLayout(
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-" 1537 "n32:64-S128-Fn32",
1540 resetDataLayout(
"e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-" 1541 "i64:64-i128:128-n32:64-S128-Fn32");
1546Builder.defineMacro(
"__AARCH64EL__");
1556Builder.defineMacro(
"__AARCH64EB__");
1557Builder.defineMacro(
"__AARCH_BIG_ENDIAN");
1558Builder.defineMacro(
"__ARM_BIG_ENDIAN");
1562voidAArch64beTargetInfo::setDataLayout() {
1563assert(!
getTriple().isOSBinFormatMachO());
1564 resetDataLayout(
"E-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-" 1565 "i64:64-i128:128-n32:64-S128-Fn32");
1574IntWidth = IntAlign = 32;
1575LongWidth = LongAlign = 32;
1576DoubleAlign = LongLongAlign = 64;
1577LongDoubleWidth = LongDoubleAlign = 64;
1578LongDoubleFormat = &llvm::APFloat::IEEEdouble();
1579IntMaxType = SignedLongLong;
1580Int64Type = SignedLongLong;
1581SizeType = UnsignedLongLong;
1582PtrDiffType = SignedLongLong;
1583IntPtrType = SignedLongLong;
1587resetDataLayout(Triple.isOSBinFormatMachO()
1588?
"e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:" 1589 "128-n32:64-S128-Fn32" 1590:
"e-m:w-p270:32:32-p271:32:32-p272:64:64-p:64:64-i32:32-" 1591 "i64:64-i128:128-n32:64-S128-Fn32",
1592Triple.isOSBinFormatMachO() ?
"_":
"");
1604 if(getTriple().isWindowsArm64EC())
1621 returnCCCR_Warning;
1628TheCXXABI.set(TargetCXXABI::Microsoft);
1634 if(getTriple().isWindowsArm64EC()) {
1635Builder.defineMacro(
"_M_X64",
"100");
1636Builder.defineMacro(
"_M_AMD64",
"100");
1637Builder.defineMacro(
"_M_ARM64EC",
"1");
1639Builder.defineMacro(
"_M_ARM64",
"1");
1645 returnCCK_MicrosoftWin64;
1649 boolHasNonWeakDef)
const{
1651WindowsARM64TargetInfo::getMinGlobalAlign(TypeSize, HasNonWeakDef);
1657 if(TypeSize >= 512) {
1658Align = std::max(Align, 128u);
1659}
else if(TypeSize >= 64) {
1660Align = std::max(Align, 64u);
1661}
else if(TypeSize >= 16) {
1662Align = std::max(Align, 32u);
1670TheCXXABI.set(TargetCXXABI::GenericAArch64);
1680Int64Type = SignedLongLong;
1681 if(getTriple().isArch32Bit())
1682IntMaxType = SignedLongLong;
1684WCharType = SignedInt;
1685UseSignedCharForObjCBool =
false;
1687LongDoubleWidth = LongDoubleAlign = SuitableAlign = 64;
1688LongDoubleFormat = &llvm::APFloat::IEEEdouble();
1690UseZeroLengthBitfieldAlignment =
false;
1692 if(getTriple().isArch32Bit()) {
1693UseBitFieldTypeAlignment =
false;
1694ZeroLengthBitfieldBoundary = 32;
1695UseZeroLengthBitfieldAlignment =
true;
1696TheCXXABI.set(TargetCXXABI::WatchOS);
1698TheCXXABI.set(TargetCXXABI::AppleARM64);
1703 constllvm::Triple &Triple) {
1704Builder.defineMacro(
"__AARCH64_SIMD__");
1705 if(Triple.isArch32Bit())
1706Builder.defineMacro(
"__ARM64_ARCH_8_32__");
1708Builder.defineMacro(
"__ARM64_ARCH_8__");
1709Builder.defineMacro(
"__ARM_NEON__");
1710Builder.defineMacro(
"__REGISTER_PREFIX__",
"");
1711Builder.defineMacro(
"__arm64",
"1");
1712Builder.defineMacro(
"__arm64__",
"1");
1714 if(Triple.isArm64e())
1715Builder.defineMacro(
"__arm64e__",
"1");
1719 constllvm::Triple &Triple,
1727 constllvm::Triple &Triple,
Defines the Diagnostic-related interfaces.
static unsigned matchAsmCCConstraint(const char *Name)
#define ARM_ACLE_VERSION(Y, Q, P)
static constexpr Builtin::Info BuiltinInfo[]
static constexpr Builtin::Info BuiltinInfo[]
Defines the clang::LangOptions interface.
Enumerates target-specific builtins in their own namespaces within namespace clang.
__device__ __2f16 float c
Concrete class used by the front-end to report problems and issues.
DiagnosticBuilder Report(SourceLocation Loc, unsigned DiagID)
Issue the message to the client.
@ None
No signing for any function.
@ NonLeaf
Sign the return address of functions that spill LR.
@ All
Sign the return address of all functions,.
@ BKey
Return address signing uses APIB key.
@ AKey
Return address signing uses APIA key.
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
bool isSignReturnAddressWithAKey() const
Check if return address signing uses AKey.
bool hasSignReturnAddress() const
Check if return address signing is enabled.
bool isSignReturnAddressScopeAll() const
Check if leaf functions are also signed.
LangOptions::SignReturnAddressScopeKind SignReturnAddr
LangOptions::SignReturnAddressKeyKind SignKey
bool BranchProtectionPAuthLR
bool BranchTargetEnforcement
Exposes information about the current target.
TargetOptions & getTargetOpts() const
Retrieve the target options.
const llvm::Triple & getTriple() const
Returns the target triple of the primary target.
const LangASMap * AddrSpaceMap
unsigned HasAArch64SVETypes
void resetDataLayout(StringRef DL, const char *UserLabelPrefix="")
BuiltinVaListKind
The different kinds of __builtin_va_list types defined by the target implementation.
@ AArch64ABIBuiltinVaList
__builtin_va_list as defined by the AArch64 ABI http://infocenter.arm.com/help/topic/com....
@ CharPtrBuiltinVaList
typedef char* __builtin_va_list;
unsigned HasUnalignedAccess
unsigned char MaxAtomicPromoteWidth
virtual std::string convertConstraint(const char *&Constraint) const
unsigned char MaxAtomicInlineWidth
unsigned HasBuiltinMSVaList
Options for controlling the target.
llvm::EABI EABIVersion
The EABI version to use.
std::vector< std::string > FeaturesAsWritten
The list of target specific features to enable or disable, as written on the command line.
llvm::StringMap< bool > FeatureMap
The map of which features have been enabled disabled based on the command line.
void getTargetDefinesARMV95A(const LangOptions &Opts, MacroBuilder &Builder) const
std::string_view getClobbers() const override
Returns a string of target-specific clobbers, in LLVM format.
bool hasFeature(StringRef Feature) const override
Determine whether the given target has the given feature.
std::string convertConstraint(const char *&Constraint) const override
ArrayRef< TargetInfo::GCCRegAlias > getGCCRegAliases() const override
bool hasBFloat16Type() const override
Determine whether the _BFloat16 type is supported on this target.
ParsedTargetAttr parseTargetAttr(StringRef Str) const override
void getTargetDefinesARMV96A(const LangOptions &Opts, MacroBuilder &Builder) const
AArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
ArrayRef< const char * > getGCCRegNames() const override
bool validateGlobalRegisterVariable(StringRef RegName, unsigned RegSize, bool &HasSizeMismatch) const override
Validate register name used for global register variables.
bool handleTargetFeatures(std::vector< std::string > &Features, DiagnosticsEngine &Diags) override
Perform initialization based on the user configured set of features (e.g., +sse4).
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-â Other target property query methods -----------------------â===//
void setFeatureEnabled(llvm::StringMap< bool > &Features, StringRef Name, bool Enabled) const override
Enable or disable a specific target feature; the feature name must be valid.
void getTargetDefinesARMV89A(const LangOptions &Opts, MacroBuilder &Builder) const
void getTargetDefinesARMV92A(const LangOptions &Opts, MacroBuilder &Builder) const
uint64_t getFMVPriority(ArrayRef< StringRef > Features) const override
bool validateTarget(DiagnosticsEngine &Diags) const override
Check the target is valid after it is fully initialized.
void getTargetDefinesARMV93A(const LangOptions &Opts, MacroBuilder &Builder) const
bool setABI(const std::string &Name) override
Use the specified ABI.
void getTargetDefinesARMV84A(const LangOptions &Opts, MacroBuilder &Builder) const
bool isValidCPUName(StringRef Name) const override
Determine whether this TargetInfo supports the given CPU name.
void fillValidCPUList(SmallVectorImpl< StringRef > &Values) const override
Fill a SmallVectorImpl with the valid values to setCPU.
StringRef getABI() const override
Get the ABI currently in use.
bool hasInt128Type() const override
Determine whether the __int128 type is supported on this target.
void getTargetDefinesARMV88A(const LangOptions &Opts, MacroBuilder &Builder) const
bool validateBranchProtection(StringRef Spec, StringRef Arch, BranchProtectionInfo &BPI, StringRef &Err) const override
Determine if this TargetInfo supports the given branch protection specification.
void getTargetDefinesARMV87A(const LangOptions &Opts, MacroBuilder &Builder) const
void getTargetDefinesARMV9A(const LangOptions &Opts, MacroBuilder &Builder) const
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Determines whether a given calling convention is valid for the target.
void getTargetDefinesARMV91A(const LangOptions &Opts, MacroBuilder &Builder) const
std::optional< std::pair< unsigned, unsigned > > getVScaleRange(const LangOptions &LangOpts, bool IsArmStreamingFunction) const override
Returns target-specific min and max values VScale_Range.
BuiltinVaListKind getBuiltinVaListKind() const override
Returns the kind of __builtin_va_list type that should be used with this target.
int getEHDataRegisterNumber(unsigned RegNo) const override
Return the register number that __builtin_eh_return_regno would return with the specified argument.
void getTargetDefinesARMV81A(const LangOptions &Opts, MacroBuilder &Builder) const
ArrayRef< Builtin::Info > getTargetBuiltins() const override
Return information about target-specific builtins for the current primary target, and info about whic...
void getTargetDefinesARMV86A(const LangOptions &Opts, MacroBuilder &Builder) const
bool setCPU(const std::string &Name) override
Target the specified CPU.
void getTargetDefinesARMV94A(const LangOptions &Opts, MacroBuilder &Builder) const
bool validateConstraintModifier(StringRef Constraint, char Modifier, unsigned Size, std::string &SuggestedModifier) const override
bool isCLZForZeroUndef() const override
The __builtin_clz* and __builtin_ctz* built-in functions are specified to have undefined results for ...
void getTargetDefinesARMV82A(const LangOptions &Opts, MacroBuilder &Builder) const
void getTargetDefinesARMV83A(const LangOptions &Opts, MacroBuilder &Builder) const
bool validateCpuSupports(StringRef FeatureStr) const override
bool validatePointerAuthKey(const llvm::APSInt &value) const override
Determine whether the given pointer-authentication key is valid.
bool validateAsmConstraint(const char *&Name, TargetInfo::ConstraintInfo &Info) const override
bool doesFeatureAffectCodeGen(StringRef Name) const override
Returns true if feature has an impact on target code generation.
void getTargetDefinesARMV85A(const LangOptions &Opts, MacroBuilder &Builder) const
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-â Other target property query methods -----------------------â===//
AArch64beTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
AArch64leTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
===-â Other target property query methods -----------------------â===//
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
AppleMachOAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
DarwinAArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
BuiltinVaListKind getBuiltinVaListKind() const override
void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, MacroBuilder &Builder) const override
unsigned getMinGlobalAlign(uint64_t TypeSize, bool HasNonWeakDef) const override
MicrosoftARM64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
TargetInfo::CallingConvKind getCallingConvKind(bool ClangABICompat4) const override
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
MinGWARM64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void getTargetDefines(const LangOptions &Opts, MacroBuilder &Builder) const override
BuiltinVaListKind getBuiltinVaListKind() const override
WindowsARM64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
void setDataLayout() override
CallingConvCheckResult checkCallingConvention(CallingConv CC) const override
Defines the clang::TargetInfo interface.
void getAppleMachOAArch64Defines(MacroBuilder &Builder, const LangOptions &Opts, const llvm::Triple &Triple)
static const unsigned ARM64AddrSpaceMap[]
The JSON file list parser is used to communicate input to InstallAPI.
CallingConv
CallingConv - Specifies the calling convention that a function uses.
bool IsArmStreamingFunction(const FunctionDecl *FD, bool IncludeLocallyStreaming)
Returns whether the given FunctionDecl has an __arm[_locally]_streaming attribute.
Contains information gathered from parsing the contents of TargetAttr.
unsigned UseZeroLengthBitfieldAlignment
Whether zero length bitfields (e.g., int : 0;) force alignment of the next bitfield.
unsigned short SuitableAlign
unsigned char PointerWidth
const llvm::fltSemantics * LongDoubleFormat
std::optional< unsigned > BitIntMaxAlign
unsigned UseBitFieldTypeAlignment
Control whether the alignment of bit-field types is respected when laying out structures.
unsigned char PointerAlign
unsigned char BFloat16Width
unsigned char LongDoubleAlign
unsigned char LongDoubleWidth
unsigned char BFloat16Align
const llvm::fltSemantics * BFloat16Format
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4