[llvm-commits] [llvm] r147924 - in /llvm/trunk: lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h test/MC/Mips/elf_basic.s

Rafael Espindola rafael.espindola at gmail.com
Tue Jan 10 20:04:15 PST 2012


Author: rafael
Date: Tue Jan 10 22:04:14 2012
New Revision: 147924

URL: http://llvm.org/viewvc/llvm-project?rev=147924&view=rev
Log:
Add big endian mips support. Based on a patch by Jack Carter.

Modified:
    llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
    llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
    llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
    llvm/trunk/test/MC/Mips/elf_basic.s

Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp?rev=147924&r1=147923&r2=147924&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Tue Jan 10 22:04:14 2012
@@ -71,7 +71,9 @@
 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 @@
 
 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 @@
 
 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 @@
 };
 } // 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);
 }

Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp?rev=147924&r1=147923&r2=147924&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp Tue Jan 10 22:04:14 2012
@@ -136,10 +136,14 @@
   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,

Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h?rev=147924&r1=147923&r2=147924&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h (original)
+++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h Tue Jan 10 22:04:14 2012
@@ -36,7 +36,8 @@
                                        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,

Modified: llvm/trunk/test/MC/Mips/elf_basic.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/elf_basic.s?rev=147924&r1=147923&r2=147924&view=diff
==============================================================================
--- llvm/trunk/test/MC/Mips/elf_basic.s (original)
+++ llvm/trunk/test/MC/Mips/elf_basic.s Tue Jan 10 22:04:14 2012
@@ -1,5 +1,7 @@
+; RUN: llc -filetype=obj -mtriple mips-unknown-linux %s -o - | elf-dump --dump-section-data  | FileCheck -check-prefix=CHECK-BE %s
 ; RUN: llc -filetype=obj -mtriple mipsel-unknown-linux %s -o - | elf-dump --dump-section-data  | FileCheck -check-prefix=CHECK-LE %s
 
 ; Check that we produce the correct endian.
 
+; CHECK-BE: ('e_indent[EI_DATA]', 0x02)
 ; CHECK-LE: ('e_indent[EI_DATA]', 0x01)





More information about the llvm-commits mailing list