aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Support/FileUtilities.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-08-02 00:11:53 +0000
committerChris Lattner <sabre@nondot.org>2005-08-02 00:11:53 +0000
commit8dcd5483bce94be0ac02dd5c8b749a9a2458ee2b (patch)
tree0012b26e481732796d3d941fd088530ebb2bff75 /lib/Support/FileUtilities.cpp
parente96e37683375c8a161975e1d263a6c972a6a3d29 (diff)
downloadexternal_llvm-8dcd5483bce94be0ac02dd5c8b749a9a2458ee2b.zip
external_llvm-8dcd5483bce94be0ac02dd5c8b749a9a2458ee2b.tar.gz
external_llvm-8dcd5483bce94be0ac02dd5c8b749a9a2458ee2b.tar.bz2
200.sixtrack prints FP numbers with a very strange notation that uses D
instead of E for exponentials (e.g. 1.234D-43). Add support for this notation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22574 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/FileUtilities.cpp')
-rw-r--r--lib/Support/FileUtilities.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/lib/Support/FileUtilities.cpp b/lib/Support/FileUtilities.cpp
index dd296f3..ae851c7 100644
--- a/lib/Support/FileUtilities.cpp
+++ b/lib/Support/FileUtilities.cpp
@@ -26,6 +26,8 @@ static bool isNumberChar(char C) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case '.': case '+': case '-':
+ case 'D': // Strange exponential notation.
+ case 'd': // Strange exponential notation.
case 'e':
case 'E': return true;
default: return false;
@@ -56,10 +58,26 @@ static bool CompareNumbers(char *&F1P, char *&F2P, char *F1End, char *F2End,
while (isspace(*F2P) && F2P != F2End)
++F2P;
- // If we stop on numbers, compare their difference.
+ // If we stop on numbers, compare their difference. Note that some ugliness
+ // is built into this to permit support for numbers that use "D" or "d" as
+ // their exponential marker, e.g. "1.234D45". This occurs in 200.sixtrack in
+ // spec2k.
if (isNumberChar(*F1P) && isNumberChar(*F2P)) {
- V1 = strtod(F1P, &F1NumEnd);
- V2 = strtod(F2P, &F2NumEnd);
+ bool isDNotation;
+ do {
+ isDNotation = false;
+ V1 = strtod(F1P, &F1NumEnd);
+ V2 = strtod(F2P, &F2NumEnd);
+
+ if (*F1NumEnd == 'D' || *F1NumEnd == 'd') {
+ *F1NumEnd = 'e'; // Strange exponential notation!
+ isDNotation = true;
+ }
+ if (*F2NumEnd == 'D' || *F2NumEnd == 'd') {
+ *F2NumEnd = 'e'; // Strange exponential notation!
+ isDNotation = true;
+ }
+ } while (isDNotation);
} else {
// Otherwise, the diff failed.
F1NumEnd = F1P;