mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-23 04:16:42 +00:00
Added getArchNameForAssembler method to the Triple class for which returns OS and Vendor independent target assembler arch.
llvm-svn: 89122
This commit is contained in:
parent
fe3a0fccb9
commit
1452b67541
@ -239,6 +239,10 @@ public:
|
||||
/// environment components with a single string.
|
||||
void setOSAndEnvironmentName(StringRef Str);
|
||||
|
||||
/// getArchNameForAssembler - Get an architecture name that is understood by the
|
||||
/// target assembler.
|
||||
const char *getArchNameForAssembler();
|
||||
|
||||
/// @}
|
||||
/// @name Static helpers for IDs.
|
||||
/// @{
|
||||
|
@ -179,6 +179,33 @@ Triple::ArchType Triple::getArchTypeForDarwinArchName(StringRef Str) {
|
||||
return Triple::UnknownArch;
|
||||
}
|
||||
|
||||
// Returns architecture name that is unsderstood by the target assembler.
|
||||
const char *Triple::getArchNameForAssembler() {
|
||||
if (getOS() != Triple::Darwin && getVendor() != Triple::Apple)
|
||||
return NULL;
|
||||
|
||||
StringRef Str = getArchName();
|
||||
if (Str == "i386")
|
||||
return "i386";
|
||||
if (Str == "x86_64")
|
||||
return "x86_64";
|
||||
if (Str == "powerpc")
|
||||
return "ppc";
|
||||
if (Str == "powerpc64")
|
||||
return "ppc64";
|
||||
if (Str == "arm")
|
||||
return "arm";
|
||||
if (Str == "armv4t" || Str == "thumbv4t")
|
||||
return "armv4t";
|
||||
if (Str == "armv5" || Str == "armv5e" || Str == "thumbv5" || Str == "thumbv5e")
|
||||
return "armv5";
|
||||
if (Str == "armv6" || Str == "thumbv6")
|
||||
return "armv6";
|
||||
if (Str == "armv7" || Str == "thumbv7")
|
||||
return "armv7";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
void Triple::Parse() const {
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "llvm/ModuleProvider.h"
|
||||
#include "llvm/PassManager.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/ADT/Triple.h"
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/Analysis/LoopPass.h"
|
||||
#include "llvm/Analysis/Verifier.h"
|
||||
@ -242,51 +243,16 @@ bool LTOCodeGenerator::assemble(const std::string& asmPath,
|
||||
|
||||
// build argument list
|
||||
std::vector<const char*> args;
|
||||
std::string targetTriple = _linker.getModule()->getTargetTriple();
|
||||
llvm::Triple targetTriple(_linker.getModule()->getTargetTriple());
|
||||
const char *arch = targetTriple.getArchNameForAssembler();
|
||||
|
||||
args.push_back(tool.c_str());
|
||||
if ( targetTriple.find("darwin") != std::string::npos ) {
|
||||
|
||||
if (targetTriple.getOS() == Triple::Darwin) {
|
||||
// darwin specific command line options
|
||||
if (strncmp(targetTriple.c_str(), "i386-apple-", 11) == 0) {
|
||||
if (arch != NULL) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("i386");
|
||||
}
|
||||
else if (strncmp(targetTriple.c_str(), "x86_64-apple-", 13) == 0) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("x86_64");
|
||||
}
|
||||
else if (strncmp(targetTriple.c_str(), "powerpc-apple-", 14) == 0) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("ppc");
|
||||
}
|
||||
else if (strncmp(targetTriple.c_str(), "powerpc64-apple-", 16) == 0) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("ppc64");
|
||||
}
|
||||
else if (strncmp(targetTriple.c_str(), "arm-apple-", 10) == 0) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("arm");
|
||||
}
|
||||
else if ((strncmp(targetTriple.c_str(), "armv4t-apple-", 13) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "thumbv4t-apple-", 15) == 0)) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("armv4t");
|
||||
}
|
||||
else if ((strncmp(targetTriple.c_str(), "armv5-apple-", 12) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "armv5e-apple-", 13) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "thumbv5-apple-", 14) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "thumbv5e-apple-", 15) == 0)) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("armv5");
|
||||
}
|
||||
else if ((strncmp(targetTriple.c_str(), "armv6-apple-", 12) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "thumbv6-apple-", 14) == 0)) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("armv6");
|
||||
}
|
||||
else if ((strncmp(targetTriple.c_str(), "armv7-apple-", 12) == 0) ||
|
||||
(strncmp(targetTriple.c_str(), "thumbv7-apple-", 14) == 0)) {
|
||||
args.push_back("-arch");
|
||||
args.push_back("armv7");
|
||||
args.push_back(arch);
|
||||
}
|
||||
// add -static to assembler command line when code model requires
|
||||
if ( (_assemblerPath != NULL) && (_codeModel == LTO_CODEGEN_PIC_MODEL_STATIC) )
|
||||
|
Loading…
x
Reference in New Issue
Block a user