forked from OSchip/llvm-project
[Triple] Add isThumb and isARM functions.
Summary: isThumb returns true for Thumb triples (little and big endian), isARM returns true for ARM triples (little and big endian). There are a few more checks using arm/thumb that are not covered by those functions, e.g. that the architecture is either ARM or Thumb (little endian) or ARM/Thumb little endian only. Reviewers: javed.absar, rengolin, kristof.beyls, t.p.northover Reviewed By: rengolin Subscribers: llvm-commits, aemerson Differential Revision: https://reviews.llvm.org/D34682 llvm-svn: 310781
This commit is contained in:
parent
32546d1434
commit
a5ba4ee8bc
|
@ -630,6 +630,16 @@ public:
|
|||
return getArch() == Triple::nvptx || getArch() == Triple::nvptx64;
|
||||
}
|
||||
|
||||
/// Tests whether the target is Thumb (little and big endian).
|
||||
bool isThumb() const {
|
||||
return getArch() == Triple::thumb || getArch() == Triple::thumbeb;
|
||||
}
|
||||
|
||||
/// Tests whether the target is ARM (little and big endian).
|
||||
bool isARM() const {
|
||||
return getArch() == Triple::arm || getArch() == Triple::armeb;
|
||||
}
|
||||
|
||||
/// Tests wether the target supports comdat
|
||||
bool supportsCOMDAT() const { return !isOSBinFormatMachO(); }
|
||||
|
||||
|
|
|
@ -113,8 +113,7 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI, const Triple &T,
|
|||
OS << 'c';
|
||||
if (Flags & ELF::XCORE_SHF_DP_SECTION)
|
||||
OS << 'd';
|
||||
} else if (Arch == Triple::arm || Arch == Triple::armeb ||
|
||||
Arch == Triple::thumb || Arch == Triple::thumbeb) {
|
||||
} else if (T.isARM() || T.isThumb()) {
|
||||
if (Flags & ELF::SHF_ARM_PURECODE)
|
||||
OS << 'y';
|
||||
}
|
||||
|
|
|
@ -260,8 +260,7 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {
|
|||
|
||||
std::string Triple;
|
||||
// Default to ARM, but use the triple if it's been set.
|
||||
if (TheTriple.getArch() == Triple::thumb ||
|
||||
TheTriple.getArch() == Triple::thumbeb)
|
||||
if (TheTriple.isThumb())
|
||||
Triple = "thumb";
|
||||
else
|
||||
Triple = "arm";
|
||||
|
|
|
@ -476,11 +476,7 @@ void ARMAsmPrinter::EmitStartOfAsmFile(Module &M) {
|
|||
// Use the triple's architecture and subarchitecture to determine
|
||||
// if we're thumb for the purposes of the top level code16 assembler
|
||||
// flag.
|
||||
bool isThumb = TT.getArch() == Triple::thumb ||
|
||||
TT.getArch() == Triple::thumbeb ||
|
||||
TT.getSubArch() == Triple::ARMSubArch_v7m ||
|
||||
TT.getSubArch() == Triple::ARMSubArch_v6m;
|
||||
if (!M.getModuleInlineAsm().empty() && isThumb)
|
||||
if (!M.getModuleInlineAsm().empty() && TT.isThumb())
|
||||
OutStreamer->EmitAssemblerFlag(MCAF_Code16);
|
||||
}
|
||||
|
||||
|
|
|
@ -135,8 +135,7 @@ public:
|
|||
const Triple &TT = TM.getTargetTriple();
|
||||
if (!TT.isOSBinFormatMachO())
|
||||
return 0;
|
||||
bool isThumb = TT.getArch() == Triple::thumb ||
|
||||
TT.getArch() == Triple::thumbeb ||
|
||||
bool isThumb = TT.isThumb() ||
|
||||
TT.getSubArch() == Triple::ARMSubArch_v7m ||
|
||||
TT.getSubArch() == Triple::ARMSubArch_v6m;
|
||||
return isThumb ? ARM::DW_ISA_ARM_thumb : ARM::DW_ISA_ARM_arm;
|
||||
|
|
|
@ -131,16 +131,13 @@ static bool getARMLoadDeprecationInfo(MCInst &MI, const MCSubtargetInfo &STI,
|
|||
#include "ARMGenSubtargetInfo.inc"
|
||||
|
||||
std::string ARM_MC::ParseARMTriple(const Triple &TT, StringRef CPU) {
|
||||
bool isThumb =
|
||||
TT.getArch() == Triple::thumb || TT.getArch() == Triple::thumbeb;
|
||||
|
||||
std::string ARMArchFeature;
|
||||
|
||||
ARM::ArchKind ArchID = ARM::parseArch(TT.getArchName());
|
||||
if (ArchID != ARM::ArchKind::INVALID && (CPU.empty() || CPU == "generic"))
|
||||
ARMArchFeature = (ARMArchFeature + "+" + ARM::getArchName(ArchID)).str();
|
||||
|
||||
if (isThumb) {
|
||||
if (TT.isThumb()) {
|
||||
if (ARMArchFeature.empty())
|
||||
ARMArchFeature = "+thumb-mode";
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue