Mercurial > projects > ldc
changeset 965:d7dead5f20f0
Merging fvbommels fix for asm8.d x86-64 code
author | Kelly Wilson <wilsonk cpsc.ucalgary.ca> |
---|---|
date | Sun, 15 Feb 2009 23:09:53 -0700 |
parents | fa21062b6948 (current diff) aa2e3a6c3410 (diff) |
children | e7dd879caae5 |
files | |
diffstat | 1 files changed, 51 insertions(+), 35 deletions(-) [+] |
line wrap: on
line diff
--- 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) {