diff options
author | Chris Lattner <sabre@nondot.org> | 2005-08-02 00:11:53 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-08-02 00:11:53 +0000 |
commit | 8dcd5483bce94be0ac02dd5c8b749a9a2458ee2b (patch) | |
tree | 0012b26e481732796d3d941fd088530ebb2bff75 /lib/Support/FileUtilities.cpp | |
parent | e96e37683375c8a161975e1d263a6c972a6a3d29 (diff) | |
download | external_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.cpp | 24 |
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; |