Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:44:36

0001 //===---------------- ARMTargetParserCommon ---------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0006 //
0007 //===----------------------------------------------------------------------===//
0008 //
0009 // Code that is common to ARMTargetParser and AArch64TargetParser.
0010 //
0011 //===----------------------------------------------------------------------===//
0012 
0013 #ifndef LLVM_TARGETPARSER_ARMTARGETPARSERCOMMON_H
0014 #define LLVM_TARGETPARSER_ARMTARGETPARSERCOMMON_H
0015 
0016 #include "llvm/ADT/StringRef.h"
0017 
0018 namespace llvm {
0019 namespace ARM {
0020 
0021 enum class ISAKind { INVALID = 0, ARM, THUMB, AARCH64 };
0022 
0023 enum class EndianKind { INVALID = 0, LITTLE, BIG };
0024 
0025 /// Converts e.g. "armv8" -> "armv8-a"
0026 StringRef getArchSynonym(StringRef Arch);
0027 
0028 /// MArch is expected to be of the form (arm|thumb)?(eb)?(v.+)?(eb)?, but
0029 /// (iwmmxt|xscale)(eb)? is also permitted. If the former, return
0030 /// "v.+", if the latter, return unmodified string, minus 'eb'.
0031 /// If invalid, return empty string.
0032 StringRef getCanonicalArchName(StringRef Arch);
0033 
0034 // ARM, Thumb, AArch64
0035 ISAKind parseArchISA(StringRef Arch);
0036 
0037 // Little/Big endian
0038 EndianKind parseArchEndian(StringRef Arch);
0039 
0040 struct ParsedBranchProtection {
0041   StringRef Scope;
0042   StringRef Key;
0043   bool BranchTargetEnforcement;
0044   bool BranchProtectionPAuthLR;
0045   bool GuardedControlStack;
0046 };
0047 
0048 bool parseBranchProtection(StringRef Spec, ParsedBranchProtection &PBP,
0049                            StringRef &Err, bool EnablePAuthLR = false);
0050 
0051 } // namespace ARM
0052 } // namespace llvm
0053 #endif