[llvm-commits] CVS: llvm/lib/Support/FileUtilities.cpp

Chris Lattner sabre at nondot.org
Mon Aug 1 18:17:01 PDT 2005


On Mon, 1 Aug 2005, Reid Spencer wrote:

> While I don't know anything about "D", the "d" control character is used for 
> signed decimal integers the same as %i. If you pass a float in there to 
> sprintf and friends, you're going to get garbage at best and a crash at 
> worst.

Completely unrelated.  This just allows fpcmp to parse "1.0D3" as "1.0e3", 
i.e. "1000".

-Chris

> Chris Lattner wrote:
>> Changes in directory llvm/lib/Support:
>> 
>> FileUtilities.cpp updated: 1.45 -> 1.46
>> ---
>> Log message:
>> 
>> 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.
>> 
>> 
>> 
>> ---
>> Diffs of the changes:  (+21 -3)
>> 
>>  FileUtilities.cpp |   24 +++++++++++++++++++++---
>>  1 files changed, 21 insertions(+), 3 deletions(-)
>> 
>> 
>> Index: llvm/lib/Support/FileUtilities.cpp
>> diff -u llvm/lib/Support/FileUtilities.cpp:1.45 
>> llvm/lib/Support/FileUtilities.cpp:1.46
>> --- llvm/lib/Support/FileUtilities.cpp:1.45	Thu Apr 21 17:52:05 2005
>> +++ llvm/lib/Support/FileUtilities.cpp	Mon Aug  1 19:11:53 2005
>> @@ -26,6 +26,8 @@
>>    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 @@
>>    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;
>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>> 
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-commits mailing list