Summary: Initialising out float parameter causes FPU exception
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Peter Moore <> 2010-12-28 04:50:04 PST 
The following short code snippet causes slow code caused by FPU exception:

float f;

void func(out float ff) {
ff = 1;

The following code is produced for the function:

push    ebp
mov     ebp, esp
push    eax       
fld     dword ptr [_nan]
fstp    dword ptr [eax]
fld     dword ptr [_one]
fstp    dword ptr [eax]
mov     esp, ebp
pop     ebp

It appears that in DMD2 a float NaN is 0x7FE00000 (in dword format) but when it
initialises a float 'out' parameter it
initialises it with 0x7FA00000. This causes an FPU trap which unnecessarily
eats up around 250 ticks.

I had a quick look at doubles too. This uses 7FF4000000000000 to initialise a
double out parameter which also traps the FPU.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to