diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2008-06-04 01:45:25 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2008-06-04 01:45:25 +0000 |
commit | d2947ee33e810b24a016b944b375d34910f8f5dd (patch) | |
tree | 6249e99c30fd25c44a29226ac6ec053d772bdd05 /lib/Target/Mips/MipsTargetMachine.cpp | |
parent | 3094a4c97af4e81ff3bf9eea1997b86886dffcf2 (diff) |
Some Mips minor fixes
Added support for mips little endian arch => mipsel
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51923 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Mips/MipsTargetMachine.cpp')
-rw-r--r-- | lib/Target/Mips/MipsTargetMachine.cpp | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/lib/Target/Mips/MipsTargetMachine.cpp b/lib/Target/Mips/MipsTargetMachine.cpp index 40de5dff1b..b4ca963478 100644 --- a/lib/Target/Mips/MipsTargetMachine.cpp +++ b/lib/Target/Mips/MipsTargetMachine.cpp @@ -20,7 +20,8 @@ using namespace llvm; // Register the target. -static RegisterTarget<MipsTargetMachine> X("mips", " Mips"); +static RegisterTarget<MipsTargetMachine> X("mips", " Mips"); +static RegisterTarget<MipselTargetMachine> Y("mipsel", " Mipsel"); const TargetAsmInfo *MipsTargetMachine:: createTargetAsmInfo() const @@ -35,11 +36,13 @@ createTargetAsmInfo() const // offset from the stack/frame pointer, so StackGrowsUp is used. // When using CodeModel::Large the behaviour // -// MipsTargetMachine:: -MipsTargetMachine(const Module &M, const std::string &FS): - Subtarget(*this, M, FS), DataLayout("E-p:32:32:32"), - InstrInfo(*this), FrameInfo(TargetFrameInfo::StackGrowsUp, 8, 0), +MipsTargetMachine(const Module &M, const std::string &FS, bool isLittle=false): + Subtarget(*this, M, FS, isLittle), + DataLayout(isLittle ? std::string("e-p:32:32:32") : + std::string("E-p:32:32:32")), + InstrInfo(*this), + FrameInfo(TargetFrameInfo::StackGrowsUp, 8, 0), TLInfo(*this) { if (getRelocationModel() != Reloc::Static) @@ -48,6 +51,10 @@ MipsTargetMachine(const Module &M, const std::string &FS): setCodeModel(CodeModel::Small); } +MipselTargetMachine:: +MipselTargetMachine(const Module &M, const std::string &FS) : + MipsTargetMachine(M, FS, true) {} + // return 0 and must specify -march to gen MIPS code. unsigned MipsTargetMachine:: getModuleMatchQuality(const Module &M) @@ -60,6 +67,18 @@ getModuleMatchQuality(const Module &M) return 0; } +// return 0 and must specify -march to gen MIPSel code. +unsigned MipselTargetMachine:: +getModuleMatchQuality(const Module &M) +{ + // We strongly match "mipsel-*". + std::string TT = M.getTargetTriple(); + if (TT.size() >= 7 && std::string(TT.begin(), TT.begin()+7) == "mipsel-") + return 20; + + return 0; +} + // Install an instruction selector pass using // the ISelDag to gen Mips code. bool MipsTargetMachine:: |