changeset 1215:08f87d8cd101

Fix some unittests for 64-bit asm. They were operating on int variables as if they were longs. This was causing asm1_1 to fail when compiled with -O3 because it was overwriting the spilled value of callee-saved register %rbx, which the runtime was using as a pointer value at the time.
author Frits van Bommel <fvbommel wxs.nl>
date Mon, 13 Apr 2009 17:42:36 +0200
parents 7e5547d8e59f
children 033f18ec1371 79758fd2f48a
files tests/mini/asm1_1.d tests/mini/asm6.d
diffstat 2 files changed, 30 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/tests/mini/asm1_1.d	Mon Apr 13 16:16:03 2009 +0200
+++ b/tests/mini/asm1_1.d	Mon Apr 13 17:42:36 2009 +0200
@@ -9,25 +9,25 @@
     printf("%d\n", i);
     version (D_InlineAsm_X86)
     {
-	asm
-    	{
-		mov EBX, ip;
-        	mov EAX, [EBX];
-        	add EAX, 8;
-        	mul EAX, EAX;
-        	mov [EBX], EAX;
-    	}
+        asm
+        {
+            mov ECX, ip;
+            mov EAX, [ECX];
+            add EAX, 8;
+            mul EAX, EAX;
+            mov [ECX], EAX;
+        }
     }
     else version (D_InlineAsm_X86_64)
     {
-	asm
-	{ 
-		movq RCX, ip;
-		movq RAX, [RCX];
-		add RAX, 8;
-		imul RAX, RAX;
-		movq [RCX], RAX;
-	}
+        asm
+        { 
+            movq RCX, ip;
+            mov EAX, [RCX];
+            add EAX, 8;
+            imul EAX, EAX;
+            mov [RCX], EAX;
+        }
     }
     printf("%d\n", i);
     assert(i == 400);
--- a/tests/mini/asm6.d	Mon Apr 13 16:16:03 2009 +0200
+++ b/tests/mini/asm6.d	Mon Apr 13 17:42:36 2009 +0200
@@ -1,31 +1,25 @@
 extern(C) int printf(char*, ...);
 
+version (D_InlineAsm_X86)
+    version = InlineAsm_X86_Any;
+version (D_InlineAsm_X86_64)
+    version = InlineAsm_X86_Any;
+
 void main()
 {
     int a,b,c;
     a = int.max-1;
     b = 5;
-    version (D_InlineAsm_X86)
+    version (InlineAsm_X86_Any)
     {
-	asm
-    	{
-		mov EAX, a;
-        	mov ECX, b;
-        	add EAX, ECX;
-        	jo Loverflow;
-        	mov c, EAX;
-    	}
-    }
-    else version (D_InlineAsm_X86_64)
-    {
-	asm
-	{
-		movq RDX, a;
-        	movq RAX, b;
-        	add RDX, RAX;
-        	jo Loverflow;
-        	movq c, RDX;
-	}
+        asm
+        {
+            mov EAX, a;
+            mov ECX, b;
+            add EAX, ECX;
+            jo Loverflow;
+            mov c, EAX;
+        }
     }
     printf("a == %d\n", a);
     printf("b == %d\n", b);