summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2013-06-24 09:58:05 +0000
committerMichael Gottesman <mgottesman@apple.com>2013-06-24 09:58:05 +0000
commit40e8a187f6ddc62ce2a0f787733a1eba80ef0949 (patch)
tree0f0d82bb3c7c313c1af260cb779e64cf6bc588ed /llvm/lib/Support
parentc4facdf390745c92ac9eb79f1d247d6b41db54eb (diff)
downloadbcm5719-llvm-40e8a187f6ddc62ce2a0f787733a1eba80ef0949.tar.gz
bcm5719-llvm-40e8a187f6ddc62ce2a0f787733a1eba80ef0949.zip
[APFloat] Added support for parsing float strings which contain {inf,-inf,NaN,-NaN}.
llvm-svn: 184713
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r--llvm/lib/Support/APFloat.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/lib/Support/APFloat.cpp b/llvm/lib/Support/APFloat.cpp
index ec50064f42f..4179231f135 100644
--- a/llvm/lib/Support/APFloat.cpp
+++ b/llvm/lib/Support/APFloat.cpp
@@ -2575,11 +2575,40 @@ APFloat::convertFromDecimalString(StringRef str, roundingMode rounding_mode)
return fs;
}
+bool
+APFloat::convertFromStringSpecials(StringRef str) {
+ if (str.equals("inf") || str.equals("INFINITY")) {
+ makeInf(false);
+ return true;
+ }
+
+ if (str.equals("-inf") || str.equals("-INFINITY")) {
+ makeInf(true);
+ return true;
+ }
+
+ if (str.equals("nan") || str.equals("NaN")) {
+ makeNaN(false, false);
+ return true;
+ }
+
+ if (str.equals("-nan") || str.equals("-NaN")) {
+ makeNaN(false, true);
+ return true;
+ }
+
+ return false;
+}
+
APFloat::opStatus
APFloat::convertFromString(StringRef str, roundingMode rounding_mode)
{
assert(!str.empty() && "Invalid string length");
+ // Handle special cases.
+ if (convertFromStringSpecials(str))
+ return opOK;
+
/* Handle a leading minus sign. */
StringRef::iterator p = str.begin();
size_t slen = str.size();
OpenPOWER on IntegriCloud