From: Simon Atanasyan Date: Tue, 30 Apr 2013 07:47:13 +0000 (+0000) Subject: [Mips] Pass -mips16, -mmicromips, -mdsp and -mdspr2 flags to the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9dbfc6135580357428966ff05427f654dba44cd3;p=clang [Mips] Pass -mips16, -mmicromips, -mdsp and -mdspr2 flags to the assembler. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180775 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Driver/ArgList.h b/include/clang/Driver/ArgList.h index 362cf9c080..9db170c4a2 100644 --- a/include/clang/Driver/ArgList.h +++ b/include/clang/Driver/ArgList.h @@ -248,6 +248,8 @@ namespace driver { /// AddLastArg - Render only the last argument match \p Id0, if present. void AddLastArg(ArgStringList &Output, OptSpecifier Id0) const; + void AddLastArg(ArgStringList &Output, OptSpecifier Id0, + OptSpecifier Id1) const; /// AddAllArgs - Render all arguments matching the given ids. void AddAllArgs(ArgStringList &Output, OptSpecifier Id0, diff --git a/lib/Driver/ArgList.cpp b/lib/Driver/ArgList.cpp index 6fde8360b6..4b8d151d19 100644 --- a/lib/Driver/ArgList.cpp +++ b/lib/Driver/ArgList.cpp @@ -248,6 +248,14 @@ void ArgList::AddLastArg(ArgStringList &Output, OptSpecifier Id) const { } } +void ArgList::AddLastArg(ArgStringList &Output, OptSpecifier Id0, + OptSpecifier Id1) const { + if (Arg *A = getLastArg(Id0, Id1)) { + A->claim(); + A->render(*this, Output); + } +} + void ArgList::AddAllArgs(ArgStringList &Output, OptSpecifier Id0, OptSpecifier Id1, OptSpecifier Id2) const { for (arg_iterator it = filtered_begin(Id0, Id1, Id2), diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index fb5bad4f24..89b1a0c91b 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -5803,6 +5803,12 @@ void gnutools::Assemble::ConstructJob(Compilation &C, const JobAction &JA, else CmdArgs.push_back("-EL"); + Args.AddLastArg(CmdArgs, options::OPT_mips16, options::OPT_mno_mips16); + Args.AddLastArg(CmdArgs, options::OPT_mmicromips, + options::OPT_mno_micromips); + Args.AddLastArg(CmdArgs, options::OPT_mdsp, options::OPT_mno_dsp); + Args.AddLastArg(CmdArgs, options::OPT_mdspr2, options::OPT_mno_dspr2); + Arg *LastPICArg = Args.getLastArg(options::OPT_fPIC, options::OPT_fno_PIC, options::OPT_fpic, options::OPT_fno_pic, options::OPT_fPIE, options::OPT_fno_PIE, diff --git a/test/Driver/mips-as.c b/test/Driver/mips-as.c index a40c3b2663..216b65607e 100644 --- a/test/Driver/mips-as.c +++ b/test/Driver/mips-as.c @@ -71,3 +71,47 @@ // 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" +// +// RUN: %clang -target mips-linux-gnu -mno-mips16 -mips16 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-16 %s +// MIPS-16: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" "-mips16" +// +// RUN: %clang -target mips-linux-gnu -mips16 -mno-mips16 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-N16 %s +// MIPS-N16: as{{(.exe)?}}" +// MIPS-N16-NOT: "-mips16" +// +// RUN: %clang -target mips-linux-gnu -mno-micromips -mmicromips -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-MICRO %s +// MIPS-MICRO: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" "-mmicromips" +// +// RUN: %clang -target mips-linux-gnu -mmicromips -mno-micromips -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-NMICRO %s +// MIPS-NMICRO: as{{(.exe)?}}" +// MIPS-NMICRO-NOT: "-mmicromips" +// +// RUN: %clang -target mips-linux-gnu -mno-dsp -mdsp -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-DSP %s +// MIPS-DSP: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" "-mdsp" +// +// RUN: %clang -target mips-linux-gnu -mdsp -mno-dsp -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-NDSP %s +// MIPS-NDSP: as{{(.exe)?}}" +// MIPS-NDSP-NOT: "-mdsp" +// +// RUN: %clang -target mips-linux-gnu -mno-dspr2 -mdspr2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-DSPR2 %s +// MIPS-DSPR2: as{{(.exe)?}}" "-march" "mips32" "-mabi" "32" "-EB" "-mdspr2" +// +// RUN: %clang -target mips-linux-gnu -mdspr2 -mno-dspr2 -### \ +// RUN: -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=MIPS-NDSPR2 %s +// MIPS-NDSPR2: as{{(.exe)?}}" +// MIPS-NDSPR2-NOT: "-mdspr2"