changeset 964:aa2e3a6c3410

Some changes I missed in my last commit (wound up in wrong patch file)
author Frits van Bommel <fvbommel wxs.nl>
date Mon, 16 Feb 2009 01:43:14 +0100
parents a415d305477f
children d7dead5f20f0
files tests/mini/asm8.d
diffstat 1 files changed, 51 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/tests/mini/asm8.d	Sun Feb 15 16:30:15 2009 -0700
+++ b/tests/mini/asm8.d	Mon Feb 16 01:43:14 2009 +0100
@@ -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)
     {