Add notes on bug involving casting ulong -> double, thanks to Nate Begeman.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15307 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Misha Brukman 2004-07-28 19:16:10 +00:00
parent a0af38c46a
commit 8b88d906a2

View File

@ -6,6 +6,23 @@ Current bugs:
* large fixed-size allocas not correct, although should
be closer to working. Added code in PPCRegisterInfo.cpp
to do >16bit subtractions to the stack pointer.
* ulong to double. ahhh, here's the problem:
floatdidf assumes signed longs. so if the high but of a ulong
just happens to be set, you get the wrong sign. The fix for this
is to call cmpdi2 to compare against zero, if so shift right by one,
convert to fp, and multiply by (add to itself). the sequence would
look like:
{r3:r4} holds ulong a;
li r5, 0
li r6, 0 (set r5:r6 to ulong 0)
call cmpdi2 ==> sets r3 <, =, > 0
if r3 > 0
call floatdidf as usual
else
shift right ulong a, 1 (we could use emitShift)
call floatdidf
fadd f1, f1, f1 (fp left shift by 1)
* linking llvmg++ .s files with gcc instead of g++
Codegen improvements needed:
* no alias analysis causes us to generate slow code for Shootout/matrix