Add notes on bug involving casting ulong -> double, thanks to Nate Begeman.
authorMisha Brukman <brukman+llvm@gmail.com>
Wed, 28 Jul 2004 19:16:10 +0000 (19:16 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Wed, 28 Jul 2004 19:16:10 +0000 (19:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15307 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PowerPC/README.txt

index e11449efdf95ad068f514cd09f636ab348aa7815..d881fc9a2418482958d4e7262c4fb0602e225ba2 100644 (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