summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@mips.com>2011-11-30 19:31:38 +0000
committerAkira Hatanaka <ahatanaka@mips.com>2011-11-30 19:31:38 +0000
commit5e9dde37829936c26fcd61e347f27091c1dde66e (patch)
tree2eab5127c71cedd2ec0158b943d3d4ba06647621
parent738da252ab9211ca0791b8f5f4fb2c2a3d62f301 (diff)
downloadbcm5719-llvm-5e9dde37829936c26fcd61e347f27091c1dde66e.tar.gz
bcm5719-llvm-5e9dde37829936c26fcd61e347f27091c1dde66e.zip
Get the -march argument based on the target MIPS architecture or cpu and pass
it to GNU assembler. In addition, change function getMipsArchFromCPU() so that it can be reused in ConstructJob(). Patch by Simon Atanasyan. llvm-svn: 145509
-rw-r--r--clang/lib/Driver/Tools.cpp39
1 files changed, 32 insertions, 7 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index e17bcb79f24..ab8cf27aa61 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -706,16 +706,23 @@ static const char* getMipsArchFromCPU(StringRef CPUName) {
return "mips64";
}
+// Check that ArchName is a known Mips architecture name.
+static bool checkMipsArchName(StringRef ArchName) {
+ return ArchName == "mips" ||
+ ArchName == "mipsel" ||
+ ArchName == "mips64" ||
+ ArchName == "mips64el";
+}
+
// Get default target cpu.
-static const char* getMipsCPUFromArch(StringRef ArchName, const Driver &D) {
+static const char* getMipsCPUFromArch(StringRef ArchName) {
if (ArchName == "mips" || ArchName == "mipsel")
return "mips32";
- else if (ArchName == "mips64" || ArchName == "mips64el")
- return "mips64";
- else
- D.Diag(diag::err_drv_invalid_arch_name) << ArchName;
- return 0;
+ assert((ArchName == "mips64" || ArchName == "mips64el") &&
+ "Unexpected arch name.");
+
+ return "mips64";
}
// Get default ABI.
@@ -742,7 +749,10 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
}
else {
ArchName = Args.MakeArgString(getToolChain().getArchName());
- CPUName = getMipsCPUFromArch(ArchName, D);
+ if (!checkMipsArchName(ArchName))
+ D.Diag(diag::err_drv_invalid_arch_name) << ArchName;
+ else
+ CPUName = getMipsCPUFromArch(ArchName);
}
CmdArgs.push_back("-target-cpu");
@@ -4282,6 +4292,21 @@ void linuxtools::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
StringRef MArch = getToolChain().getArchName();
if (MArch == "armv7" || MArch == "armv7a" || MArch == "armv7-a")
CmdArgs.push_back("-mfpu=neon");
+ } else if (getToolChain().getArch() == llvm::Triple::mips ||
+ getToolChain().getArch() == llvm::Triple::mipsel ||
+ getToolChain().getArch() == llvm::Triple::mips64 ||
+ getToolChain().getArch() == llvm::Triple::mips64el) {
+ // Get Mips CPU name and pass it to 'as'.
+ const char *CPUName;
+ if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ))
+ CPUName = A->getValue(Args);
+ else
+ CPUName = getMipsCPUFromArch(getToolChain().getArchName());
+
+ if (CPUName) {
+ CmdArgs.push_back("-march");
+ CmdArgs.push_back(CPUName);
+ }
}
Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
OpenPOWER on IntegriCloud