diff options
| -rw-r--r-- | llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h | 3 | ||||
| -rw-r--r-- | llvm/test/MC/Mips/elf_basic.s | 2 | 
4 files changed, 22 insertions, 16 deletions
diff --git a/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp index bd9b6412a58..f4227f794b7 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp +++ b/llvm/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/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp index 4584d6d4e1f..154ca17ba0f 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp +++ b/llvm/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/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h b/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h index de8234787dc..63cb24052de 100644 --- a/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h +++ b/llvm/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, diff --git a/llvm/test/MC/Mips/elf_basic.s b/llvm/test/MC/Mips/elf_basic.s index 4a53a8047ea..46211823b66 100644 --- a/llvm/test/MC/Mips/elf_basic.s +++ b/llvm/test/MC/Mips/elf_basic.s @@ -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)  | 

