On Monday, 22 August 2016 at 05:02:41 UTC, jkpl wrote:
On Monday, 22 August 2016 at 04:52:40 UTC, Cauterite wrote:
[...]

That's a 32 bit codegen issue then because DMD64 's disasm shows that SSE regs are used:

====
void foo()
{
    union test { int i; float f; }
    test t = { i : 0x7fb00000};
    float t2 = t.f;
    test t3 = { f : t2 };
}
===

yields to

===
00000000004586D0h  push rbp
00000000004586D1h  mov rbp, rsp
00000000004586D4h  sub rsp, 10h
00000000004586D8h  mov dword ptr [rbp-10h], 7FB00000h
00000000004586DFh  movss xmm0, dword ptr [rbp-10h]
00000000004586E4h  movss dword ptr [rbp-0Ch], xmm0
00000000004586E9h  movss xmm1, dword ptr [rbp-0Ch]
00000000004586EEh  movss dword ptr [rbp-08h], xmm1
00000000004586F3h  leave
00000000004586F4h  ret
===

x86 give 7FF and x64 gives 7FB in win.

Reply via email to