diff options
author | Simon Atanasyan <satanasyan@mips.com> | 2012-07-05 15:32:46 +0000 |
---|---|---|
committer | Simon Atanasyan <satanasyan@mips.com> | 2012-07-05 15:32:46 +0000 |
commit | 9f444d5a1b7c3ea6c9ae4f2b0006e8882a831050 (patch) | |
tree | 5071c7b907753d018f398a00b17f4d2cb67d5b56 /clang/lib/Basic/Targets.cpp | |
parent | 25b567dd0d2219d2b2d5c1f8838c098b00ca9c80 (diff) | |
download | bcm5719-llvm-9f444d5a1b7c3ea6c9ae4f2b0006e8882a831050.tar.gz bcm5719-llvm-9f444d5a1b7c3ea6c9ae4f2b0006e8882a831050.zip |
MIPS: Replace the pair of boolean flags by enumeration to hold selected float ABI.
llvm-svn: 159752
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r-- | clang/lib/Basic/Targets.cpp | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 5d29417cb41..713396c3abc 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/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<std::string> &Features) { - SoftFloat = false; - SingleFloat = false; + FloatABI = HardFloat; for (std::vector<std::string>::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<std::string>::iterator it = + std::find(Features.begin(), Features.end(), "+soft-float"); + if (it != Features.end()) + Features.erase(it); } }; |