Bug 5386 – Initialising out float parameter causes FPU exception

Status
RESOLVED
Resolution
WORKSFORME
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-12-28T04:50:00Z
Last change time
2013-11-02T18:18:53Z
Keywords
performance
Assigned to
nobody
Creator
pvm_2004

Comments

Comment #0 by pvm_2004 — 2010-12-28T04:50:04Z
The following short code snippet causes slow code caused by FPU exception: float f; func(f); void func(out float ff) { ff = 1; } The following code is produced for the function: func LABEL NEAR 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 ret 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.
Comment #1 by mk — 2013-11-02T18:18:53Z
I see no such behavior, float is initialized with 7FC0.