aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/Mips
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-01-11 04:04:14 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-01-11 04:04:14 +0000
commit29a17145ad4985df032785cc1b4716fd7875d47b (patch)
treea6bf3ba76d742cfc7059fd0acce9020dce491bd0 /lib/Target/Mips
parentfddf80459747198d2ee33974c90f6137ea29cbd8 (diff)
downloadexternal_llvm-29a17145ad4985df032785cc1b4716fd7875d47b.zip
external_llvm-29a17145ad4985df032785cc1b4716fd7875d47b.tar.gz
external_llvm-29a17145ad4985df032785cc1b4716fd7875d47b.tar.bz2
Add big endian mips support. Based on a patch by Jack Carter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147924 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips')
-rw-r--r--lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp21
-rw-r--r--lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp12
-rw-r--r--lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h3
3 files changed, 20 insertions, 16 deletions
diff --git a/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp b/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
index bd9b641..f4227f7 100644
--- a/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
+++ b/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
@@ -71,7 +71,9 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
namespace {
class MipsAsmBackend : public MCAsmBackend {
public:
- MipsAsmBackend(const Target &T) : MCAsmBackend() {}
+ uint8_t OSABI;
+ MipsAsmBackend(const Target &T, uint8_t OSABI_) :
+ MCAsmBackend(), OSABI(OSABI_) {}
/// ApplyFixup - Apply the \arg Value for given \arg Fixup into the provided
/// data fragment, at the offset specified by the fixup and following the
@@ -191,10 +193,8 @@ public:
class MipsEB_AsmBackend : public MipsAsmBackend {
public:
- uint8_t OSABI;
-
MipsEB_AsmBackend(const Target &T, uint8_t _OSABI)
- : MipsAsmBackend(T), OSABI(_OSABI) {}
+ : MipsAsmBackend(T, _OSABI) {}
MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createMipsELFObjectWriter(OS, /*IsLittleEndian*/ false, OSABI);
@@ -203,10 +203,8 @@ public:
class MipsEL_AsmBackend : public MipsAsmBackend {
public:
- uint8_t OSABI;
-
MipsEL_AsmBackend(const Target &T, uint8_t _OSABI)
- : MipsAsmBackend(T), OSABI(_OSABI) {}
+ : MipsAsmBackend(T, _OSABI) {}
MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
return createMipsELFObjectWriter(OS, /*IsLittleEndian*/ true, OSABI);
@@ -214,11 +212,12 @@ public:
};
} // namespace
-MCAsmBackend *llvm::createMipsAsmBackend(const Target &T, StringRef TT) {
- Triple TheTriple(TT);
+MCAsmBackend *llvm::createMipsBEAsmBackend(const Target &T, StringRef TT) {
+ uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(Triple(TT).getOS());
+ return new MipsEB_AsmBackend(T, OSABI);
+}
- // just return little endian for now
- //
+MCAsmBackend *llvm::createMipsLEAsmBackend(const Target &T, StringRef TT) {
uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(Triple(TT).getOS());
return new MipsEL_AsmBackend(T, OSABI);
}
diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
index 4584d6d..154ca17 100644
--- a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
+++ b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
@@ -136,10 +136,14 @@ extern "C" void LLVMInitializeMipsTargetMC() {
TargetRegistry::RegisterMCObjectStreamer(TheMips64elTarget, createMCStreamer);
// Register the asm backend.
- TargetRegistry::RegisterMCAsmBackend(TheMipsTarget, createMipsAsmBackend);
- TargetRegistry::RegisterMCAsmBackend(TheMipselTarget, createMipsAsmBackend);
- TargetRegistry::RegisterMCAsmBackend(TheMips64Target, createMipsAsmBackend);
- TargetRegistry::RegisterMCAsmBackend(TheMips64elTarget, createMipsAsmBackend);
+ TargetRegistry::RegisterMCAsmBackend(TheMipsTarget,
+ createMipsBEAsmBackend);
+ TargetRegistry::RegisterMCAsmBackend(TheMipselTarget,
+ createMipsLEAsmBackend);
+ TargetRegistry::RegisterMCAsmBackend(TheMips64Target,
+ createMipsBEAsmBackend);
+ TargetRegistry::RegisterMCAsmBackend(TheMips64elTarget,
+ createMipsLEAsmBackend);
TargetRegistry::RegisterMCCodeEmitter(TheMipsTarget, createMipsMCCodeEmitter);
TargetRegistry::RegisterMCCodeEmitter(TheMipselTarget,
diff --git a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
index de82347..63cb240 100644
--- a/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
+++ b/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
@@ -36,7 +36,8 @@ MCCodeEmitter *createMipsMCCodeEmitter(const MCInstrInfo &MCII,
const MCSubtargetInfo &STI,
MCContext &Ctx);
-MCAsmBackend *createMipsAsmBackend(const Target &T, StringRef TT);
+MCAsmBackend *createMipsBEAsmBackend(const Target &T, StringRef TT);
+MCAsmBackend *createMipsLEAsmBackend(const Target &T, StringRef TT);
MCObjectWriter *createMipsELFObjectWriter(raw_ostream &OS,
bool IsLittleEndian,