A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/Basic_2Targets_2AArch64_8cpp_source.html below:

clang: lib/Basic/Targets/AArch64.cpp Source File

18#include "llvm/ADT/APSInt.h" 19#include "llvm/ADT/ArrayRef.h" 20#include "llvm/ADT/StringExtras.h" 21#include "llvm/ADT/StringSwitch.h" 22#include "llvm/TargetParser/AArch64TargetParser.h" 23#include "llvm/TargetParser/ARMTargetParserCommon.h" 26using namespace clang

;

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) {

79

HasAlternativeNZCV =

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) {

114

HasAlternativeNZCV =

true

;

115

HasFRInt3264 =

true

;

154 if

(Triple.isArch64Bit())

199 if

(Triple.getOS() == llvm::Triple::Linux)

201 else if

(Triple.getOS() == llvm::Triple::UnknownOS)

203

Opts.

EABIVersion

== llvm::EABI::GNU ?

"\01_mcount"

:

"mcount"

;

209 if

(Name !=

"aapcs"

&& Name !=

"aapcs-soft"

&& Name !=

"darwinpcs"

&&

210

Name !=

"pauthtest"

)

218 if

(

hasFeature

(

"fp"

) && ABI ==

"aapcs-soft"

) {

221

Diags.

Report

(diag::err_target_unsupported_abi_with_fpu) << ABI;

224 if

(

getTriple

().getEnvironment() == llvm::Triple::PAuthTest &&

225 getTriple

().getOS() != llvm::Triple::Linux) {

226

Diags.

Report

(diag::err_target_unsupported_abi_for_triple)

234

StringRef RegName,

unsigned

RegSize,

bool

&HasSizeMismatch)

const

{

235 if

(RegName ==

"sp"

) {

236

HasSizeMismatch = RegSize != 64;

239 if

(RegName.starts_with(

"w"

))

240

HasSizeMismatch = RegSize != 32;

241 else if

(RegName.starts_with(

"x"

))

242

HasSizeMismatch = RegSize != 64;

245

StringRef RegNum = RegName.drop_front();

248 return

RegNum ==

"0"

||

250

llvm::AArch64::isX18ReservedByDefault(

getTriple

())) ||

256

StringRef &Err)

const

{

257

llvm::ARM::ParsedBranchProtection PBP;

258 if

(!llvm::ARM::parseBranchProtection(Spec, PBP, Err, HasPAuthLR))

262

llvm::StringSwitch<LangOptions::SignReturnAddressScopeKind>(PBP.Scope)

267 if

(PBP.Key ==

"a_key"

)

279 return

llvm::AArch64::parseCpu(Name).has_value();

288

llvm::AArch64::fillValidCPUArchList(Values);

293

Builder.defineMacro(

"__ARM_FEATURE_QRDMX"

,

"1"

);

304

Builder.defineMacro(

"__ARM_FEATURE_COMPLEX"

,

"1"

);

305

Builder.defineMacro(

"__ARM_FEATURE_JCVT"

,

"1"

);

318

Builder.defineMacro(

"__ARM_FEATURE_FRINT"

,

"1"

);

399

Builder.defineMacro(

"__amd64__"

);

400

Builder.defineMacro(

"__amd64"

);

401

Builder.defineMacro(

"__x86_64"

);

402

Builder.defineMacro(

"__x86_64__"

);

403

Builder.defineMacro(

"__arm64ec__"

);

405

Builder.defineMacro(

"__aarch64__"

);

409

Builder.defineMacro(

"__GCC_ASM_FLAG_OUTPUTS__"

);

412 if

(CodeModel ==

"default"

)

413

CodeModel =

"small"

;

414 for

(

char

&

c

: CodeModel)

416

Builder.defineMacro(

"__AARCH64_CMODEL_"

+ CodeModel +

"__"

);

419

Builder.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)) 423

Builder.defineMacro(

"__FUNCTION_MULTI_VERSIONING_SUPPORT_LEVEL"

,

425#undef ARM_ACLE_VERSION 426

Builder.defineMacro(

"__ARM_ARCH"

,

427

std::to_string(ArchInfo->Version.getMajor()));

428

Builder.defineMacro(

"__ARM_ARCH_PROFILE"

,

429

std::string(

"'"

) + (

char

)ArchInfo->Profile +

"'"

);

431

Builder.defineMacro(

"__ARM_64BIT_STATE"

,

"1"

);

432

Builder.defineMacro(

"__ARM_PCS_AAPCS64"

,

"1"

);

433

Builder.defineMacro(

"__ARM_ARCH_ISA_A64"

,

"1"

);

435

Builder.defineMacro(

"__ARM_FEATURE_CLZ"

,

"1"

);

436

Builder.defineMacro(

"__ARM_FEATURE_FMA"

,

"1"

);

437

Builder.defineMacro(

"__ARM_FEATURE_LDREX"

,

"0xF"

);

438

Builder.defineMacro(

"__ARM_FEATURE_IDIV"

,

"1"

);

439

Builder.defineMacro(

"__ARM_FEATURE_DIV"

);

440

Builder.defineMacro(

"__ARM_FEATURE_NUMERIC_MAXMIN"

,

"1"

);

441

Builder.defineMacro(

"__ARM_FEATURE_DIRECTED_ROUNDING"

,

"1"

);

443

Builder.defineMacro(

"__ARM_ALIGN_MAX_STACK_PWR"

,

"4"

);

447

Builder.defineMacro(

"__ARM_STATE_ZA"

,

"1"

);

448

Builder.defineMacro(

"__ARM_STATE_ZT0"

,

"1"

);

452

Builder.defineMacro(

"__ARM_FP"

,

"0xE"

);

456

Builder.defineMacro(

"__ARM_FP16_FORMAT_IEEE"

,

"1"

);

457

Builder.defineMacro(

"__ARM_FP16_ARGS"

,

"1"

);

460

Builder.defineMacro(

"__ARM_NEON_SVE_BRIDGE"

,

"1"

);

462 if

(Opts.UnsafeFPMath)

463

Builder.defineMacro(

"__ARM_FP_FAST"

,

"1"

);

465

Builder.defineMacro(

"__ARM_SIZEOF_WCHAR_T"

,

466

Twine(Opts.WCharSize ? Opts.WCharSize : 4));

468

Builder.defineMacro(

"__ARM_SIZEOF_MINIMAL_ENUM"

, Opts.ShortEnums ?

"1"

:

"4"

);

470 if

(FPU & NeonMode) {

471

Builder.defineMacro(

"__ARM_NEON"

,

"1"

);

473

Builder.defineMacro(

"__ARM_NEON_FP"

,

"0xE"

);

477

Builder.defineMacro(

"__ARM_FEATURE_SVE"

,

"1"

);

480

Builder.defineMacro(

"__ARM_FEATURE_SVE2"

,

"1"

);

483

Builder.defineMacro(

"__ARM_FEATURE_SVE2p1"

,

"1"

);

485 if

(HasSVE2 && HasSVEAES)

486

Builder.defineMacro(

"__ARM_FEATURE_SVE2_AES"

,

"1"

);

488 if

(HasSVE2 && HasSVEBitPerm)

489

Builder.defineMacro(

"__ARM_FEATURE_SVE2_BITPERM"

,

"1"

);

491 if

(HasSVE2 && HasSVE2SHA3)

492

Builder.defineMacro(

"__ARM_FEATURE_SVE2_SHA3"

,

"1"

);

494 if

(HasSVE2 && HasSVE2SM4)

495

Builder.defineMacro(

"__ARM_FEATURE_SVE2_SM4"

,

"1"

);

498

Builder.defineMacro(

"__ARM_FEATURE_SVE_B16B16"

,

"1"

);

501

Builder.defineMacro(

"__ARM_FEATURE_SME"

);

502

Builder.defineMacro(

"__ARM_FEATURE_LOCALLY_STREAMING"

,

"1"

);

506

Builder.defineMacro(

"__ARM_FEATURE_SME2"

,

"1"

);

509

Builder.defineMacro(

"__ARM_FEATURE_SME2p1"

,

"1"

);

512

Builder.defineMacro(

"__ARM_FEATURE_SME_F16F16"

,

"1"

);

515

Builder.defineMacro(

"__ARM_FEATURE_SME_B16B16"

,

"1"

);

518

Builder.defineMacro(

"__ARM_FEATURE_CRC32"

,

"1"

);

521

Builder.defineMacro(

"__ARM_FEATURE_RCPC"

,

"3"

);

523

Builder.defineMacro(

"__ARM_FEATURE_RCPC"

,

"1"

);

526

Builder.defineMacro(

"__HAVE_FUNCTION_MULTI_VERSIONING"

,

"1"

);

530 if

(HasAES && HasSHA2)

531

Builder.defineMacro(

"__ARM_FEATURE_CRYPTO"

,

"1"

);

534

Builder.defineMacro(

"__ARM_FEATURE_AES"

,

"1"

);

537

Builder.defineMacro(

"__ARM_FEATURE_SHA2"

,

"1"

);

540

Builder.defineMacro(

"__ARM_FEATURE_SHA3"

,

"1"

);

541

Builder.defineMacro(

"__ARM_FEATURE_SHA512"

,

"1"

);

545

Builder.defineMacro(

"__ARM_FEATURE_SM3"

,

"1"

);

546

Builder.defineMacro(

"__ARM_FEATURE_SM4"

,

"1"

);

550

Builder.defineMacro(

"__ARM_FEATURE_PAUTH"

,

"1"

);

553

Builder.defineMacro(

"__ARM_FEATURE_PAUTH_LR"

,

"1"

);

556

Builder.defineMacro(

"__ARM_FEATURE_BTI"

,

"1"

);

559

Builder.defineMacro(

"__ARM_FEATURE_UNALIGNED"

,

"1"

);

561 if

((FPU & NeonMode) && HasFullFP16)

562

Builder.defineMacro(

"__ARM_FEATURE_FP16_VECTOR_ARITHMETIC"

,

"1"

);

564

Builder.defineMacro(

"__ARM_FEATURE_FP16_SCALAR_ARITHMETIC"

,

"1"

);

567

Builder.defineMacro(

"__ARM_FEATURE_DOTPROD"

,

"1"

);

570

Builder.defineMacro(

"__ARM_FEATURE_MEMORY_TAGGING"

,

"1"

);

573

Builder.defineMacro(

"__ARM_FEATURE_TME"

,

"1"

);

576

Builder.defineMacro(

"__ARM_FEATURE_MATMUL_INT8"

,

"1"

);

579

Builder.defineMacro(

"__ARM_FEATURE_ATOMICS"

,

"1"

);

582

Builder.defineMacro(

"__ARM_FEATURE_BF16"

,

"1"

);

583

Builder.defineMacro(

"__ARM_FEATURE_BF16_VECTOR_ARITHMETIC"

,

"1"

);

584

Builder.defineMacro(

"__ARM_BF16_FORMAT_ALTERNATIVE"

,

"1"

);

585

Builder.defineMacro(

"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC"

,

"1"

);

588 if

((FPU & SveMode) && HasBFloat16) {

589

Builder.defineMacro(

"__ARM_FEATURE_SVE_BF16"

,

"1"

);

592 if

((FPU & SveMode) && HasMatmulFP64)

593

Builder.defineMacro(

"__ARM_FEATURE_SVE_MATMUL_FP64"

,

"1"

);

595 if

((FPU & SveMode) && HasMatmulFP32)

596

Builder.defineMacro(

"__ARM_FEATURE_SVE_MATMUL_FP32"

,

"1"

);

598 if

((FPU & SveMode) && HasMatMul)

599

Builder.defineMacro(

"__ARM_FEATURE_SVE_MATMUL_INT8"

,

"1"

);

601 if

((FPU & NeonMode) && HasFP16FML)

602

Builder.defineMacro(

"__ARM_FEATURE_FP16_FML"

,

"1"

);

620 if

(Opts.BranchProtectionPAuthLR)

623

Builder.defineMacro(

"__ARM_FEATURE_PAC_DEFAULT"

, std::to_string(

Value

));

626 if

(Opts.BranchTargetEnforcement)

627

Builder.defineMacro(

"__ARM_FEATURE_BTI_DEFAULT"

,

"1"

);

629 if

(Opts.GuardedControlStack)

630

Builder.defineMacro(

"__ARM_FEATURE_GCS_DEFAULT"

,

"1"

);

633

Builder.defineMacro(

"__ARM_FEATURE_LS64"

,

"1"

);

636

Builder.defineMacro(

"__ARM_FEATURE_RNG"

,

"1"

);

639

Builder.defineMacro(

"__ARM_FEATURE_MOPS"

,

"1"

);

642

Builder.defineMacro(

"__ARM_FEATURE_SYSREG128"

,

"1"

);

645

Builder.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)

681

Builder.defineMacro(

"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1"

);

682

Builder.defineMacro(

"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2"

);

683

Builder.defineMacro(

"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4"

);

684

Builder.defineMacro(

"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8"

);

685

Builder.defineMacro(

"__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16"

);

688

Builder.defineMacro(

"__FP_FAST_FMA"

,

"1"

);

689

Builder.defineMacro(

"__FP_FAST_FMAF"

,

"1"

);

693

Builder.defineMacro(

"__ARM_FEATURE_SVE_VECTOR_OPERATORS"

,

"2"

);

695 if

(Opts.VScaleMin && Opts.VScaleMin == Opts.VScaleMax) {

696

Builder.defineMacro(

"__ARM_FEATURE_SVE_BITS"

, Twine(Opts.VScaleMin * 128));

705

std::optional<std::pair<unsigned, unsigned>>

708 if

(LangOpts.VScaleMin || LangOpts.VScaleMax)

709 return

std::pair<unsigned, unsigned>(

710

LangOpts.VScaleMin ? LangOpts.VScaleMin : 1, LangOpts.VScaleMax);

713 return

std::pair<unsigned, unsigned>(1, 16);

719 return

llvm::AArch64::getFMVPriority(Features);

724 if

(

auto

Ext = llvm::AArch64::parseFMVExtension(Name))

725 return

Ext->ID.has_value();

732

FeatureStr.split(Features,

"+"

);

733 for

(

auto

&Feature : Features)

734 if

(!llvm::AArch64::parseFMVExtension(Feature.trim()).has_value())

740 return

llvm::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)

797

StringRef Name,

bool

Enabled)

const

{

798

Features[Name] = Enabled;

801 const

std::optional<llvm::AArch64::ArchInfo> ArchInfo =

802

llvm::AArch64::ArchInfo::findBySubArch(Name);

811 for

(

const auto

*OtherArch : llvm::AArch64::ArchInfos)

812 if

(ArchInfo->implies(*OtherArch))

813

Features[OtherArch->getSubArch()] =

true

;

816

std::vector<StringRef> CPUFeats;

817 if

(llvm::AArch64::getExtensionFeatures(ArchInfo->DefaultExts, CPUFeats)) {

818 for

(

auto

F : CPUFeats) {

819

assert(F[0] ==

'+'

&&

"Expected + in target feature!"

);

820

Features[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"

)

884

HasSVEB16B16 =

true

;

885 if

(Feature ==

"+sve-bitperm"

) {

888

HasSVEBitPerm =

true

;

890 if

(Feature ==

"+f32mm"

) {

894

HasMatmulFP32 =

true

;

896 if

(Feature ==

"+f64mm"

) {

900

HasMatmulFP64 =

true

;

902 if

(Feature ==

"+sme"

) {

907 if

(Feature ==

"+sme2"

) {

913 if

(Feature ==

"+sme2p1"

) {

920 if

(Feature ==

"+sme-f64f64"

) {

922

HasSMEF64F64 =

true

;

926 if

(Feature ==

"+sme-i16i64"

) {

928

HasSMEI16I64 =

true

;

932 if

(Feature ==

"+sme-fa64"

) {

939 if

(Feature ==

"+sme-f16f16"

) {

944

HasSMEF16F16 =

true

;

946 if

(Feature ==

"+sme-b16b16"

) {

951

HasSVEB16B16 =

true

;

952

HasSMEB16B16 =

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"

)

996

HasFRInt3264 =

true

;

997 if

(Feature ==

"+sm4"

) {

1001 if

(Feature ==

"+strict-align"

)

1005 if

(Feature ==

"+v8a"

&& ArchInfo->Version < llvm::AArch64::ARMV8A.Version)

1006

ArchInfo = &llvm::AArch64::ARMV8A;

1007 if

(Feature ==

"+v8.1a"

&&

1008

ArchInfo->Version < llvm::AArch64::ARMV8_1A.Version)

1009

ArchInfo = &llvm::AArch64::ARMV8_1A;

1010 if

(Feature ==

"+v8.2a"

&&

1011

ArchInfo->Version < llvm::AArch64::ARMV8_2A.Version)

1012

ArchInfo = &llvm::AArch64::ARMV8_2A;

1013 if

(Feature ==

"+v8.3a"

&&

1014

ArchInfo->Version < llvm::AArch64::ARMV8_3A.Version)

1015

ArchInfo = &llvm::AArch64::ARMV8_3A;

1016 if

(Feature ==

"+v8.4a"

&&

1017

ArchInfo->Version < llvm::AArch64::ARMV8_4A.Version)

1018

ArchInfo = &llvm::AArch64::ARMV8_4A;

1019 if

(Feature ==

"+v8.5a"

&&

1020

ArchInfo->Version < llvm::AArch64::ARMV8_5A.Version)

1021

ArchInfo = &llvm::AArch64::ARMV8_5A;

1022 if

(Feature ==

"+v8.6a"

&&

1023

ArchInfo->Version < llvm::AArch64::ARMV8_6A.Version)

1024

ArchInfo = &llvm::AArch64::ARMV8_6A;

1025 if

(Feature ==

"+v8.7a"

&&

1026

ArchInfo->Version < llvm::AArch64::ARMV8_7A.Version)

1027

ArchInfo = &llvm::AArch64::ARMV8_7A;

1028 if

(Feature ==

"+v8.8a"

&&

1029

ArchInfo->Version < llvm::AArch64::ARMV8_8A.Version)

1030

ArchInfo = &llvm::AArch64::ARMV8_8A;

1031 if

(Feature ==

"+v8.9a"

&&

1032

ArchInfo->Version < llvm::AArch64::ARMV8_9A.Version)

1033

ArchInfo = &llvm::AArch64::ARMV8_9A;

1034 if

(Feature ==

"+v9a"

&& ArchInfo->Version < llvm::AArch64::ARMV9A.Version)

1035

ArchInfo = &llvm::AArch64::ARMV9A;

1036 if

(Feature ==

"+v9.1a"

&&

1037

ArchInfo->Version < llvm::AArch64::ARMV9_1A.Version)

1038

ArchInfo = &llvm::AArch64::ARMV9_1A;

1039 if

(Feature ==

"+v9.2a"

&&

1040

ArchInfo->Version < llvm::AArch64::ARMV9_2A.Version)

1041

ArchInfo = &llvm::AArch64::ARMV9_2A;

1042 if

(Feature ==

"+v9.3a"

&&

1043

ArchInfo->Version < llvm::AArch64::ARMV9_3A.Version)

1044

ArchInfo = &llvm::AArch64::ARMV9_3A;

1045 if

(Feature ==

"+v9.4a"

&&

1046

ArchInfo->Version < llvm::AArch64::ARMV9_4A.Version)

1047

ArchInfo = &llvm::AArch64::ARMV9_4A;

1048 if

(Feature ==

"+v9.5a"

&&

1049

ArchInfo->Version < llvm::AArch64::ARMV9_5A.Version)

1050

ArchInfo = &llvm::AArch64::ARMV9_5A;

1051 if

(Feature ==

"+v9.6a"

&&

1052

ArchInfo->Version < llvm::AArch64::ARMV9_6A.Version)

1053

ArchInfo = &llvm::AArch64::ARMV9_6A;

1054 if

(Feature ==

"+v8r"

)

1055

ArchInfo = &llvm::AArch64::ARMV8R;

1056 if

(Feature ==

"+fullfp16"

) {

1058

HasFullFP16 =

true

;

1060 if

(Feature ==

"+dotprod"

) {

1064 if

(Feature ==

"+fp16fml"

) {

1066

HasFullFP16 =

true

;

1069 if

(Feature ==

"+mte"

)

1071 if

(Feature ==

"+tme"

)

1073 if

(Feature ==

"+pauth"

)

1075 if

(Feature ==

"+i8mm"

)

1077 if

(Feature ==

"+bf16"

)

1078

HasBFloat16 =

true

;

1079 if

(Feature ==

"+lse"

)

1081 if

(Feature ==

"+ls64"

)

1083 if

(Feature ==

"+rand"

)

1085 if

(Feature ==

"+flagm"

)

1087 if

(Feature ==

"+altnzcv"

) {

1089

HasAlternativeNZCV =

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"

)

1147

Features.split(AttrFeatures,

","

);

1148 bool

FoundArch =

false

;

1150 auto

SplitAndAddFeatures = [](StringRef FeatString,

1151

std::vector<std::string> &Features,

1152

llvm::AArch64::ExtensionSet &FeatureBits) {

1154

FeatString.split(SplitFeatures, StringRef(

"+"

), -1,

false

);

1155 for

(StringRef Feature : SplitFeatures) {

1156 if

(FeatureBits.parseModifier(Feature))

1164 if

(Feature.starts_with(

"no"

))

1165

Features.push_back(

"-"

+ Feature.drop_front(2).str());

1167

Features.push_back(

"+"

+ Feature.str());

1171

llvm::AArch64::ExtensionSet FeatureBits;

1176 for

(

auto

&Feature : AttrFeatures) {

1177

Feature = Feature.trim();

1178 if

(Feature.starts_with(

"fpmath="

))

1181 if

(Feature.starts_with(

"branch-protection="

)) {

1182

Ret.BranchProtection = Feature.split(

'='

).second.trim();

1186 if

(Feature.starts_with(

"arch="

)) {

1188

Ret.Duplicate =

"arch="

;

1190

std::pair<StringRef, StringRef> Split =

1191

Feature.split(

"="

).second.trim().split(

"+"

);

1192 const

llvm::AArch64::ArchInfo *AI = llvm::AArch64::parseArch(Split.first);

1198

FeatureBits.addArchDefaults(*AI);

1200

SplitAndAddFeatures(Split.second, Ret.Features, FeatureBits);

1201

}

else if

(Feature.starts_with(

"cpu="

)) {

1202 if

(!Ret.CPU.empty())

1203

Ret.Duplicate =

"cpu="

;

1207

std::pair<StringRef, StringRef> Split =

1208

Feature.split(

"="

).second.trim().split(

"+"

);

1209

Ret.CPU = Split.first;

1210 if

(

auto

CpuInfo = llvm::AArch64::parseCpu(Ret.CPU)) {

1211

FeatureBits.addCPUDefaults(*CpuInfo);

1212

SplitAndAddFeatures(Split.second, Ret.Features, FeatureBits);

1215

}

else if

(Feature.starts_with(

"tune="

)) {

1216 if

(!Ret.Tune.empty())

1217

Ret.Duplicate =

"tune="

;

1219

Ret.Tune = Feature.split(

"="

).second.trim();

1220

}

else if

(Feature.starts_with(

"+"

)) {

1221

SplitAndAddFeatures(Feature, Ret.Features, FeatureBits);

1223 if

(FeatureBits.parseModifier(Feature,

true

))

1231 if

(Feature.starts_with(

"no-"

))

1232

Ret.Features.push_back(

"-"

+ Feature.drop_front(3).str());

1234

Ret.Features.push_back(

"+"

+ Feature.str());

1237

FeatureBits.toLLVMFeatureList(Ret.Features);

1270const char

*

const

AArch64TargetInfo::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 unsigned

len = 5;

1367 auto

RV = 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) {

1393

R = std::string(

"@3"

) + std::string(Constraint, 3);

1398

std::string Converted =

"{"

+ std::string(Constraint, Len) +

"}"

;

1399

Constraint += Len - 1;

1402 return

std::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'

)) {

1476

StringRef Constraint,

char

Modifier,

unsigned

Size,

1477

std::string &SuggestedModifier)

const

{

1479

Constraint = Constraint.ltrim(

"=+&"

);

1481 switch

(Constraint[0]) {

1501

SuggestedModifier =

"w"

;

1519 const

llvm::APSInt &value)

const

{

1520 return

0 <= value && value <= 3;

1529void

AArch64leTargetInfo::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"

);

1546

Builder.defineMacro(

"__AARCH64EL__"

);

1556

Builder.defineMacro(

"__AARCH64EB__"

);

1557

Builder.defineMacro(

"__AARCH_BIG_ENDIAN"

);

1558

Builder.defineMacro(

"__ARM_BIG_ENDIAN"

);

1562void

AArch64beTargetInfo::setDataLayout() {

1563

assert(!

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"

);

1574

IntWidth = IntAlign = 32;

1575

LongWidth = LongAlign = 32;

1576

DoubleAlign = LongLongAlign = 64;

1577

LongDoubleWidth = LongDoubleAlign = 64;

1578

LongDoubleFormat = &llvm::APFloat::IEEEdouble();

1579

IntMaxType = SignedLongLong;

1580

Int64Type = SignedLongLong;

1581

SizeType = UnsignedLongLong;

1582

PtrDiffType = SignedLongLong;

1583

IntPtrType = SignedLongLong;

1587

resetDataLayout(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"

,

1592

Triple.isOSBinFormatMachO() ?

"_"

:

""

);

1604 if

(getTriple().isWindowsArm64EC())

1621 return

CCCR_Warning;

1628

TheCXXABI.set(TargetCXXABI::Microsoft);

1634 if

(getTriple().isWindowsArm64EC()) {

1635

Builder.defineMacro(

"_M_X64"

,

"100"

);

1636

Builder.defineMacro(

"_M_AMD64"

,

"100"

);

1637

Builder.defineMacro(

"_M_ARM64EC"

,

"1"

);

1639

Builder.defineMacro(

"_M_ARM64"

,

"1"

);

1645 return

CCK_MicrosoftWin64;

1649 bool

HasNonWeakDef)

const

{

1651

WindowsARM64TargetInfo::getMinGlobalAlign(TypeSize, HasNonWeakDef);

1657 if

(TypeSize >= 512) {

1658

Align = std::max(Align, 128u);

1659

}

else if

(TypeSize >= 64) {

1660

Align = std::max(Align, 64u);

1661

}

else if

(TypeSize >= 16) {

1662

Align = std::max(Align, 32u);

1670

TheCXXABI.set(TargetCXXABI::GenericAArch64);

1680

Int64Type = SignedLongLong;

1681 if

(getTriple().isArch32Bit())

1682

IntMaxType = SignedLongLong;

1684

WCharType = SignedInt;

1685

UseSignedCharForObjCBool =

false

;

1687

LongDoubleWidth = LongDoubleAlign = SuitableAlign = 64;

1688

LongDoubleFormat = &llvm::APFloat::IEEEdouble();

1690

UseZeroLengthBitfieldAlignment =

false

;

1692 if

(getTriple().isArch32Bit()) {

1693

UseBitFieldTypeAlignment =

false

;

1694

ZeroLengthBitfieldBoundary = 32;

1695

UseZeroLengthBitfieldAlignment =

true

;

1696

TheCXXABI.set(TargetCXXABI::WatchOS);

1698

TheCXXABI.set(TargetCXXABI::AppleARM64);

1703 const

llvm::Triple &Triple) {

1704

Builder.defineMacro(

"__AARCH64_SIMD__"

);

1705 if

(Triple.isArch32Bit())

1706

Builder.defineMacro(

"__ARM64_ARCH_8_32__"

);

1708

Builder.defineMacro(

"__ARM64_ARCH_8__"

);

1709

Builder.defineMacro(

"__ARM_NEON__"

);

1710

Builder.defineMacro(

"__REGISTER_PREFIX__"

,

""

);

1711

Builder.defineMacro(

"__arm64"

,

"1"

);

1712

Builder.defineMacro(

"__arm64__"

,

"1"

);

1714 if

(Triple.isArm64e())

1715

Builder.defineMacro(

"__arm64e__"

,

"1"

);

1719 const

llvm::Triple &Triple,

1727 const

llvm::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