# HG changeset patch # User Kelly Wilson # Date 1234764593 25200 # Node ID d7dead5f20f020957bfb477a3281fef66fb1f276 # Parent fa21062b69481750fdb2272b9bf7a967c202013e# Parent aa2e3a6c3410b1fa10d66ccafff0c13a9e414e9d Merging fvbommels fix for asm8.d x86-64 code diff -r fa21062b6948 -r d7dead5f20f0 tests/mini/asm8.d --- a/tests/mini/asm8.d Sun Feb 15 22:56:10 2009 -0700 +++ b/tests/mini/asm8.d Sun Feb 15 23:09:53 2009 -0700 @@ -118,22 +118,29 @@ } else version (X86_64) { - asm - { - movss XMM1, [two_f]; - movss XMM0, [one_f]; - movd ECX, XMM1; - movd EAX, XMM0; - - // invalid operand size :( - //shl RCX, 32; - //or RAX, RCX; - - pushq RAX; - mov [RSP + 4], EAX; - popq RAX; - - movd XMM0, RAX; + version(all) { + asm + { + movss XMM0, [one_f]; + movss XMM1, [two_f]; + } + } else { + // Code for when LDC becomes ABI-compatible with GCC + // regarding cfloat returns. + asm { + movd EAX, [one_f]; + movd ECX, [two_f]; + + // invalid operand size :( + //shl RCX, 32; + //or RAX, RCX; + + pushq RAX; + mov [RSP + 4], EAX; + popq RAX; + + movd XMM0, RAX; + } } } else static assert(0, "todo"); @@ -153,24 +160,33 @@ } else version (X86_64) { - asm - { - naked; - movss XMM1, [two_f]; - movss XMM0, [one_f]; - movd ECX, XMM1; - movd EAX, XMM0; - - // invalid operand size :( - //shl RCX, 32; - //or RAX, RCX; - - pushq RAX; - mov [RSP + 4], EAX; - popq RAX; - - movd RAX, XMM0; - ret; + version(all) { + asm + { + naked; + movss XMM0, [one_f]; + movss XMM1, [two_f]; + ret; + } + } else { + // Code for when LDC becomes ABI-compatible with GCC + // regarding cfloat returns. + asm { + naked; + mov EAX, [one_f]; + mov ECX, [two_f]; + + // invalid operand size :( + //shl RCX, 32; + //or RAX, RCX; + + pushq RAX; + mov [RSP + 4], EAX; + popq RAX; + + movd RAX, XMM0; + ret; + } } } else static assert(0, "todo"); @@ -183,7 +199,7 @@ { version(X86) { - asm { fld1; fld two_d } + asm { fld1; fld two_d; } } else version (X86_64) {