changeset 990:15b0469145fb

inline ASM review
author thomask
date Wed, 10 May 2006 05:30:02 +0000
parents a468938b0160
children fc296bd82895
files addon/cpuinfo.d run/a/asm_ffree_01_A.d run/a/asm_ficom_01_A.d run/a/asm_ficom_01_B.d run/a/asm_ficomp_01_A.d run/a/asm_ficomp_01_B.d run/a/asm_fild_01_A.d run/a/asm_fild_01_B.d run/a/asm_fild_01_C.d run/a/asm_fincstp_01.d run/a/asm_finit_01.d run/a/asm_fist_01_A.d run/a/asm_fist_01_B.d run/a/asm_fistp_01_A.d run/a/asm_fistp_01_B.d run/a/asm_fisttp_01_A.d run/a/asm_fisttp_01_B.d run/a/asm_fisttp_01_C.d run/a/asm_fld_01_A.d run/a/asm_fld_01_B.d run/a/asm_fld_01_C.d run/a/asm_fld_01_D.d run/a/asm_fninit_01.d
diffstat 23 files changed, 598 insertions(+), 253 deletions(-) [+]
line wrap: on
line diff
--- a/addon/cpuinfo.d	Tue May 09 04:18:47 2006 +0000
+++ b/addon/cpuinfo.d	Wed May 10 05:30:02 2006 +0000
@@ -20,24 +20,30 @@
 }else version(D_InlineAsm_X86){
 	const bool haveX86InlineAsm = true;
 	version = haveX86InlineAsm;
+}else version(D_InlineAsm_X86_X64){
+	const bool haveX86InlineAsm = true;
+	version = haveX86InlineAsm;
 }else{
 	pragma(msg, "no Inline ASM support");
 	const bool haveX86InlineAsm = false;
 }
 
-void haveCMOV(){
-	uint a = 0;
+
+template haveCMOV(){
+	void haveCMOV(){
+		uint a = 0;
 
-	version(haveX86InlineAsm){
-		asm{
-			mov EAX, 1;
-			cpuid;
-			mov a, EDX;
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 1;
+				cpuid;
+				mov a, EDX;
+			}
 		}
-	}
 
-	if(!((a >> 15) & 1)){
-		throw new Exception("no X86 CMOV support present");
+		if(!((a >> 15) & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no CMOV support present");
+		}
 	}
 }
 	
@@ -57,19 +63,21 @@
 	}
 }
 
-void haveFPU(){
-	uint a = 0;
+template haveFPU(){
+	void haveFPU(){
+		uint a = 0;
 		
-	version(haveX86InlineAsm){
-		asm{
-			mov EAX, 1;
-			cpuid;
-			mov a, EDX;
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 1;
+				cpuid;
+				mov a, EDX;
+			}
 		}
-	}
 		
-	if(!(a & 1)){
-		throw new Exception("no X86 FPU present");
+		if(!(a & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no X86 FPU present");
+		}
 	}
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_ffree_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -0,0 +1,29 @@
+ // $HeadURL$
+ // $Date$
+ // $Author$
+ 
+module dstress.run.a.asm_ffree_01_A;
+
+version(D_InlineAsm_X86){
+	version = doTest;
+}else version(D_InlineAsm_X86_64){
+	version = doTest;
+}
+
+version(doTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveFPU!()();
+
+		asm{
+			finit;
+			ffree ST(1);
+		}
+
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_ficom_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_ficom_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,40 +2,54 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_ficom_01_A;
 
-module dstress.run.a.asm_ficom_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		float f = 3.0;
+		float f = 3.0f;
 		short i = -3;
 		
 		ushort s;
 				
 		asm{
+			fld1;
 			fld f;
 			ficom i;
 			fstsw s;
 			fstp f;
 		}
 
-		assert(f == 3.0);
+		if(f != 3.0f){
+			assert(0);
+		}
 		
 		ushort C0 = 1 << 8;
 		ushort C2 = 1 << 10;
 		ushort C3 = 1 << 14;
 		
-		assert(!(s & C0));
-		assert(!(s & C2));
-		assert(!(s & C3));
+		if(s & C0){
+			assert(0);
+		}
+		if(s & C2){
+			assert(0);
+		}
+		if(s & C3){
+			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_ficom_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_ficom_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,40 +2,54 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_ficom_01_B;
 
-module dstress.run.a.asm_ficom_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		float f = -3.0;
+		float f = -3.0f;
 		int i = 3;
 		
 		ushort s;
 				
 		asm{
+			fld1;
 			fld f;
 			ficom i;
 			fstsw s;
 			fstp f;
 		}
 
-		assert(f == -3.0);
+		if(f != -3.0f){
+			assert(0);
+		}
 		
 		ushort C0 = 1 << 8;
 		ushort C2 = 1 << 10;
 		ushort C3 = 1 << 14;
 		
-		assert(s & C0);
-		assert(!(s & C2));
-		assert(!(s & C3));
+		if(!(s & C0)){
+			assert(0);
+		}
+		if(s & C2){
+			assert(0);
+		}
+		if(s & C3){
+			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_ficomp_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_ficomp_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,41 +2,54 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_ficomp_01_A;
 
-module dstress.run.a.asm_ficomp_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		float f = -3.0;
-		short i = 3;
+		float f = 3.0f;
+		short i = -3;
 		
 		ushort s;
 				
 		asm{
-			fldz;
+			fld1;
 			fld f;
 			ficomp i;
 			fstsw s;
 			fstp f;
 		}
 
-		assert(f == 0.0);
+		if(f != 1.0f){
+			assert(0);
+		}
 		
 		ushort C0 = 1 << 8;
 		ushort C2 = 1 << 10;
 		ushort C3 = 1 << 14;
 		
-		assert(s & C0);
-		assert(!(s & C2));
-		assert(!(s & C3));
+		if(s & C0){
+			assert(0);
+		}
+		if(s & C2){
+			assert(0);
+		}
+		if(s & C3){
+			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_ficomp_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_ficomp_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,41 +2,54 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_ficomp_01_B;
 
-module dstress.run.a.asm_ficomp_01_B;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		float f = -3.0;
+		float f = -3.0f;
 		int i = 3;
 		
 		ushort s;
 				
 		asm{
-			fldz;
+			fld1;
 			fld f;
 			ficomp i;
 			fstsw s;
 			fstp f;
 		}
 
-		assert(f == 0.0);
+		if(f != 1.0f){
+			assert(0);
+		}
 		
 		ushort C0 = 1 << 8;
 		ushort C2 = 1 << 10;
 		ushort C3 = 1 << 14;
 		
-		assert(s & C0);
-		assert(!(s & C2));
-		assert(!(s & C3));
+		if(!(s & C0)){
+			assert(0);
+		}
+		if(s & C2){
+			assert(0);
+		}
+		if(s & C3){
+			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_fild_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fild_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,29 +2,36 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fild_01_A;
 
-module dstress.run.a.asm_fild_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
 		short i = 800;
-		real r;
+		double d;
 		
 		asm{
 			finit;
 			fild i;
-			fstp r;
+			fst d;
 		}
 		
-		assert(r == 800.0L);
+		if(d != 800.0){
+			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_fild_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fild_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,30 +2,36 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fild_01_B;
 
-module dstress.run.a.asm_fild_01_B;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
+version(runTest){
+	import addon.cpuinfo;
 
-int main(){
-	version(D_InlineAsm){
+	int main(){
 		haveFPU!()();
 		
 		int i = 800;
-		real r;
+		double d;
 		
 		asm{
 			finit;
 			fild i;
-			fstp r;
+			fst d;
 		}
 		
-		assert(r == 800.0L);
+		if(d != 800.0){
+			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_fild_01_C.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fild_01_C.d	Wed May 10 05:30:02 2006 +0000
@@ -2,29 +2,36 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fild_01_C;
 
-module dstress.run.a.asm_fild_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
 		long i = 800;
-		real r;
+		double d;
 		
 		asm{
 			finit;
 			fild i;
-			fstp r;
+			fst d;
 		}
 		
-		assert(r == 800.0L);
+		if(d != 800.0){
+			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_fincstp_01.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fincstp_01.d	Wed May 10 05:30:02 2006 +0000
@@ -2,13 +2,18 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fincstp_01;
 
-module dstress.run.a.asm_fincstp_01;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
 		ushort a, b;
@@ -23,12 +28,16 @@
 		a = (a >> 11) & 0b111;
 		b = (b >> 11) & 0b111;
 		
-		assert(a == 0);
-		assert(b == 1);
+		if(a != 0){
+			assert(0);
+		}
+		if(b != 1){
+			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_finit_01.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_finit_01.d	Wed May 10 05:30:02 2006 +0000
@@ -2,13 +2,18 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_finit_01;
 
-module dstress.run.a.asm_finit_01;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		ushort controll, status;
 		
@@ -18,12 +23,17 @@
 			fstsw status;
 		}
 		
-		assert(controll == 0x037F);
-		assert(status == 0);
+		if(controll != 0x037F){
+			assert(0);
+		}
+		if(status != 0){
+			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_fist_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fist_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,29 +2,36 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fist_01_A;
 
-module dstress.run.a.asm_fist_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.0L;
+		float f = -800.0f;
 		short i;
 		
 		asm{
-			finit;
-			fld r;
+			fld1;
+			fld f;
 			fist i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			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_fist_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fist_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,29 +2,36 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fist_01_B;
 
-module dstress.run.a.asm_fist_01_B;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.0L;
+		float f = -800.0f;
 		int i;
 		
 		asm{
-			finit;
-			fld r;
+			fld1;
+			fld f;
 			fist i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			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_fistp_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fistp_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,32 +2,41 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fistp_01_A;
 
-module dstress.run.a.asm_fistp_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -80.0L;
-		short a, b;
+		float f = -800.0f;
+		short i;
 		
 		asm{
-			finit;
 			fld1;
-			fld r;
-			fistp a;
-			fistp b;
+			fld f;
+			fistp i;
+			fst f;
 		}
 		
-		assert(a == -80);
-		assert(b == 1);
+		if(i != -800){
+			assert(0);
+		}
+
+		if(f != 1.0f){
+			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_fistp_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fistp_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,32 +2,41 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fist_01_B;
 
-module dstress.run.a.asm_fistp_01_B;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.0L;
-		int a, b;
+		float f = -800.0f;
+		int i;
 		
 		asm{
-			finit;
 			fld1;
-			fld r;
-			fistp a;
-			fistp b;
+			fld f;
+			fistp i;
+			fst f;
 		}
 		
-		assert(a == -800);
-		assert(b == 1);
+		if(i != -800){
+			assert(0);
+		}
+
+		if(f != 1.0f){
+			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_fisttp_01_A.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fisttp_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -2,37 +2,46 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fistp_01_A;
 
-module dstress.run.a.asm_fistp_01_A;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.9L;
+		float f = -800.9f;
 		short i;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			assert(0);
+		}
 		
-		r = -800.0L;
+		f = -800.0f;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			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_fisttp_01_B.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fisttp_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -2,37 +2,46 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fistp_01_B;
 
-module dstress.run.a.asm_fistp_01_B;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.9L;
+		float f = -800.9f;
 		int i;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			assert(0);
+		}
 		
-		r = -800.0L;
+		f = -800.0f;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			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_fisttp_01_C.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fisttp_01_C.d	Wed May 10 05:30:02 2006 +0000
@@ -2,37 +2,46 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fistp_01_C;
 
-module dstress.run.a.asm_fistp_01_C;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		
-		real r = -800.9L;
+		float f = -800.9f;
 		long i;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			assert(0);
+		}
 		
-		r = -800.0L;
+		f = -800.0f;
 		
 		asm{
-			fld r;
+			fld f;
 			fisttp i;
 		}
 		
-		assert(i == -800);
+		if(i != -800){
+			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_fld_01_A.d	Wed May 10 05:30:02 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_fld_01_A;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveFPU!()();
+
+		float a = 1.2f;
+		float b;
+
+		asm{
+			fld a;
+			fst b;
+		}
+
+		if(b != 1.2f){
+			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_fld_01_B.d	Wed May 10 05:30:02 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_fld_01_B;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveFPU!()();
+
+		double a = 1.2;
+		double b;
+
+		asm{
+			fld a;
+			fst b;
+		}
+
+		if(b != 1.2){
+			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_fld_01_C.d	Wed May 10 05:30:02 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_fld_01_C;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveFPU!()();
+
+		real a = 1.2L;
+		double b;
+
+		asm{
+			fld a;
+			fst b;
+		}
+
+		if(b != 1.2){
+			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_fld_01_D.d	Wed May 10 05:30:02 2006 +0000
@@ -0,0 +1,38 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_fld_01_D;
+
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveFPU!()();
+
+		float a = 1.2f;
+		float b;
+
+		asm{
+			fld1;
+			fld a;
+			fld ST(1);
+			fst b;
+		}
+
+		if(b != 1.0f){
+			assert(0);
+		}
+		
+		return 0;
+	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
+}
--- a/run/a/asm_fninit_01.d	Tue May 09 04:18:47 2006 +0000
+++ b/run/a/asm_fninit_01.d	Wed May 10 05:30:02 2006 +0000
@@ -2,13 +2,18 @@
 // $Date$
 // $Author$
 
-// __DSTRESS_DFLAGS__ addon/cpuinfo.d
+module dstress.run.a.asm_fninit_01;
 
-module dstress.run.a.asm_fninit_01;
-import addon.cpuinfo;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
 
-int main(){
-	version(D_InlineAsm){
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
 		haveFPU!()();
 		ushort controll, status;
 		
@@ -18,12 +23,17 @@
 			fstsw status;
 		}
 		
-		assert(controll == 0x037F);
-		assert(status == 0);
+		if(controll != 0x037F){
+			assert(0);
+		}
+		if(status != 0){
+			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);
+}