Then it look like a dmd backend bug. Can you post the generated assembly ?
000000000043050c <_Dmain>: 43050c: push %rbp 43050d: mov %rsp,%rbp 430510: sub $0x40,%rsp 430514: movabs $0x3ff0000000000000,%rax 43051b: 43051e: mov %rax,-0x40(%rbp) 430522: movsd -0x40(%rbp),%xmm0 430527: rex.W movsd %xmm0,-0x30(%rbp) 43052d: xor %edx,%edx 43052f: mov %rax,-0x10(%rbp) 430533: mov %rdx,-0x8(%rbp) 430537: mov %rax,-0x28(%rbp) 43053b: mov %rdx,-0x20(%rbp) 43053f: mov 0x28022(%rip),%rdx 430546: mov 0x28013(%rip),%rsi 43054d: mov -0x28(%rbp),%rdi 430551: callq 430874 <void std.stdio.writefln!(immutable(char)[], ulong).writefln(immutable(char)[], ulong)> 430556: xor %eax,%eax 430558: leaveq 430559: retq