mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Move ARM build attributes into Support
This moves the ARM build attributes definitions and support routines into the Support library. The support routines simply permit the conversion of the value to and from a string representation. The movement is prompted in order to permit access to the constants and string representations from readobj in order to facilitate decoding of the attributes section. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199575 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
//===-- ARMBuildAttrs.cpp - ARM Build Attributes --------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Support/ARMBuildAttributes.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
const struct {
|
||||
ARMBuildAttrs::AttrType Attr;
|
||||
const char *TagName;
|
||||
} ARMAttributeTags[] = {
|
||||
{ ARMBuildAttrs::File, "Tag_File" },
|
||||
{ ARMBuildAttrs::Section, "Tag_Section" },
|
||||
{ ARMBuildAttrs::Symbol, "Tag_Symbol" },
|
||||
{ ARMBuildAttrs::CPU_raw_name, "Tag_CPU_raw_name" },
|
||||
{ ARMBuildAttrs::CPU_name, "Tag_CPU_name" },
|
||||
{ ARMBuildAttrs::CPU_arch, "Tag_CPU_arch" },
|
||||
{ ARMBuildAttrs::CPU_arch_profile, "Tag_CPU_arch_profile" },
|
||||
{ ARMBuildAttrs::ARM_ISA_use, "Tag_ARM_ISA_use" },
|
||||
{ ARMBuildAttrs::THUMB_ISA_use, "Tag_THUMB_ISA_use" },
|
||||
{ ARMBuildAttrs::FP_arch, "Tag_FP_arch" },
|
||||
{ ARMBuildAttrs::WMMX_arch, "Tag_WMMX_arch" },
|
||||
{ ARMBuildAttrs::Advanced_SIMD_arch, "Tag_Advanced_SIMD_arch" },
|
||||
{ ARMBuildAttrs::PCS_config, "Tag_PCS_config" },
|
||||
{ ARMBuildAttrs::ABI_PCS_R9_use, "Tag_ABI_PCS_R9_use" },
|
||||
{ ARMBuildAttrs::ABI_PCS_RW_data, "Tag_ABI_PCS_RW_data" },
|
||||
{ ARMBuildAttrs::ABI_PCS_RO_data, "Tag_ABI_PCS_RO_data" },
|
||||
{ ARMBuildAttrs::ABI_PCS_GOT_use, "Tag_ABI_PCS_GOT_use" },
|
||||
{ ARMBuildAttrs::ABI_PCS_wchar_t, "Tag_ABI_PCS_wchar_t" },
|
||||
{ ARMBuildAttrs::ABI_FP_rounding, "Tag_ABI_FP_rounding" },
|
||||
{ ARMBuildAttrs::ABI_FP_denormal, "Tag_ABI_FP_denormal" },
|
||||
{ ARMBuildAttrs::ABI_FP_exceptions, "Tag_ABI_FP_exceptions" },
|
||||
{ ARMBuildAttrs::ABI_FP_user_exceptions, "Tag_ABI_FP_user_exceptions" },
|
||||
{ ARMBuildAttrs::ABI_FP_number_model, "Tag_ABI_FP_number_model" },
|
||||
{ ARMBuildAttrs::ABI_align8_needed, "Tag_ABI_align8_needed" },
|
||||
{ ARMBuildAttrs::ABI_align8_preserved, "Tag_ABI_align8_preserved" },
|
||||
{ ARMBuildAttrs::ABI_enum_size, "Tag_ABI_enum_size" },
|
||||
{ ARMBuildAttrs::ABI_HardFP_use, "Tag_ABI_HardFP_use" },
|
||||
{ ARMBuildAttrs::ABI_VFP_args, "Tag_ABI_VFP_args" },
|
||||
{ ARMBuildAttrs::ABI_WMMX_args, "Tag_ABI_WMMX_args" },
|
||||
{ ARMBuildAttrs::ABI_optimization_goals, "Tag_ABI_optimization_goals" },
|
||||
{ ARMBuildAttrs::ABI_FP_optimization_goals, "Tag_ABI_FP_optimization_goals" },
|
||||
{ ARMBuildAttrs::compatibility, "Tag_compatibility" },
|
||||
{ ARMBuildAttrs::CPU_unaligned_access, "Tag_CPU_unaligned_access" },
|
||||
{ ARMBuildAttrs::FP_HP_extension, "Tag_FP_HP_extension" },
|
||||
{ ARMBuildAttrs::ABI_FP_16bit_format, "Tag_ABI_FP_16bit_format" },
|
||||
{ ARMBuildAttrs::MPextension_use, "Tag_MPextension_use" },
|
||||
{ ARMBuildAttrs::DIV_use, "Tag_DIV_use" },
|
||||
{ ARMBuildAttrs::nodefaults, "Tag_nodefaults" },
|
||||
{ ARMBuildAttrs::also_compatible_with, "Tag_also_compatible_with" },
|
||||
{ ARMBuildAttrs::T2EE_use, "Tag_T2EE_use" },
|
||||
{ ARMBuildAttrs::conformance, "Tag_conformance" },
|
||||
{ ARMBuildAttrs::Virtualization_use, "Tag_Virtualization_use" },
|
||||
|
||||
// Legacy Names
|
||||
{ ARMBuildAttrs::FP_arch, "Tag_VFP_arch" },
|
||||
{ ARMBuildAttrs::ABI_align8_needed, "Tag_ABI_align_needed" },
|
||||
{ ARMBuildAttrs::ABI_align8_preserved, "Tag_ABI_align_preserved" },
|
||||
{ ARMBuildAttrs::FP_HP_extension, "Tag_VFP_HP_extension" },
|
||||
};
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
namespace ARMBuildAttrs {
|
||||
StringRef AttrTypeAsString(unsigned Attr, bool HasTagPrefix) {
|
||||
return AttrTypeAsString(static_cast<AttrType>(Attr), HasTagPrefix);
|
||||
}
|
||||
|
||||
StringRef AttrTypeAsString(AttrType Attr, bool HasTagPrefix) {
|
||||
for (unsigned TI = 0, TE = sizeof(ARMAttributeTags) / sizeof(*ARMAttributeTags);
|
||||
TI != TE; ++TI)
|
||||
if (ARMAttributeTags[TI].Attr == Attr)
|
||||
return ARMAttributeTags[TI].TagName + (HasTagPrefix ? 0 : 4);
|
||||
return "";
|
||||
}
|
||||
|
||||
int AttrTypeFromString(StringRef Tag) {
|
||||
bool HasTagPrefix = Tag.startswith("Tag_");
|
||||
for (unsigned TI = 0, TE = sizeof(ARMAttributeTags) / sizeof(*ARMAttributeTags);
|
||||
TI != TE; ++TI)
|
||||
if (StringRef(ARMAttributeTags[TI].TagName + (HasTagPrefix ? 0 : 4)) == Tag)
|
||||
return ARMAttributeTags[TI].Attr;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user