mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 15:40:46 +00:00
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:
parent
a0af38c46a
commit
8b88d906a2
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user