From 607776140b743fd590bfd75cf04add32d17d738a Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Sun, 14 Apr 2013 14:07:51 +0000 Subject: [PATCH] [Mips] Support -mmicromips / -mno-micromips command line options. llvm-svn: 179489 --- clang/include/clang/Driver/Options.td | 2 ++ clang/lib/Basic/Targets.cpp | 11 ++++++++++- clang/lib/Driver/Tools.cpp | 3 +++ clang/test/Driver/mips-features.c | 12 ++++++++++++ clang/test/Preprocessor/init.c | 10 ++++++++++ 5 files changed, 37 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 881353e..8e23e26 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -957,6 +957,8 @@ def mprfchw : Flag<["-"], "mprfchw">, Group; def mrdseed : Flag<["-"], "mrdseed">, Group; def mips16 : Flag<["-"], "mips16">, Group; def mno_mips16 : Flag<["-"], "mno-mips16">, Group; +def mmicromips : Flag<["-"], "mmicromips">, Group; +def mno_micromips : Flag<["-"], "mno-micromips">, Group; def mxgot : Flag<["-"], "mxgot">, Group; def mno_xgot : Flag<["-"], "mno-xgot">, Group; def mdsp : Flag<["-"], "mdsp">, Group; diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 9689193..95334e0 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -4405,6 +4405,7 @@ class MipsTargetInfoBase : public TargetInfo { static const Builtin::Info BuiltinInfo[]; std::string CPU; bool IsMips16; + bool IsMicromips; bool IsSingleFloat; enum MipsFloatABI { HardFloat, SoftFloat @@ -4423,6 +4424,7 @@ public: : TargetInfo(triple), CPU(CPUStr), IsMips16(false), + IsMicromips(false), IsSingleFloat(false), FloatABI(HardFloat), DspRev(NoDSP), @@ -4461,6 +4463,9 @@ public: if (IsMips16) Builder.defineMacro("__mips16", Twine(1)); + if (IsMicromips) + Builder.defineMacro("__mips_micromips", Twine(1)); + switch (DspRev) { default: break; @@ -4550,7 +4555,8 @@ public: Name == "o32" || Name == "n32" || Name == "n64" || Name == "eabi" || Name == "mips32" || Name == "mips32r2" || Name == "mips64" || Name == "mips64r2" || - Name == "mips16" || Name == "dsp" || Name == "dspr2") { + Name == "mips16" || Name == "micromips" || + Name == "dsp" || Name == "dspr2") { Features[Name] = Enabled; return true; } else if (Name == "32") { @@ -4565,6 +4571,7 @@ public: virtual void HandleTargetFeatures(std::vector &Features) { IsMips16 = false; + IsMicromips = false; IsSingleFloat = false; FloatABI = HardFloat; DspRev = NoDSP; @@ -4577,6 +4584,8 @@ public: FloatABI = SoftFloat; else if (*it == "+mips16") IsMips16 = true; + else if (*it == "+micromips") + IsMicromips = true; else if (*it == "+dsp") DspRev = std::max(DspRev, DSP1); else if (*it == "+dspr2") diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index e0fc74e..586a7ed 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -991,6 +991,9 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args, options::OPT_mips16, options::OPT_mno_mips16, "mips16"); AddTargetFeature(Args, CmdArgs, + options::OPT_mmicromips, options::OPT_mno_micromips, + "micromips"); + AddTargetFeature(Args, CmdArgs, options::OPT_mdsp, options::OPT_mno_dsp, "dsp"); AddTargetFeature(Args, CmdArgs, diff --git a/clang/test/Driver/mips-features.c b/clang/test/Driver/mips-features.c index 3bebffc..3f4730b 100644 --- a/clang/test/Driver/mips-features.c +++ b/clang/test/Driver/mips-features.c @@ -14,6 +14,18 @@ // RUN: | FileCheck --check-prefix=CHECK-NOMIPS16 %s // CHECK-NOMIPS16: "-target-feature" "-mips16" // +// -mmicromips +// RUN: %clang -target mips-linux-gnu -### -c %s \ +// RUN: -mno-micromips -mmicromips 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-MICROMIPS %s +// CHECK-MICROMIPS: "-target-feature" "+micromips" +// +// -mno-micromips +// RUN: %clang -target mips-linux-gnu -### -c %s \ +// RUN: -mmicromips -mno-micromips 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-NOMICROMIPS %s +// CHECK-NOMICROMIPS: "-target-feature" "-micromips" +// // -mdsp // RUN: %clang -target mips-linux-gnu -### -c %s \ // RUN: -mno-dsp -mdsp 2>&1 \ diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index 8ab1439..c1519a8 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -1168,6 +1168,16 @@ // RUN: | FileCheck -check-prefix NOMIPS16 %s // NOMIPS16-NOT:#define __mips16 1 // +// RUN: %clang_cc1 -target-feature +micromips \ +// RUN: -E -dM -triple=mips-none-none < /dev/null \ +// RUN: | FileCheck -check-prefix MICROMIPS %s +// MICROMIPS:#define __mips_micromips 1 +// +// RUN: %clang_cc1 -target-feature -micromips \ +// RUN: -E -dM -triple=mips-none-none < /dev/null \ +// RUN: | FileCheck -check-prefix NOMICROMIPS %s +// NOMICROMIPS-NOT:#define __mips_micromips 1 +// // RUN: %clang_cc1 -target-feature +dsp \ // RUN: -E -dM -triple=mips-none-none < /dev/null \ // RUN: | FileCheck -check-prefix MIPS-DSP %s -- 2.7.4