diff options
author | Evan Cheng <evan.cheng@apple.com> | 2009-03-09 20:25:39 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2009-03-09 20:25:39 +0000 |
commit | 0ee0da841dae2d2d78875f738cf9d3ecdfb9d390 (patch) | |
tree | c693fc2629715825a6f12d7f7918217febc7e065 /llvm/lib/Target/ARM/ARMSubtarget.cpp | |
parent | 4249b9a698a004ed5647b8e9a514080ea4fb08c9 (diff) | |
download | bcm5719-llvm-0ee0da841dae2d2d78875f738cf9d3ecdfb9d390.tar.gz bcm5719-llvm-0ee0da841dae2d2d78875f738cf9d3ecdfb9d390.zip |
ARM target now also recognize triplets like thumbv6-apple-darwin and set thumb mode and arch subversion. Eventually thumb triplets will go way and replaced with function notes.
llvm-svn: 66435
Diffstat (limited to 'llvm/lib/Target/ARM/ARMSubtarget.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMSubtarget.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/llvm/lib/Target/ARM/ARMSubtarget.cpp b/llvm/lib/Target/ARM/ARMSubtarget.cpp index f5a18405f9e..2415a85051a 100644 --- a/llvm/lib/Target/ARM/ARMSubtarget.cpp +++ b/llvm/lib/Target/ARM/ARMSubtarget.cpp @@ -36,23 +36,30 @@ ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS, bool thumb) // if one cannot be determined, to true. const std::string& TT = M.getTargetTriple(); unsigned Len = TT.length(); - if (Len >= 5) { - if (TT.substr(0, 4) == "armv") { - unsigned SubVer = TT[4]; - if (SubVer > '4' && SubVer <= '9') { - if (SubVer >= '6') - ARMArchVersion = V6; - else if (SubVer == '5') { - ARMArchVersion = V5T; - if (Len >= 7 && TT[5] == 't' && TT[6] == 'e') - ARMArchVersion = V5TE; - } + unsigned Idx = 0; + if (Len >= 5 && TT.substr(0, 4) == "armv") + Idx = 4; + else if (Len >= 6 && TT.substr(0, 6) == "thumb") { + IsThumb = true; + if (Len >= 7 && TT[5] == 'v') + Idx = 6; + } + if (Idx) { + unsigned SubVer = TT[Idx]; + if (SubVer > '4' && SubVer <= '9') { + if (SubVer >= '6') + ARMArchVersion = V6; + else if (SubVer == '5') { + ARMArchVersion = V5T; + if (Len >= Idx+3 && TT[Idx+1] == 't' && TT[Idx+2] == 'e') + ARMArchVersion = V5TE; } } } - if (Len > 5) { + if (Len >= 10) { if (TT.find("-darwin") != std::string::npos) + // arm-darwin TargetType = isDarwin; } else if (TT.empty()) { #if defined(__APPLE__) |