From: Simon Atanasyan Date: Fri, 21 Sep 2012 20:19:32 +0000 (+0000) Subject: Add four new command line options for MIPS CPU selection: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e1c598310d5cd75700cf800cb333b985ce05420;p=clang Add four new command line options for MIPS CPU selection: -mips32, -mips32r2, -mips64, -mips64r2. The patch reviewed by Eric Christopher. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164410 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index b13c45bb3c..8a7d1135cf 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -41,6 +41,8 @@ def m_x86_Features_Group : OptionGroup<"">, Group">, Group; def opencl_Group : OptionGroup<"">; def u_Group : OptionGroup<"">; +def mips_CPUs_Group : OptionGroup<"">, + Group; def pedantic_Group : OptionGroup<"">, Group; @@ -869,6 +871,14 @@ def mdsp : Flag<"-mdsp">, Group; def mno_dsp : Flag<"-mno-dsp">, Group; def mdspr2 : Flag<"-mdspr2">, Group; def mno_dspr2 : Flag<"-mno-dspr2">, Group; +def mips32 : Flag<"-mips32">, Group, + HelpText<"Equivalent to -march=mips32">; +def mips32r2 : Flag<"-mips32r2">, Group, + HelpText<"Equivalent to -march=mips32r2">; +def mips64 : Flag<"-mips64">, Group, + HelpText<"Equivalent to -march=mips64">; +def mips64r2 : Flag<"-mips64r2">, Group, + HelpText<"Equivalent to -march=mips64r2">; def mthumb : Flag<"-mthumb">, Group; def mtune_EQ : Joined<"-mtune=">, Group; def multi__module : Flag<"-multi_module">; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 960ffde228..0866c01657 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -778,6 +778,20 @@ void Clang::AddARMTargetArgs(const ArgList &Args, CmdArgs.push_back("-no-implicit-float"); } +// Translate MIPS CPU name alias option to CPU name. +static StringRef getMipsCPUFromAlias(const Arg &A) { + if (A.getOption().matches(options::OPT_mips32)) + return "mips32"; + if (A.getOption().matches(options::OPT_mips32r2)) + return "mips32r2"; + if (A.getOption().matches(options::OPT_mips64)) + return "mips64"; + if (A.getOption().matches(options::OPT_mips64r2)) + return "mips64r2"; + llvm_unreachable("Unexpected option"); + return ""; +} + // Get CPU and ABI names. They are not independent // so we have to calculate them together. static void getMipsCPUAndABI(const ArgList &Args, @@ -788,8 +802,13 @@ static void getMipsCPUAndABI(const ArgList &Args, const char *DefMips64CPU = "mips64"; if (Arg *A = Args.getLastArg(options::OPT_march_EQ, - options::OPT_mcpu_EQ)) - CPUName = A->getValue(Args); + options::OPT_mcpu_EQ, + options::OPT_mips_CPUs_Group)) { + if (A->getOption().matches(options::OPT_mips_CPUs_Group)) + CPUName = getMipsCPUFromAlias(*A); + else + CPUName = A->getValue(Args); + } if (Arg *A = Args.getLastArg(options::OPT_mabi_EQ)) ABIName = A->getValue(Args); diff --git a/test/Driver/freebsd-mips-as.c b/test/Driver/freebsd-mips-as.c index 4131caba7e..54ff187515 100644 --- a/test/Driver/freebsd-mips-as.c +++ b/test/Driver/freebsd-mips-as.c @@ -59,3 +59,23 @@ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-32R2 %s // MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s +// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s +// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s +// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" +// +// RUN: %clang -target mips-unknown-freebsd -mips64r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s +// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB" diff --git a/test/Driver/mips-as.c b/test/Driver/mips-as.c index 95b93b791c..fbaf62fdad 100644 --- a/test/Driver/mips-as.c +++ b/test/Driver/mips-as.c @@ -43,3 +43,23 @@ // RUN: -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=MIPS-32R2 %s // MIPS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips32 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32 %s +// MIPS-ALIAS-32: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips32r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-32R2 %s +// MIPS-ALIAS-32R2: as{{(.exe)?}}" "-march" "mips32r2" "-mabi" "32" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips64 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64 %s +// MIPS-ALIAS-64: as{{(.exe)?}}" "-march" "mips64" "-mabi" "64" "-EB" +// +// RUN: %clang -target mips-linux-gnu -mips64r2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-ALIAS-64R2 %s +// MIPS-ALIAS-64R2: as{{(.exe)?}}" "-march" "mips64r2" "-mabi" "64" "-EB"