From bbd9916bd91eafb97cc73c2def158b6e5c124d1b Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Thu, 5 Jul 2012 15:32:46 +0000 Subject: [PATCH] MIPS: Replace the pair of boolean flags by enumeration to hold selected float ABI. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159752 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 50 ++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 5d29417cb4..713396c3ab 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -3599,8 +3599,9 @@ namespace { class MipsTargetInfoBase : public TargetInfo { static const Builtin::Info BuiltinInfo[]; std::string CPU; - bool SoftFloat; - bool SingleFloat; + enum MipsFloatABI { + HardFloat, SingleFloat, SoftFloat + } FloatABI; protected: std::string ABI; @@ -3611,7 +3612,7 @@ public: const std::string& CPUStr) : TargetInfo(triple), CPU(CPUStr), - SoftFloat(false), SingleFloat(false), + FloatABI(HardFloat), ABI(ABIStr) {} @@ -3628,14 +3629,18 @@ public: virtual void getArchDefines(const LangOptions &Opts, MacroBuilder &Builder) const { - if (SoftFloat && SingleFloat) - llvm_unreachable("Invalid float ABI for Mips."); - else if (SoftFloat) - Builder.defineMacro("__mips_soft_float", Twine(1)); - else { + switch (FloatABI) { + default: + case HardFloat: + Builder.defineMacro("__mips_hard_float", Twine(1)); + break; + case SingleFloat: Builder.defineMacro("__mips_hard_float", Twine(1)); - if (SingleFloat) - Builder.defineMacro("__mips_single_float", Twine(1)); + Builder.defineMacro("__mips_single_float", Twine(1)); + break; + case SoftFloat: + Builder.defineMacro("__mips_soft_float", Twine(1)); + break; } Builder.defineMacro("_MIPS_SZPTR", Twine(getPointerWidth(0))); @@ -3717,24 +3722,21 @@ public: } virtual void HandleTargetFeatures(std::vector &Features) { - SoftFloat = false; - SingleFloat = false; + FloatABI = HardFloat; for (std::vector::iterator it = Features.begin(), ie = Features.end(); it != ie; ++it) { - if (*it == "+single-float") { - SingleFloat = true; - break; - } - - if (*it == "+soft-float") { - SoftFloat = true; - // This option is front-end specific. - // Do not need to pass it to the backend. - Features.erase(it); - break; - } + if (*it == "+single-float") + FloatABI = SingleFloat; + else if (*it == "+soft-float") + FloatABI = SoftFloat; } + + // Remove front-end specific option. + std::vector::iterator it = + std::find(Features.begin(), Features.end(), "+soft-float"); + if (it != Features.end()) + Features.erase(it); } }; -- 2.40.0