Make necessary changes in AddMIPSTargetArgs for targeting Mips64. Enable use of

-mcpu.
 

llvm-svn: 140562
This commit is contained in:
Akira Hatanaka
2011-09-26 21:07:52 +00:00
parent 58c80f886c
commit 37fd9e97d1

View File

@@ -752,33 +752,69 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
}
}
// Get default architecture.
static const char* getMipsArchFromCPU(StringRef CPUName) {
if (CPUName == "mips32r1" || CPUName == "4ke")
return "mips";
assert((CPUName == "mips64r1" || CPUName == "mips64r2") &&
"Unexpected cpu name.");
return "mips64";
}
// Get default target cpu.
static const char* getMipsCPUFromArch(StringRef ArchName, const Driver &D) {
if (ArchName == "mips" || ArchName == "mipsel")
return "mips32r1";
else if (ArchName == "mips64" || ArchName == "mips64el")
return "mips64r1";
else
D.Diag(diag::err_drv_invalid_arch_name) << ArchName;
return 0;
}
// Get default ABI.
static const char* getMipsABIFromArch(StringRef ArchName) {
if (ArchName == "mips" || ArchName == "mipsel")
return "o32";
assert((ArchName == "mips64" || ArchName == "mips64el") &&
"Unexpected arch name.");
return "n64";
}
void Clang::AddMIPSTargetArgs(const ArgList &Args,
ArgStringList &CmdArgs) const {
const Driver &D = getToolChain().getDriver();
StringRef ArchName;
const char *CPUName;
// Set target cpu and architecture.
if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) {
CPUName = A->getValue(Args);
ArchName = getMipsArchFromCPU(CPUName);
}
else {
ArchName = Args.MakeArgString(getToolChain().getArchName());
CPUName = getMipsCPUFromArch(ArchName, D);
}
CmdArgs.push_back("-target-cpu");
CmdArgs.push_back(CPUName);
// Select the ABI to use.
const char *ABIName = 0;
if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) {
if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ))
ABIName = A->getValue(Args);
} else {
ABIName = "o32";
}
else
ABIName = getMipsABIFromArch(ArchName);
CmdArgs.push_back("-target-abi");
CmdArgs.push_back(ABIName);
if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {
StringRef MArch = A->getValue(Args);
CmdArgs.push_back("-target-cpu");
if ((MArch == "r2000") || (MArch == "r3000"))
CmdArgs.push_back("mips1");
else if (MArch == "r6000")
CmdArgs.push_back("mips2");
else
CmdArgs.push_back(Args.MakeArgString(MArch));
}
// Select the float ABI as determined by -msoft-float, -mhard-float, and
StringRef FloatABI;
if (Arg *A = Args.getLastArg(options::OPT_msoft_float,