Saleem Abdulrasool | 87ccd36 | 2014-01-07 02:28:42 +0000 | [diff] [blame^] | 1 | //===-- ARMBuildAttrs.cpp - ARM Build Attributes --------------------------===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | |
| 10 | #include "ARMBuildAttrs.h" |
| 11 | #include "llvm/ADT/StringRef.h" |
| 12 | #include "llvm/Support/Debug.h" |
| 13 | |
| 14 | using namespace llvm; |
| 15 | |
| 16 | namespace { |
| 17 | const struct { |
| 18 | ARMBuildAttrs::AttrType Attr; |
| 19 | const char *TagName; |
| 20 | } ARMAttributeTags[] = { |
| 21 | { ARMBuildAttrs::File, "Tag_File" }, |
| 22 | { ARMBuildAttrs::Section, "Tag_Section" }, |
| 23 | { ARMBuildAttrs::Symbol, "Tag_Symbol" }, |
| 24 | { ARMBuildAttrs::CPU_raw_name, "Tag_CPU_raw_name" }, |
| 25 | { ARMBuildAttrs::CPU_name, "Tag_CPU_name" }, |
| 26 | { ARMBuildAttrs::CPU_arch, "Tag_CPU_arch" }, |
| 27 | { ARMBuildAttrs::CPU_arch_profile, "Tag_CPU_arch_profile" }, |
| 28 | { ARMBuildAttrs::ARM_ISA_use, "Tag_ARM_ISA_use" }, |
| 29 | { ARMBuildAttrs::THUMB_ISA_use, "Tag_THUMB_ISA_use" }, |
| 30 | { ARMBuildAttrs::FP_arch, "Tag_FP_arch" }, |
| 31 | { ARMBuildAttrs::WMMX_arch, "Tag_WMMX_arch" }, |
| 32 | { ARMBuildAttrs::Advanced_SIMD_arch, "Tag_Advanced_SIMD_arch" }, |
| 33 | { ARMBuildAttrs::PCS_config, "Tag_PCS_config" }, |
| 34 | { ARMBuildAttrs::ABI_PCS_R9_use, "Tag_ABI_PCS_R9_use" }, |
| 35 | { ARMBuildAttrs::ABI_PCS_RW_data, "Tag_ABI_PCS_RW_data" }, |
| 36 | { ARMBuildAttrs::ABI_PCS_RO_data, "Tag_ABI_PCS_RO_data" }, |
| 37 | { ARMBuildAttrs::ABI_PCS_GOT_use, "Tag_ABI_PCS_GOT_use" }, |
| 38 | { ARMBuildAttrs::ABI_PCS_wchar_t, "Tag_ABI_PCS_wchar_t" }, |
| 39 | { ARMBuildAttrs::ABI_FP_rounding, "Tag_ABI_FP_rounding" }, |
| 40 | { ARMBuildAttrs::ABI_FP_denormal, "Tag_ABI_FP_denormal" }, |
| 41 | { ARMBuildAttrs::ABI_FP_exceptions, "Tag_ABI_FP_exceptions" }, |
| 42 | { ARMBuildAttrs::ABI_FP_user_exceptions, "Tag_ABI_FP_user_exceptions" }, |
| 43 | { ARMBuildAttrs::ABI_FP_number_model, "Tag_ABI_FP_number_model" }, |
| 44 | { ARMBuildAttrs::ABI_align8_needed, "Tag_ABI_align8_needed" }, |
| 45 | { ARMBuildAttrs::ABI_align8_preserved, "Tag_ABI_align8_preserved" }, |
| 46 | { ARMBuildAttrs::ABI_enum_size, "Tag_ABI_enum_size" }, |
| 47 | { ARMBuildAttrs::ABI_HardFP_use, "Tag_ABI_HardFP_use" }, |
| 48 | { ARMBuildAttrs::ABI_VFP_args, "Tag_ABI_VFP_args" }, |
| 49 | { ARMBuildAttrs::ABI_WMMX_args, "Tag_ABI_WMMX_args" }, |
| 50 | { ARMBuildAttrs::ABI_optimization_goals, "Tag_ABI_optimization_goals" }, |
| 51 | { ARMBuildAttrs::ABI_FP_optimization_goals, "Tag_ABI_FP_optimization_goals" }, |
| 52 | { ARMBuildAttrs::compatibility, "Tag_compatibility" }, |
| 53 | { ARMBuildAttrs::CPU_unaligned_access, "Tag_CPU_unaligned_access" }, |
| 54 | { ARMBuildAttrs::FP_HP_extension, "Tag_FP_HP_extension" }, |
| 55 | { ARMBuildAttrs::ABI_FP_16bit_format, "Tag_ABI_FP_16bit_format" }, |
| 56 | { ARMBuildAttrs::MPextension_use, "Tag_MPextension_use" }, |
| 57 | { ARMBuildAttrs::DIV_use, "Tag_DIV_use" }, |
| 58 | { ARMBuildAttrs::nodefaults, "Tag_nodefaults" }, |
| 59 | { ARMBuildAttrs::also_compatible_with, "Tag_also_compatible_with" }, |
| 60 | { ARMBuildAttrs::T2EE_use, "Tag_T2EE_use" }, |
| 61 | { ARMBuildAttrs::conformance, "Tag_conformance" }, |
| 62 | { ARMBuildAttrs::Virtualization_use, "Tag_Virtualization_use" }, |
| 63 | |
| 64 | // Legacy Names |
| 65 | { ARMBuildAttrs::FP_arch, "Tag_VFP_arch" }, |
| 66 | { ARMBuildAttrs::ABI_align8_needed, "Tag_ABI_align_needed" }, |
| 67 | { ARMBuildAttrs::ABI_align8_preserved, "Tag_ABI_align_preserved" }, |
| 68 | { ARMBuildAttrs::FP_HP_extension, "Tag_VFP_HP_extension" }, |
| 69 | }; |
| 70 | } |
| 71 | |
| 72 | namespace llvm { |
| 73 | namespace ARMBuildAttrs { |
| 74 | StringRef AttrTypeAsString(unsigned Attr, bool HasTagPrefix) { |
| 75 | return AttrTypeAsString(static_cast<AttrType>(Attr), HasTagPrefix); |
| 76 | } |
| 77 | |
| 78 | StringRef AttrTypeAsString(AttrType Attr, bool HasTagPrefix) { |
| 79 | for (unsigned TI = 0, TE = sizeof(ARMAttributeTags) / sizeof(*ARMAttributeTags); |
| 80 | TI != TE; ++TI) |
| 81 | if (ARMAttributeTags[TI].Attr == Attr) |
| 82 | return ARMAttributeTags[TI].TagName + (HasTagPrefix ? 0 : 4); |
| 83 | return ""; |
| 84 | } |
| 85 | |
| 86 | int AttrTypeFromString(StringRef Tag) { |
| 87 | bool HasTagPrefix = Tag.startswith("Tag_"); |
| 88 | for (unsigned TI = 0, TE = sizeof(ARMAttributeTags) / sizeof(*ARMAttributeTags); |
| 89 | TI != TE; ++TI) |
| 90 | if (StringRef(ARMAttributeTags[TI].TagName + (HasTagPrefix ? 0 : 4)) == Tag) |
| 91 | return ARMAttributeTags[TI].Attr; |
| 92 | return -1; |
| 93 | } |
| 94 | } |
| 95 | } |
| 96 | |