xref: /llvm-project/llvm/lib/Support/AArch64BuildAttributes.cpp (revision de4bbbfdccb6172c563b07889ecfb06bc4974a7e)
1ee99c4d4SSivanShani-Arm //===-- AArch64BuildAttributes.cpp - AArch64 Build Attributes -------------===//
2ee99c4d4SSivanShani-Arm //
3ee99c4d4SSivanShani-Arm // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ee99c4d4SSivanShani-Arm // See https://llvm.org/LICENSE.txt for license information.
5ee99c4d4SSivanShani-Arm // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ee99c4d4SSivanShani-Arm //
7ee99c4d4SSivanShani-Arm //===----------------------------------------------------------------------===//
8ee99c4d4SSivanShani-Arm 
9ee99c4d4SSivanShani-Arm #include "llvm/Support/AArch64BuildAttributes.h"
10ee99c4d4SSivanShani-Arm #include "llvm/ADT/StringSwitch.h"
11ee99c4d4SSivanShani-Arm 
125daecd4aSFangrui Song using namespace llvm;
13*de4bbbfdSSivanShani-Arm using namespace llvm::AArch64BuildAttrs;
14ee99c4d4SSivanShani-Arm 
15*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getVendorName(unsigned Vendor) {
16ee99c4d4SSivanShani-Arm   switch (Vendor) {
17ee99c4d4SSivanShani-Arm   case AEABI_FEATURE_AND_BITS:
18ee99c4d4SSivanShani-Arm     return "aeabi_feature_and_bits";
19ee99c4d4SSivanShani-Arm   case AEABI_PAUTHABI:
20ee99c4d4SSivanShani-Arm     return "aeabi_pauthabi";
21ee99c4d4SSivanShani-Arm   case VENDOR_UNKNOWN:
22ee99c4d4SSivanShani-Arm     return "";
23ee99c4d4SSivanShani-Arm   default:
24ee99c4d4SSivanShani-Arm     assert(0 && "Vendor name error");
25ee99c4d4SSivanShani-Arm     return "";
26ee99c4d4SSivanShani-Arm   }
27ee99c4d4SSivanShani-Arm }
28*de4bbbfdSSivanShani-Arm VendorID AArch64BuildAttrs::getVendorID(StringRef Vendor) {
29ee99c4d4SSivanShani-Arm   return StringSwitch<VendorID>(Vendor)
30ee99c4d4SSivanShani-Arm       .Case("aeabi_feature_and_bits", AEABI_FEATURE_AND_BITS)
31ee99c4d4SSivanShani-Arm       .Case("aeabi_pauthabi", AEABI_PAUTHABI)
32ee99c4d4SSivanShani-Arm       .Default(VENDOR_UNKNOWN);
33ee99c4d4SSivanShani-Arm }
34ee99c4d4SSivanShani-Arm 
35*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getOptionalStr(unsigned Optional) {
36ee99c4d4SSivanShani-Arm   switch (Optional) {
37ee99c4d4SSivanShani-Arm   case REQUIRED:
38ee99c4d4SSivanShani-Arm     return "required";
39ee99c4d4SSivanShani-Arm   case OPTIONAL:
40ee99c4d4SSivanShani-Arm     return "optional";
41ee99c4d4SSivanShani-Arm   case OPTIONAL_NOT_FOUND:
42ee99c4d4SSivanShani-Arm   default:
43ee99c4d4SSivanShani-Arm     return "";
44ee99c4d4SSivanShani-Arm   }
45ee99c4d4SSivanShani-Arm }
46*de4bbbfdSSivanShani-Arm SubsectionOptional AArch64BuildAttrs::getOptionalID(StringRef Optional) {
47ee99c4d4SSivanShani-Arm   return StringSwitch<SubsectionOptional>(Optional)
48ee99c4d4SSivanShani-Arm       .Case("required", REQUIRED)
49ee99c4d4SSivanShani-Arm       .Case("optional", OPTIONAL)
50ee99c4d4SSivanShani-Arm       .Default(OPTIONAL_NOT_FOUND);
51ee99c4d4SSivanShani-Arm }
52*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getSubsectionOptionalUnknownError() {
53ee99c4d4SSivanShani-Arm   return "unknown AArch64 build attributes optionality, expected "
54ee99c4d4SSivanShani-Arm          "required|optional";
55ee99c4d4SSivanShani-Arm }
56ee99c4d4SSivanShani-Arm 
57*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getTypeStr(unsigned Type) {
58ee99c4d4SSivanShani-Arm   switch (Type) {
59ee99c4d4SSivanShani-Arm   case ULEB128:
60ee99c4d4SSivanShani-Arm     return "uleb128";
61ee99c4d4SSivanShani-Arm   case NTBS:
62ee99c4d4SSivanShani-Arm     return "ntbs";
63ee99c4d4SSivanShani-Arm   case TYPE_NOT_FOUND:
64ee99c4d4SSivanShani-Arm   default:
65ee99c4d4SSivanShani-Arm     return "";
66ee99c4d4SSivanShani-Arm   }
67ee99c4d4SSivanShani-Arm }
68*de4bbbfdSSivanShani-Arm SubsectionType AArch64BuildAttrs::getTypeID(StringRef Type) {
69ee99c4d4SSivanShani-Arm   return StringSwitch<SubsectionType>(Type)
70ee99c4d4SSivanShani-Arm       .Cases("uleb128", "ULEB128", ULEB128)
71ee99c4d4SSivanShani-Arm       .Cases("ntbs", "NTBS", NTBS)
72ee99c4d4SSivanShani-Arm       .Default(TYPE_NOT_FOUND);
73ee99c4d4SSivanShani-Arm }
74*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getSubsectionTypeUnknownError() {
75ee99c4d4SSivanShani-Arm   return "unknown AArch64 build attributes type, expected uleb128|ntbs";
76ee99c4d4SSivanShani-Arm }
77ee99c4d4SSivanShani-Arm 
78*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getPauthABITagsStr(unsigned PauthABITag) {
79ee99c4d4SSivanShani-Arm   switch (PauthABITag) {
80ee99c4d4SSivanShani-Arm   case TAG_PAUTH_PLATFORM:
81ee99c4d4SSivanShani-Arm     return "Tag_PAuth_Platform";
82ee99c4d4SSivanShani-Arm   case TAG_PAUTH_SCHEMA:
83ee99c4d4SSivanShani-Arm     return "Tag_PAuth_Schema";
84ee99c4d4SSivanShani-Arm   case PAUTHABI_TAG_NOT_FOUND:
85ee99c4d4SSivanShani-Arm   default:
86ee99c4d4SSivanShani-Arm     return "";
87ee99c4d4SSivanShani-Arm   }
88ee99c4d4SSivanShani-Arm }
895daecd4aSFangrui Song 
90*de4bbbfdSSivanShani-Arm PauthABITags AArch64BuildAttrs::getPauthABITagsID(StringRef PauthABITag) {
91ee99c4d4SSivanShani-Arm   return StringSwitch<PauthABITags>(PauthABITag)
92ee99c4d4SSivanShani-Arm       .Case("Tag_PAuth_Platform", TAG_PAUTH_PLATFORM)
93ee99c4d4SSivanShani-Arm       .Case("Tag_PAuth_Schema", TAG_PAUTH_SCHEMA)
94ee99c4d4SSivanShani-Arm       .Default(PAUTHABI_TAG_NOT_FOUND);
95ee99c4d4SSivanShani-Arm }
96ee99c4d4SSivanShani-Arm 
975daecd4aSFangrui Song StringRef
98*de4bbbfdSSivanShani-Arm AArch64BuildAttrs::getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag) {
99ee99c4d4SSivanShani-Arm   switch (FeatureAndBitsTag) {
100ee99c4d4SSivanShani-Arm   case TAG_FEATURE_BTI:
101ee99c4d4SSivanShani-Arm     return "Tag_Feature_BTI";
102ee99c4d4SSivanShani-Arm   case TAG_FEATURE_PAC:
103ee99c4d4SSivanShani-Arm     return "Tag_Feature_PAC";
104ee99c4d4SSivanShani-Arm   case TAG_FEATURE_GCS:
105ee99c4d4SSivanShani-Arm     return "Tag_Feature_GCS";
106ee99c4d4SSivanShani-Arm   case FEATURE_AND_BITS_TAG_NOT_FOUND:
107ee99c4d4SSivanShani-Arm   default:
108ee99c4d4SSivanShani-Arm     return "";
109ee99c4d4SSivanShani-Arm   }
110ee99c4d4SSivanShani-Arm }
1115daecd4aSFangrui Song 
1125daecd4aSFangrui Song FeatureAndBitsTags
113*de4bbbfdSSivanShani-Arm AArch64BuildAttrs::getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag) {
114ee99c4d4SSivanShani-Arm   return StringSwitch<FeatureAndBitsTags>(FeatureAndBitsTag)
115ee99c4d4SSivanShani-Arm       .Case("Tag_Feature_BTI", TAG_FEATURE_BTI)
116ee99c4d4SSivanShani-Arm       .Case("Tag_Feature_PAC", TAG_FEATURE_PAC)
117ee99c4d4SSivanShani-Arm       .Case("Tag_Feature_GCS", TAG_FEATURE_GCS)
118ee99c4d4SSivanShani-Arm       .Default(FEATURE_AND_BITS_TAG_NOT_FOUND);
119ee99c4d4SSivanShani-Arm }
120