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 | fca31aee4fd5c8bc9aa2df36dbf51b1e206a455d (patch) | |
tree | 548f01b4dfd153de22126569738a5ef23bd7e6ff /llvm/lib/Support/FileUtilities.cpp | |
parent | b30c947ceb5dc216eaf5143f2fc2bea99c8b178c (diff) | |
download | bcm5719-llvm-fca31aee4fd5c8bc9aa2df36dbf51b1e206a455d.tar.gz bcm5719-llvm-fca31aee4fd5c8bc9aa2df36dbf51b1e206a455d.zip |
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.
llvm-svn: 22574
Diffstat (limited to 'llvm/lib/Support/FileUtilities.cpp')
-rw-r--r-- | llvm/lib/Support/FileUtilities.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/llvm/lib/Support/FileUtilities.cpp b/llvm/lib/Support/FileUtilities.cpp index dd296f30a22..ae851c7f549 100644 --- a/llvm/lib/Support/FileUtilities.cpp +++ b/llvm/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; |