changeset 1002:a7310ceac844

inline ASM review
author thomask
date Thu, 18 May 2006 16:07:06 +0000
parents eb5364abce0c
children ab5680607b8d
files addon/cpuinfo.d run/a/asm_lahf_01_A.d run/a/asm_lar_01_A.d run/a/asm_lddqu_01.d run/a/asm_ldmxcsr_01_A.d run/a/asm_lea_01_A.d run/a/asm_lea_01_B.d run/a/asm_leave_01.d run/a/asm_lfence_01.d run/a/asm_lock_01.d run/a/asm_loop_01.d run/a/asm_loope_01_A.d run/a/asm_loopne_01_A.d run/a/asm_maxpd_01_A.d run/a/asm_maxps_01_A.d run/a/asm_maxsd_01_A.d run/a/asm_maxss_01_A.d run/a/asm_mfence_01.d run/a/asm_minpd_01_A.d run/a/asm_minps_01_A.d run/a/asm_minsd_01_A.d run/a/asm_minsd_01_B.d run/a/asm_minss_01_A.d run/a/asm_minss_01_B.d run/a/asm_mov_01.d run/a/asm_mov_01_A.d run/a/asm_mov_01_B.d run/a/asm_mov_01_C.d run/a/asm_mov_01_D.d run/a/asm_mov_01_E.d run/a/asm_mov_02_A.d run/a/asm_mov_02_B.d run/a/asm_mov_02_C.d run/a/asm_mov_02_D.d run/a/asm_mov_02_E.d run/a/asm_mov_03_A.d run/a/asm_mov_03_B.d run/a/asm_mov_03_C.d run/a/asm_movapd_01_A.d run/a/asm_movaps_01_A.d run/a/asm_movd_01.d run/a/asm_movddup_01_A.d run/a/asm_movddup_01_B.d run/a/asm_movdq2q_01.d run/a/asm_movhlpd_01_A.d run/a/asm_movhlps_01_A.d run/a/asm_movhpd_01_A.d run/a/asm_movhpd_01_B.d run/a/asm_movhps_01_A.d run/a/asm_movhps_01_B.d run/a/asm_movlhps_01_A.d run/a/asm_movlpd_01_A.d run/a/asm_movlpd_01_B.d run/a/asm_movlps_01_A.d run/a/asm_movlps_01_B.d run/a/asm_movmskpd_01_A.d run/a/asm_movmskps_01_A.d run/a/asm_movnti_01.d run/a/asm_movntpd_01_A.d run/a/asm_movntps_01_A.d run/a/asm_movntq_01_A.d run/a/asm_movq2dq_01.d run/a/asm_movq_01_A.d run/a/asm_movq_01_B.d run/a/asm_movq_01_C.d run/a/asm_movsd_01.d run/a/asm_movsd_01_A.d run/a/asm_movshdup_01_A.d run/a/asm_movsldup_01_A.d run/a/asm_movss_01_A.d run/a/asm_movss_01_B.d run/a/asm_movss_01_C.d run/a/asm_movsx_01_A.d run/a/asm_movsx_01_B.d run/a/asm_movsx_01_C.d run/a/asm_stmxcsr_01_A.d
diffstat 76 files changed, 1973 insertions(+), 435 deletions(-) [+]
line wrap: on
line diff
--- a/addon/cpuinfo.d	Wed May 17 06:06:45 2006 +0000
+++ b/addon/cpuinfo.d	Thu May 18 16:07:06 2006 +0000
@@ -14,7 +14,7 @@
 		const bool haveX86InlineAsm = true;
 		version = haveX86InlineAsm;
 	}else{
-		pragma(msg, "no Inline ASM support");
+		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		const bool haveX86InlineAsm = false;
 	}
 }else version(D_InlineAsm_X86){
@@ -24,7 +24,7 @@
 	const bool haveX86InlineAsm = true;
 	version = haveX86InlineAsm;
 }else{
-	pragma(msg, "no Inline ASM support");
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 	const bool haveX86InlineAsm = false;
 }
 
@@ -39,6 +39,8 @@
 				cpuid;
 				mov a, EDX;
 			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		}
 
 		if(!((a >> 15) & 1)){
@@ -46,7 +48,7 @@
 		}
 	}
 }
-	
+
 void haveCX8(){
 	uint a = 0;
 
@@ -66,67 +68,80 @@
 template haveFPU(){
 	void haveFPU(){
 		uint a = 0;
-		
+
 		version(haveX86InlineAsm){
 			asm{
 				mov EAX, 1;
 				cpuid;
 				mov a, EDX;
 			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		}
-		
+
 		if(!(a & 1)){
 			throw new Exception("DSTRESS{XFAIL}: no X86 FPU present");
 		}
 	}
 }
 
-void haveMMX(){
-	uint a = 0;
-		
-	version(haveX86InlineAsm){
-		asm{
-			mov EAX, 1;
-			cpuid;
-			mov a, EDX;
+template haveMMX(){
+	void haveMMX(){
+		uint a = 0;
+
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 1;
+				cpuid;
+				mov a, EDX;
+			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		}
-	}
-		
-	if(!((a >> 23) & 1)){
-		throw new Exception("no X86 MMX support present");
+
+		if(!((a >> 23) & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no MMX support present");
+		}
 	}
 }
 
-	
-void haveSSE(){
-	uint a = 0;
-			
-	version(haveX86InlineAsm){
-		asm{
-			mov EAX, 1;
-			cpuid;
-			mov a, EDX;
+template haveSSE(){
+	void haveSSE(){
+		uint a = 0;
+
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 1;
+				cpuid;
+				mov a, EDX;
+			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+		}
+
+		if(!((a >> 25) & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no SSE support present");
 		}
 	}
-
-	if(!((a >> 25) & 1)){
-		throw new Exception("no X86 SSE support present");
-	}	
 }
 
-void haveSSE2(){
-	uint a = 0;
-		
-	version(haveX86InlineAsm){
-		asm{
-			mov EAX, 1;
-			cpuid;
-			mov a, EDX;
+template haveSSE2(){
+	void haveSSE2(){
+		uint a = 0;
+
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 1;
+				cpuid;
+				mov a, EDX;
+			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		}
-	}
 
-	if(!((a >> 26) & 1)){
-		throw new Exception("no X86 SSE2 support present");
+		if(!((a >> 26) & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no SSE2 support present");
+		}
 	}
 }
 
@@ -134,15 +149,17 @@
 	void haveSSE3(){
 		uint a = 1;
 		uint b = 0;
-			
+
 		version(haveX86InlineAsm){
 			asm{
 				mov EAX, a;
 				cpuid;
 				mov b, ECX;
 			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
 		}
-	
+
 		if(!(a & 1)){
 			throw new Exception("DSTRESS{XFAIL}: no SSE3 support present");
 		}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_lahf_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,37 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lahf_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint i = 0x12_34_56_01;
+
+		asm{
+			mov EAX, i;
+			cmp AL, 2;
+			lahf;
+			mov i, EAX;
+		}
+
+		if((i & 0xFF_FF_00_FF) != 0x12_34_00_01){
+			assert(0);
+		}
+
+		ubyte b = (i & 0x00_00_FF_00) >> 8;
+
+		if(b != 151){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_lar_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,25 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lar_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		asm{
+			mov AX, 0x0;
+			lar BX, AX;
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_lddqu_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_lddqu_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,39 +4,40 @@
 
 module dstress.run.a.asm_lddqu_01;
 
-align(1) struct X{
-	ubyte a;
-	ulong b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
 }
 
-align(16) struct Y{
-	ulong c;
-}
-		
-int main(){
-	version(D_InlineAsm){	
-		X* x = new X;
+version(runTest){
+	import addon.cpuinfo;
 	
-		assert(cast(size_t)&(x.b) % 2 == 1);
-		
-		x.b = 0x0123_4567_89AB_CDEF_LU;
-		
-		Y* y = new Y;
-		
-		assert(cast(size_t)&(y.c) % 16 == 0);
-		
+	int main(){
+		haveSSE3!()();
+
+		const ubyte[16] A = [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
+
+		ubyte[16] b;
+
 		asm{
-			mov EAX, x;
-			lddqu XMM0, X.b[EAX];
-			mov EAX, y;
-			movdqa Y.c[EAX], XMM0;
+			lddqu XMM0, A;
+			movdqu b, XMM0;
+		}
+
+		if(A.length != b.length){
+			assert(0);
+		}
+
+		for(size_t i = 0; i < A.lenght; i++){
+			if(A[i] != b[i]){
+				assert(0);
+			}
 		}
 		
-		assert(y.c==0x0123_4567_89AB_CDEF_LU);
-		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_ldmxcsr_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,30 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_ldmxcsr_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveMMX!()();
+
+		uint state = 0x0000_1F80;
+
+		asm{
+			ldmxcsr state;
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_lea_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_lea_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_lea_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint a;
 		uint b;
 		
@@ -19,8 +25,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_lea_01_B.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_lea_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_lea_01_B;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		ushort i;
 		
 		asm{
@@ -18,8 +24,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_leave_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_leave_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_leave_01;
 
-int main(){
-	version(D_InlineAsm){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint a = 1;
 		
 		asm{
@@ -16,11 +22,13 @@
 			mov a, EAX;
 		}
 		
-		assert(a == 2);
+		if(a != 2){
+			assert(0);
+		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_lfence_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_lfence_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,16 +4,21 @@
 
 module dstress.run.a.asm_lfence_01;
 
-int main(){
-	version(D_InlineAsm){
-		
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		asm{
 			lfence;
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_lock_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_lock_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_lock_01;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint i = 0;
 		asm{
 			lock;
@@ -16,8 +22,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_loop_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_loop_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_loop_01;
 
-int main(){
-	version(D_InlineAsm){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		int a;
 		
 		asm{
@@ -16,11 +22,13 @@
 			mov a, EAX;
 		}
 		
-		assert(a == 10);
+		if(a != 10){
+			assert(0);
+		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_loope_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,34 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_loope_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		int a;
+		
+		asm{
+			mov EAX, -1;
+			mov ECX, 10;
+		start:	inc EAX;
+			loope start;
+			mov a, EAX;
+		}
+		
+		if(a != 1){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_loopne_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,34 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_loopne_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		int a;
+		
+		asm{
+			mov EAX, -5;
+			mov ECX, 10;
+		start:	inc EAX;
+			loopne start;
+			mov a, EAX;
+		}
+		
+		if(a != 0){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_maxpd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_maxpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxpd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
 		static double[2] A = [2.0, 3.0];
 		static double[2] B = [1.0, 4.0];
 		double[2] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movupd XMM0, A;
+			movupd XMM1, B;
 			maxpd XMM0, XMM1;
-			movdqu c, XMM0;
+			movupd c, XMM0;
 		}
 
 		if(c[0] != 2.0){
@@ -26,8 +36,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_maxps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_maxps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [2.0f, 3.0f, 16.0f, -1.0f];
 		static float[4] B = [1.0f, 4.0f, -17.0f, 1.0f];
 		float[4] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			maxps XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 
 		if(c[0] != 2.0f){
@@ -33,8 +43,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_maxsd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_maxsd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxsd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
 		static double[2] A = [1.0, 3.0];
 		static double[2] B = [2.0, 4.0];
 		double[2] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movupd XMM0, A;
+			movupd XMM1, B;
 			maxsd XMM0, XMM1;
-			movdqu c, XMM0;
+			movupd c, XMM0;
 		}
 
 		if(c[0] != 2.0){
@@ -26,8 +36,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_maxss_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_maxss_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxss_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [1.0f, 3.0f, 16.0f, -1.0f];
 		static float[4] B = [2.0f, 4.0f, -17.0f, 1.0f];
 		float[4] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			maxss XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 
 		if(c[0] != 2.0f){
@@ -33,8 +43,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_mfence_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_mfence_01.d	Thu May 18 16:07:06 2006 +0000
@@ -2,18 +2,23 @@
 // $Date$
 // $Author$
 
-module dstress.run.a.asm_lfence_01;
+module dstress.run.a.asm_mfence_01;
 
-int main(){
-	version(D_InlineAsm){
-		
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		asm{
 			mfence;
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_minpd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_minpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_minpd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static double[2] A = [2.0, 4.0];
-		static double[2] B = [1.0, 3.0];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [2.0, 3.0];
+		static double[2] B = [1.0, 4.0];
 		double[2] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movupd XMM0, A;
+			movupd XMM1, B;
 			minpd XMM0, XMM1;
-			movdqu c, XMM0;
+			movupd c, XMM0;
 		}
 
 		if(c[0] != 1.0){
@@ -26,8 +36,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_minps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_minps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [2.0f, 3.0f, 17.0f, -1.0f];
 		static float[4] B = [1.0f, 4.0f, 16.0f, 1.0f];
 		float[4] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			minps XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 
 		if(c[0] != 1.0f){
@@ -33,8 +43,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_minsd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_minsd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_minsd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
 		static double[2] A = [2.0, 4.0];
 		static double[2] B = [1.0, 3.0];
 		double[2] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movupd XMM0, A;
+			movupd XMM1, B;
 			minsd XMM0, XMM1;
-			movdqu c, XMM0;
+			movupd c, XMM0;
 		}
 
 		if(c[0] != 1.0){
@@ -26,8 +36,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_minsd_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,41 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_minsd_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [3.0, 4.0];
+		double b = 2.0;
+		double[2] c;
+
+		asm{
+			movupd XMM0, A;
+			minsd XMM0, b;
+			movupd c, XMM0;
+		}
+
+		if(c[0] != 2.0){
+			assert(0);
+	 	}
+		if(c[1] != 4.0){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_minss_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_minss_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,17 +4,27 @@
 
 module dstress.run.a.asm_maxss_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [2.0f, 3.0f, 17.0f, -1.0f];
 		static float[4] B = [1.0f, 4.0f, 16.0f, 1.0f];
 		float[4] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			minss XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 
 		if(c[0] != 1.0f){
@@ -33,8 +43,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_minss_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,49 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_maxss_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [2.0f, 3.0f, 17.0f, -1.0f];
+		float b = 1.0f;
+		float[4] c;
+
+		asm{
+			movups XMM0, A;
+			minss XMM0, b;
+			movups c, XMM0;
+		}
+
+		if(c[0] != 1.0f){
+			assert(0);
+		}
+
+		if(c[1] != 3.0f){
+			assert(0);
+		}
+		
+		if(c[2] != 17.0f){
+			assert(0);
+		}
+
+		if(c[3] != -1.0f){
+			assert(0);
+		}
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_mov_01.d	Wed May 17 06:06:45 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
- // $HeadURL$
- // $Date$
- // $Author$
- 
-module dstress.run.a.asm_mov_01;
-
-int test(){
-	asm{
-		naked;
-		mov EAX, 10;
-    		ret;
-	}
-}
-
-int main(){
-	assert(test()==10);
-        return 0;
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,37 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ubyte a = 0xFE;
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov AL, a;
+			mov i, EAX;
+		}
+
+		if(a != 0xFE){
+			assert(0);
+		}
+
+		if(i != 0x12_34_56_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,38 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ubyte a = 0xFE;
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov BL, a;
+			mov AL, BL;
+			mov i, EAX;
+		}
+
+		if(a != 0xFE){
+			assert(0);
+		}
+
+		if(i != 0x12_34_56_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_01_C.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,31 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_01_C;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ubyte a = 0xFE;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov a, AL;
+		}
+
+		if(a != 0x78){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_01_D.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,32 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_01_D;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov AL, 0xFE;
+			mov i, EAX;
+		}
+
+		if(i != 0x12_34_56_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_01_E.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,30 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_01_E;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ubyte a = 0xFE;
+
+		asm{
+			mov a, 0x12;
+		}
+
+		if(a != 0x12){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_02_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,37 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_02_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ushort a = 0x33_FE;
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov AX, a;
+			mov i, EAX;
+		}
+
+		if(a != 0x33_FE){
+			assert(0);
+		}
+
+		if(i != 0x12_34_33_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_02_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,38 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_02_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ushort a = 0x33_FE;
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov BX, a;
+			mov AX, BX;
+			mov i, EAX;
+		}
+
+		if(a != 0x33_FE){
+			assert(0);
+		}
+
+		if(i != 0x12_34_33_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_02_C.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,31 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_02_C;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ushort a = 0xFE;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov a, AX;
+		}
+
+		if(a != 0x56_78){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_02_D.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,32 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_02_D;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint i;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov AX, 0x33_FE;
+			mov i, EAX;
+		}
+
+		if(i != 0x12_34_33_FE){
+			assert(0);
+		}
+    		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_02_E.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,30 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_02_E;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		ushort a = 0xFE_33;
+
+		asm{
+			mov a, 0x12_45;
+		}
+
+		if(a != 0x12_45){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_03_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,36 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_03_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint a = 0x12_34_56_78;
+		uint b;
+
+		asm{
+			mov EAX, a;
+			mov b, EAX;
+		}
+
+		if(a != 0x12_34_56_78){
+			assert(0);
+		}
+
+		if(b != 0x12_34_56_78){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_03_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,31 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_03_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint a;
+
+		asm{
+			mov EAX, 0x12_34_56_78;
+			mov a, EAX;
+		}
+
+		if(a != 0x12_34_56_78){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_mov_03_C.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,30 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_mov_03_C;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		uint a;
+
+		asm{
+			mov a, 0x12_34_56_78;
+		}
+
+		if(a != 0x12_34_56_78){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movapd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movapd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_movapd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
 		static double[2] A = [2.0, 3.0];
 		double[2] b;
 
@@ -24,8 +34,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movaps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movaps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_movaps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [2.0f, 3.0f, 0.0f, 0.5f];
 		float[4] b;
 
@@ -31,8 +41,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movd_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movd_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,9 +4,18 @@
 
 module dstress.run.a.asm_movd_01;
 
-int main(){
-	version(D_InlineAsm){
-		
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveMMX!()();
+
 		uint a = 0x1234_ABCD;
 		int b = 2;
 		
@@ -15,11 +24,13 @@
 			movd b, MM0;
 		}
 		
-		assert(a==b);
+		if(a != b){
+			assert(0);
+		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movddup_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movddup_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,16 +4,26 @@
 
 module dstress.run.a.asm_movddup_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE3!()();
+
 		static double[2] A = [2.0, 3.0];
 		double[2] b;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, A;
+			movupd XMM0, A;
+			movupd XMM1, A;
 			movddup XMM1, XMM0;
-			movdqu b, XMM1;
+			movupd b, XMM1;
 		}
 
 		if(A[0] != b[0]){
@@ -25,8 +35,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movddup_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,42 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movddup_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE3!()();
+
+		static double[2] A = [2.0, 3.0];
+		double[2] b;
+		double c = 1.0;
+
+		asm{
+			movupd XMM0, A;
+			movddup XMM0, c;
+			movupd b, XMM0;
+		}
+
+		if(b[0] != 1.0){
+			assert(0);
+		}
+
+		if(b[1] != 1.0){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movdq2q_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movdq2q_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,22 +4,32 @@
 
 module dstress.run.a.asm_movdq2q_01;
 
-int main(){
-	version(D_InlineAsm){
-		double a = -2.5;
-		double b = 1.1;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [1.0, 2.0];
+		double b = 3.0;
 		
 		asm{
-			movq XMM0, a;
+			movupd XMM0, A;
 			movdq2q MM0, XMM0;
 			movq b, XMM0;
 		}
 		
-		if(a==b){
+		if(b != A[1]){
 			return 0;
 		}
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movhlpd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-// $HeadURL$
-// $Date$
-// $Author$
-
-module dstress.run.a.asm_movhlpd_01_A;
-
-int main(){
-	version(D_InlineAsm_X86){
-		static double[2] A = [1.0, 2.0];
-		static double B = 4.0;
-		double[2] b;
-
-		asm{
-			movdqu XMM0, A;
-			movhpd XMM0, B;
-			movdqu b, XMM0;
-		}
-
-		if(b[0] != A[0]){
-			assert(0);
-		}
-
-		if(b[1] != B){
-			assert(0);
-		}
-		
-		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
-	}
-}
--- a/run/a/asm_movhlps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movhlps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -8,17 +8,27 @@
 
 module dstress.run.a.asm_movhlps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
 		static float[4] A = [3.0f, 4.0f, 5.0f, 6.0f];
 		static float[4] B = [10.0f, 20.0f, 30.0f, 40.0f];
 		float[4] c;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			movlhps XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 
 		if(c[0] != A[0]){
@@ -38,8 +48,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movhpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,42 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movhpd_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [1.0, 2.0];
+		double B = 4.0;
+		double[2] b;
+
+		asm{
+			movupd XMM0, A;
+			movhpd XMM0, B;
+			movupd b, XMM0;
+		}
+
+		if(b[0] != A[0]){
+			assert(0);
+		}
+
+		if(b[1] != B){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movhpd_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movhpd_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [1.0, 2.0];
+		double b;
+
+		asm{
+			movupd XMM0, A;
+			movhpd b, XMM0;
+		}
+
+		if(b != A[1]){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movhps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,47 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movhps_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		static float[2] B = [5.0f, 6.0f];
+		float[4] c;
+
+		asm{
+			movups XMM0, A;
+			movhps XMM0, B;
+			movups c, XMM0;
+		}
+
+		if(c[0] != A[0]){
+			assert(0);
+		}
+		if(c[1] != A[1]){
+			assert(0);
+		}
+		if(c[2] != B[0]){
+			assert(0);
+		}
+		if(c[3] != B[1]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movhps_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,39 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movhps_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		float[2] b;
+
+		asm{
+			movups XMM0, A;
+			movhps b, XMM0;
+		}
+
+		if(b[0] != A[2]){
+			assert(0);
+		}
+		if(b[1] != A[3]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movlhps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,51 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlhps_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [3.0f, 4.0f, 5.0f, 6.0f];
+		static float[4] B = [10.0f, 20.0f, 30.0f, 40.0f];
+		float[4] c;
+
+		asm{
+			movups XMM0, A;
+			movups XMM1, B;
+			movlhps XMM0, XMM1;
+			movups c, XMM0;
+		}
+
+		if(c[0] != B[2]){
+			assert(0);
+		}
+
+		if(c[1] != B[3]){
+			assert(0);
+		}
+		
+		if(c[2] != A[2]){
+			assert(0);
+		}
+
+		if(c[3] != A[3]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movlpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,42 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlpd_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [3.0, 4.0];
+		double b = 5.0;
+		double[2] c;
+
+		asm{
+			movups XMM0, A;
+			movlpd XMM0, b;
+			movups c, XMM0;
+		}
+
+		if(c[0] != b){
+			assert(0);
+		}
+
+		if(c[1] != A[1]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movlpd_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlpd_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
+		static double[2] A = [3.0, 4.0];
+		double b = 5.0;
+
+		asm{
+			movups XMM0, A;
+			movlpd b, XMM0;
+		}
+
+		if(b != A[0]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movlps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,47 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlps_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		static float[2] B = [5.0f, 6.0f];
+		
+		float[4] c;
+
+		asm{
+			movups XMM0, A;
+			movlps XMM0, B;
+			movups c, XMM0;
+		}
+
+		if(c[0] != B[0]){
+			assert(0);
+		}
+		if(c[1] != B[1]){
+			assert(0);
+		}
+		if(c[2] != A[2]){
+			assert(0);
+		}
+		if(c[3] != A[3]){
+			assert(0);
+		}
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movlps_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,39 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlps_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		float[2] b;
+
+		asm{
+			movups XMM0, A;
+			movlps b, XMM0;
+		}
+
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movmskpd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movmskpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,25 +4,35 @@
 
 module dstress.run.a.asm_movmskpd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
 		const double[2] a = [1.0, -1.0];
 		uint b;
 		
 		asm{
-			movdqu XMM0, a;
-			mov EAX, 0xFFFF_FFFF;
+			movupd XMM0, a;
+			mov EAX, 0x1234_5678;
 			movmskpd EAX, XMM0;
 			mov b, EAX;
 		}
 		
-		if(b != 0xFFFF_FF02){
+		if(b != 0x0000_0002){
 			assert(0);
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movmskps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movmskps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,25 +4,35 @@
 
 module dstress.run.a.asm_movmskps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] a = [1.0, -1.0, +0.0, -0.0];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
+		const float[4] A = [1.0f, -1.0f, -float.infinity, -0.0f];
 		uint b;
 		
 		asm{
-			movdqu XMM0, a;
-			mov EAX, 0xFFFF_FFFF;
+			movdqu XMM0, A;
+			mov EAX, 0x1234_5678;
 			movmskps EAX, XMM0;
 			mov b, EAX;
 		}
 		
-		if(b != 0xFFFF_FF06){
+		if(b != 0x0000_0004){
 			assert(0);
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movnti_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movnti_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,9 +4,14 @@
 
 module dstress.run.a.asm_movnti_01;
 
-int main(){
-	version(D_InlineAsm){
-		
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint a = 0x1234_ABCD;
 		uint b = 2;
 		
@@ -15,12 +20,16 @@
 			movnti b, EAX;
 		}
 		
-		assert(a==b);
-		assert(b==0x1234_ABCD);
+		if(a != 0x1234_ABCD){
+			assert(0);
+		}
+		if(b != 0x1234_ABCD){
+			assert(0);
+		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movntpd_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movntpd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,13 +4,23 @@
 
 module dstress.run.a.asm_movntpd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
 		const double[2] a = [1.0, -1.0];
 		double[2] b;
 		
 		asm{
-			movdqu XMM0, a;
+			movupd XMM0, a;
 			movntpd b, XMM0;
 		}
 		
@@ -22,8 +32,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movntps_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movntps_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,13 +4,23 @@
 
 module dstress.run.a.asm_movntps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] a = [1.0, -1.0, 0.0, 0.1];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+		
+		const float[4] a = [1.0f, -1.0f, 0.0f, 0.1f];
 		float[4] b;
 		
 		asm{
-			movdqu XMM0, a;
+			movups XMM0, a;
 			movntps b, XMM0;
 		}
 		
@@ -28,8 +38,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movntq_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,39 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movlps_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveMMX!()();
+
+		ulong a = 0x1234_5678_9ABC_DEF0_UL;
+		ulong b;
+
+		asm{
+			movq MM0, a;
+			movntq b, MM0;
+		}
+
+		if(a != 0x1234_5678_9ABC_DEF0_UL){
+			assert(0);
+		}
+		if(b != 0x1234_5678_9ABC_DEF0_UL){
+			assert(0);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movq2dq_01.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movq2dq_01.d	Thu May 18 16:07:06 2006 +0000
@@ -4,16 +4,26 @@
 
 module dstress.run.a.asm_movq2dq_01_B;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static ulong[2] x = [0x0011_2233_4455_6677_8899LU, 0x1234_5678_90AB_CDEF];
-		ulong[2] y = x.dup;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		static ulong[2] X = [0x0011_2233_4455_6677_8899LU, 0x1234_5678_90AB_CDEF];
+		ulong[2] y = X.dup;
 		
 		static ulong A = 0x1234_ABCD_5678_EF01;
 		ulong a = A;
 		
 		asm{
-			movdqu XMM0, x;
+			movdqu XMM0, X;
 			movq MM0, a;
 			movq2dq XMM0, MM0;
 			movdqu y, XMM0;
@@ -32,8 +42,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movq_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movq_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,17 @@
 
 module dstress.run.a.asm_movq_01_A;
 
-int main(){
-	version(D_InlineAsm){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
 		
 		ulong a = 0x1234_ABCD_5678_EF01;
 		ulong b = 2;
@@ -15,12 +24,16 @@
 			movq b, MM0;
 		}
 		
-		assert(a==b);
-		assert(b==0x1234_ABCD_5678_EF01);
+		if(a != 0x1234_ABCD_5678_EF01){
+			assert(0);
+		}
+		if(b != 0x1234_ABCD_5678_EF01){
+			assert(0);
+		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movq_01_B.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movq_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_movq_01_B;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE2!()();
+
 		static ulong[2] a = [0x1234_ABCD_56789_EF90_LU, 0x1122_5566_77AA_FFFF_LU];
 		ulong[2] b;
 		
@@ -26,8 +36,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movq_01_C.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movq_01_C.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_movq_01_C;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
 		static ulong[2] a = [0x1234_ABCD_5678_EF90_LU, 0x1122_2222_5555_FFFF_LU];
 		static ulong[2] b = [0x1000_1111_5678_EF90_LU, 0x1122_5566_77AA_FFFF_LU];
 		
@@ -18,21 +28,21 @@
 			movdqu c, XMM0;
 		}
 		
-		if(c[0] == a[0]){
+		if(c[1] == a[1]){
 			// Intel
-		}else if(c[0] == 0){
+		}else if(c[1] == 0){
 			// AMD
 		}else{
 			assert(0);
 		}
 
-		if(c[1] != b[1]){
+		if(c[0] != b[0]){
 			assert(0);
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movsd_01.d	Wed May 17 06:06:45 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-// $HeadURL$
-// $Date$
-// $Author$
-
-module dstress.run.a.asm_movsd_01;
-
-int main(){
-	version(D_InlineAsm_X86){
-		
-		double a = -12.1L;
-		double b = 2.8L;
-		
-		asm{
-			movsd XMM0, a;
-			movsd b, XMM0;
-		}
-		
-		if(a != b){
-			assert(0);
-		}
-		
-		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
-	}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movsd_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movsd_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+		
+		static double[2] A = [1.0, 2.0];
+		double b;
+		
+		asm{
+			movupd XMM0, A;
+			movsd b, XMM0;
+		}
+		
+		if(b != A[0]){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_movshdup_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movshdup_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,33 +4,41 @@
 
 module dstress.run.a.asm_movshdup_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] a = [1.0, -1.0, -2.0, 2.0];
-		double[4] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		const float[4] a = [1.0f, -1.0f, -2.0f, 2.0f];
+		float[4] b;
 		
 		asm{
-			movdqu XMM0, a;
+			movups XMM0, a;
 			movshdup XMM1, XMM0;
-			movdqu b, XMM1;
+			movups b, XMM1;
 		}
 		
-		if(a[1] != b[0]){
+		if(a[0] != b[0]){
 			assert(0);
 		}
-		if(a[1] != b[1]){
+		if(a[0] != b[1]){
 			assert(0);
 		}
-		if(a[3] != b[2]){
+		if(a[2] != b[2]){
 			assert(0);
 		}
-		if(a[3] != b[3]){
+		if(a[2] != b[3]){
 			assert(0);
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movsldup_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movsldup_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,33 +4,43 @@
 
 module dstress.run.a.asm_movsldup_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] a = [1.0, -1.0, -2.0, 2.0];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE3!()();
+
+		const float[4] A = [1.0, -1.0f, -2.0f, 2.0f];
 		double[4] b;
 		
 		asm{
-			movdqu XMM0, a;
+			movups XMM0, A;
 			movsldup XMM1, XMM0;
-			movdqu b, XMM1;
+			movups b, XMM1;
 		}
 		
-		if(a[0] != b[0]){
+		if(A[1] != b[0]){
 			assert(0);
 		}
-		if(a[0] != b[1]){
+		if(A[1] != b[1]){
 			assert(0);
 		}
-		if(a[2] != b[2]){
+		if(A[3] != b[2]){
 			assert(0);
 		}
-		if(a[2] != b[3]){
+		if(A[3] != b[3]){
 			assert(0);
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movss_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movss_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,34 +4,44 @@
 
 module dstress.run.a.asm_movss_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] A = [1.0, 2.0, 3.0, 4.0];
-		const float B = 9.0;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
+		const float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		const float B = 9.0f;
 		float[4] c;
 		
 		asm{
-			movdqu XMM0, A;
+			movups XMM0, A;
 			movss XMM0, B;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 		
 		if(c[0] != B){
 			assert(0);
 		}
-		if(c[1] != 0.0){
+		if(c[1] != 0.0f){
 			assert(0);
 		}
-		if(c[2] != 0.0){
+		if(c[2] != 0.0f){
 			assert(0);
 		}
-		if(c[3] != 0.0){
+		if(c[3] != 0.0f){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movss_01_B.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movss_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -4,20 +4,30 @@
 
 module dstress.run.a.asm_movss_01_B;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] A = [1.0, 2.0, 3.0, 4.0];
-		const float[4] B = [5.0, 6.0, 7.0, 9.0];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+
+		const float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
+		const float[4] B = [5.0f, 6.0f, 7.0f, 9.0f];
 		float[4] c;
 		
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movups XMM0, A;
+			movups XMM1, B;
 			movss XMM0, XMM1;
-			movdqu c, XMM0;
+			movups c, XMM0;
 		}
 		
-		if(c[0] != B[0]){
+		if(c[0] != A[0]){
 			assert(0);
 		}
 		if(c[1] != A[1]){
@@ -26,13 +36,13 @@
 		if(c[2] != A[2]){
 			assert(0);
 		}
-		if(c[3] != A[3]){
+		if(c[3] != B[3]){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movss_01_C.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movss_01_C.d	Thu May 18 16:07:06 2006 +0000
@@ -3,14 +3,23 @@
 // $Author$
 
 module dstress.run.a.asm_movss_01_C;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[4] A = [1.0, 2.0, 3.0, 4.0];
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+		
+		const float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
 		float b;
 		
 		asm{
-			movdqu XMM0, A;
+			movups XMM0, A;
 			movss b, XMM0;
 		}
 		
@@ -19,8 +28,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movsx_01_A.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movsx_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_movsx_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		int i = 0xFF_FF_FF_FFu;
 		byte b = byte.min;
 		
@@ -35,8 +41,8 @@
 		}
 		
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_movsx_01_B.d	Wed May 17 06:06:45 2006 +0000
+++ b/run/a/asm_movsx_01_B.d	Thu May 18 16:07:06 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_movsx_01_B;
 
-int main(){
-	version(D_InlineAsm_X86){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint i = 0x12_3F_FF_FFu;
 		byte b = -128;
 		
@@ -21,9 +27,9 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movsx_01_C.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,48 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movsx_01_C;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		int i = 0xFF_FF_FF_FFu;
+		short b = short.min;
+		
+		asm{
+			mov EAX, i;
+			mov AX, b;
+			movsx EAX, AX;
+			mov i, EAX;
+		}
+	
+		if(i != short.min){
+			assert(0);
+		}
+		
+		i = 0xFF_FF_FF_FFu;
+		b = short.max;
+		
+		asm{
+			mov EAX, i;
+			mov AX, b;
+			movsx EAX, AX;
+			mov i, EAX;
+		}
+		
+		if(i != short.max){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_stmxcsr_01_A.d	Thu May 18 16:07:06 2006 +0000
@@ -0,0 +1,34 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_stmxcsr_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveMMX!()();
+
+		uint state;
+
+		asm{
+			stmxcsr state;
+		}
+
+		if((state & 0x0000_FFFF) != 0x0000_1F80){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}