narrowed down the problem area

Sergey Gromov snake.scaly at gmail.com
Sat Feb 16 00:23:05 PST 2008


downs <default_357-line at yahoo.de> wrote:
> For some reason, the bad case, although inlined, stores its values back into memory. The fast case keeps working with them.
> 
> Here's the disassembly for ray_sphere for both cases:
> 
> slow (opSub)
> 
> http://paste.dprogramming.com/dpcds3p3
> 
> fast
> 
> http://paste.dprogramming.com/dpd6pi8n
> 
> So it comes down to a GDC FP "bug". I think changing to 4.2 or 4.3 might help. Does anybody have an up-to-date version of the 4.2.x patch?

I'm trying to investigate this issue, too.  I'm comparing the C++ code 
generated by Visual C Express 2005, and GDC 0.24 based on GCC 3.4.5 and 
DMD 1.020.  Here's the commented out comparison of unitise() function:

http://paste.dprogramming.com/dpl9p4pt

As you can see, the code is very close.  But the static opCall() which 
initializes the by-value return struct is not inlined, and therefore not 
optimized out.  So there is an additional call and extra copying of 
already calculated values.  If not that, the code would be nearly 
identical.

-- 
SnakE



More information about the Digitalmars-d mailing list