http://d.puremagic.com/issues/show_bug.cgi?id=6877
--- Comment #1 from d...@dawgfoto.de 2011-11-01 19:28:58 PDT --- struct Matrix { void setSinCos(float sinV) { // use parameter, so it becomes a register veriable a = sinV * sinV; // refer to value of parameter version (none) val = -sinV; else // which 'eleq' optimizes to *cast(uint*)&val = (*cast(uint*)&sinV) ^ 0x80000000; } float a, val; } extern(C) int printf(in char* format, ...); void main() { Matrix m; printf("%g\n", m.val); // indirect to prevent CTFE auto dg = &m.setSinCos; dg(2.0); printf("%g\n", m.val); } ----------------------------------------------------- sinV is a register variable residing in xmm2. The load for the left xor operand is done with mov %edx, %eax which should be movd %xmm2, %eax instead, same modrm though. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------