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 | |
| 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
| -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;  | 

