Bug 7581 – Compiler uses wrong instructions to move complex value from ST to xmm registers
Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
All
Creation time
2012-02-25T04:43:00Z
Last change time
2015-06-09T05:11:57Z
Keywords
pull, wrong-code
Assigned to
yebblies
Creator
yebblies
Comments
Comment #0 by yebblies — 2012-02-25T04:43:17Z
Both asserts should pass, but don't because dmd loads the nan onto the fp stack, stores it into memory _as a double_, then loads it into the xmm registers as a double and returns it. The comparison code treats the xmm regs as if they contain floats, giving the wrong result.
void main()
{
cfloat a() { return cfloat.nan; }
assert(a() != 0);
}