changeset 1042:f34b7d4a2db7

added DMD-0.160 results
author thomask
date Wed, 07 Jun 2006 09:28:21 +0000
parents eb555fb95efc
children a83d3bf9bde8
files addon/cpuinfo.d log.d run/a/asm_movdq2q_01.d run/a/asm_movq_02_A.d run/a/asm_movq_02_B.d run/a/asm_movq_02_C.d run/a/asm_movq_02_D.d run/a/asm_movq_02_E.d run/a/asm_movq_02_F.d run/a/asm_movq_02_G.d run/a/asm_movq_02_H.d run/a/asm_movq_02_I.d run/a/asm_movq_02_J.d run/a/asm_movq_02_K.d run/a/asm_movq_02_O.d run/a/asm_packssdw_01_A.d run/a/asm_pavgb_01_A.d run/a/asm_pavgusb_01_A.d run/a/asm_pavgusb_01_B.d run/a/asm_pf2id_01_A.d run/a/asm_pf2id_01_B.d run/a/asm_pfacc_01_A.d run/a/asm_pfacc_01_B.d run/a/asm_pfadd_01_A.d run/a/asm_pfadd_01_B.d run/a/asm_pfcmpeq_01_A.d run/a/asm_pfcmpeq_01_B.d run/a/asm_pfcmpge_01_A.d run/a/asm_pfcmpge_01_B.d run/a/asm_pfcmpgt_01_A.d run/a/asm_pfcmpgt_01_B.d run/a/asm_pfmax_01_A.d run/a/asm_pfmax_01_B.d run/a/asm_pfmin_01_A.d run/a/asm_pfmin_01_B.d run/a/asm_pfmul_01_A.d run/a/asm_pfmul_01_B.d run/a/asm_pfrcp_01_A.d run/a/asm_pfrcp_01_B.d run/a/asm_pfrcpit1_01_A.d run/a/asm_pfrcpit1_01_B.d run/a/asm_pfrcpit2_01_A.d run/a/asm_pfrcpit2_01_B.d run/a/asm_pfrsqrt_01_A.d run/a/asm_pfrsqrt_01_B.d run/a/asm_pfrsqrtit1_01_A.d run/a/asm_pfrsqrtit1_01_B.d run/a/asm_pfsub_01_A.d run/a/asm_pfsub_01_B.d run/a/asm_pfsubr_01_A.d run/a/asm_pfsubr_01_B.d run/a/asm_pi2fd_01_A.d run/a/asm_pi2fd_01_B.d run/a/asm_pmulhuw_01_A.d run/a/asm_pmulhw_01_A.d run/a/asm_pmullw_01_A.d run/a/asm_pmuludq_01_A.d run/a/asm_pslldq_01_A.d run/a/asm_psrldq_01_A.d run/a/asm_psubusb_01_A.d run/a/asm_psubusw_01_A.d run/a/asm_punpcklwd_01_A.d
diffstat 62 files changed, 601 insertions(+), 223 deletions(-) [+]
line wrap: on
line diff
--- a/addon/cpuinfo.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/addon/cpuinfo.d	Wed Jun 07 09:28:21 2006 +0000
@@ -28,6 +28,25 @@
 	const bool haveX86InlineAsm = false;
 }
 
+template have3DNow(){
+	void have3DNow(){
+		uint a = 0;
+
+		version(haveX86InlineAsm){
+			asm{
+				mov EAX, 0x8000_0001;
+				cpuid;
+				mov a, EDX;
+			}
+		}else{
+			pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+		}
+
+		if(!((a >> 30) & 1)){
+			throw new Exception("DSTRESS{XFAIL}: no 3DNow! support present");
+		}
+	}
+}
 
 template haveCMOV(){
 	void haveCMOV(){
--- a/log.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/log.d	Wed Jun 07 09:28:21 2006 +0000
@@ -547,7 +547,7 @@
 			char[] name = toupper(cleanName);
 		
 			stream.writeLine("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
-			stream.writeLine("<html xmlns='http://www.w3.org/1999/xhtml'>");
+			stream.writeLine("<html xmlns='http://www.w3.org/1999/xhtml' lang='en' xml:lang='en'>");
 
 			stream.writeLine("<head><title>DStress - Torture: "~name~"</title><link rel='stylesheet' type='text/css' href='formate.css' /><meta name='author' content='Thomas K&#252;hne' /><meta name='date' content='" ~ dateString() ~ "' /></head>");
 			stream.writeLine("<body><center><h1>DStress - Torture: "~name~"</h1></center><center><small>by Thomas K&#252;hne &lt;thomas-at-kuehne.cn&gt;</small></center>");
@@ -789,15 +789,35 @@
 				versionHeader ~= "<th><a href='./" ~ cleanFileName(l.id) ~ ".html'>"~replace(name, "_", " ")~"</a></th>";
 			}
 			versionHeader ~= "</tr>";
-			stream.writeLine("\t"~versionHeader);
 		}
 		
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.PASS)~"'><th>PASS</th>" ~ streamLine(stats[Result.PASS >> 2])~"</tr>");
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.XFAIL)~"'><th>XFAIL</th>" ~ streamLine(stats[Result.XFAIL >> 2])~"</tr>");
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.XPASS)~"'><th>XPASS</th>" ~ streamLine(stats[Result.XPASS >> 2])~"</tr>");
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.FAIL)~"'><th>FAIL</th>" ~ streamLine(stats[Result.FAIL >> 2])~"</tr>");
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.ERROR)~"'><th>ERROR</th>" ~ streamLine(stats[Result.ERROR >> 2])~"</tr>");
-		stream.writeLine("\t<tr class='" ~ cast(char)('A'+Result.UNTESTED)~"'><th>untested</th>" ~ streamLine(stats[Result.UNTESTED >> 2])~"</tr>");
+		stream.writeLine("\t<tr><td>&#160;</td>"
+			"<th class='" ~ cast(char)('A'+Result.PASS)~"'>PASS</th>"
+			"<th class='" ~ cast(char)('A'+Result.XFAIL)~"'>XFAIL</th>"
+			"<th class='" ~ cast(char)('A'+Result.XPASS)~"'>XPASS</th>"
+			"<th class='" ~ cast(char)('A'+Result.FAIL)~"'>FAIL</th>"
+			"<th class='" ~ cast(char)('A'+Result.ERROR)~"'>ERROR</th>"
+			"<th class='" ~ cast(char)('A'+Result.UNTESTED)~"'>UNTESTED</th></tr>");
+		foreach(size_t j, Log l; log){
+			char[] row ="\t<tr>";
+			char[] name = l.id;
+			int i = rfind(name, "/");
+			if(i > -1){
+				name = name[i+1 .. $];
+			}
+			i = rfind(name, ".log");
+			if(i + ".log".length == name.length){
+				name = name[0 .. i];
+			}
+			row ~= "<th><a href='./" ~ cleanFileName(l.id) ~ ".html'>"~replace(name, "_", " ")~"</a></th>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.PASS)~"'>" ~ std.string.toString(stats[Result.PASS >> 2][j]) ~"</td>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.XFAIL)~"'>" ~ std.string.toString(stats[Result.XFAIL >> 2][j]) ~"</td>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.XPASS)~"'>" ~ std.string.toString(stats[Result.XPASS >> 2][j]) ~"</td>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.FAIL)~"'>" ~ std.string.toString(stats[Result.FAIL >> 2][j]) ~"</td>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.ERROR)~"'>" ~ std.string.toString(stats[Result.ERROR >> 2][j]) ~"</td>";
+			row ~= "<td class='" ~ cast(char)('A'+Result.UNTESTED)~"'>" ~ std.string.toString(stats[Result.UNTESTED >> 2][j]) ~"</td>";
+			stream.writeLine(row ~ "</tr>");
+		}
 		stream.writeLine("</table>");
 
 		stream.writeLine("<h2><a name='details' id='details'></a>Details</h2>");
--- a/run/a/asm_movdq2q_01.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movdq2q_01.d	Wed Jun 07 09:28:21 2006 +0000
@@ -22,7 +22,7 @@
 		asm{
 			movupd XMM0, A;
 			movdq2q MM0, XMM0;
-			movq b, XMM0;
+			movq b, MM0;
 		}
 		
 		if(b != A[1]){
--- a/run/a/asm_movq_02_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_C.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_C.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_D.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_D.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_E.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_E.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_F.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_F.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_G.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_G.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_H.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_H.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_I.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_I.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_J.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_J.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,7 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
-			finit;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_K.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_K.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,7 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
-			finit;
+			emms;
 		}
 		
 		for(size_t i = 0; i < A.length; i++){
--- a/run/a/asm_movq_02_O.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_movq_02_O.d	Wed Jun 07 09:28:21 2006 +0000
@@ -26,6 +26,7 @@
 		asm{
 			movq MM0, A;
 			movq b, MM0;
+			emms;
 		}
 
 		if(A != 0x12_34_56_78_9A_BC_DE_F0){
--- a/run/a/asm_packssdw_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_packssdw_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -15,6 +15,7 @@
 	
 	int main(){
 		haveSSE2!()();
+		haveMMX!()();
 
 		static int[4] A = [1, -2, 3, -4];
 		static int[4] B = [5, -6, 7, -8];
--- a/run/a/asm_pavgb_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pavgb_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -16,17 +16,17 @@
 	int main(){
 		haveSSE!()();
 
-		const byte[8] A = [1, -2, 3, 4, 5, 6, 7, 8];
-		const byte[8] B = [5, 2, -1, -8, 15, 4, 1, 4];
-		const byte[8] C = [3, 0, 1, -2, 10, 5, 4, 6];
+		const byte[8] A = [1, 2, 3, 4, 5, 6, 7, 8];
+		const byte[8] B = [5, 2, 1, 8, 15, 4, 1, 4];
+		const byte[8] C = [3, 2, 2, 6, 10, 5, 4, 6];
 		byte[8] d;
 
 		asm{
-			emms;
 			movq MM0, A;
 			movq MM1, B;
 			pavgb MM0, MM1;
 			movq d, MM0;
+			emms;
 		}
 
 		for(size_t i = 0; i < C.length; i++){
--- a/run/a/asm_pavgusb_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pavgusb_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -22,10 +22,10 @@
 		ubyte[8] d;
 
 		asm{
-			emms;
 			movq MM0, A;
 			pavgusb MM0, B;
 			movq d, MM0;
+			emms;
 		}
 
 		for(size_t i = 0; i < C.length; i++){
--- a/run/a/asm_pavgusb_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pavgusb_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pavgusb_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(){
+		have3DNow!()();
+		
 		const ubyte[8] A = [1, 2, 3, 4, 5, 6, 7, 8];
 		const ubyte[8] B = [5, 2, 1, 8, 15, 4, 1, 4];
 		const ubyte[8] C = [3, 2, 2, 6, 10, 5, 4, 6];
@@ -17,6 +27,7 @@
 			movq MM1, B
 			pavgusb MM0, MM1;
 			movq d, MM0;
+			emms;
 		}
 
 		for(size_t i = 0; i < C.length; i++){
@@ -26,8 +37,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pf2id_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pf2id_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,14 +4,25 @@
 
 module dstress.run.a.asm_pf2id_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(){
+		have3DNow!()();
+
 		const float[2] A = [123.0f, -456.0f];
 		int[2] b;
 
 		asm{
 			pf2id MM0, A;
 			movq b, MM0;
+			emms;
 		}
 
 		if(b[0] != A[0]){
@@ -22,8 +33,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pf2id_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pf2id_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pf2id_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(){
+		have3DNow!()();
+		
 		const float[2] A = [123.0f, -456.0f];
 		int[2] b;
 
@@ -13,6 +23,7 @@
 			movq MM1, A;
 			pf2id MM0, MM1;
 			movq b, MM0;
+			emms;
 		}
 
 		if(b[0] != A[0]){
@@ -23,8 +34,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfacc_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfacc_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -14,6 +14,7 @@
 			movq MM0, A;
 			pfacc MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -333.0f){
--- a/run/a/asm_pfacc_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfacc_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -15,6 +15,7 @@
 			movq MM1, B;
 			pfacc MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -333.0f){
--- a/run/a/asm_pfadd_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfadd_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfadd_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(){
+		have3DNow!()();
+		
 		const float[2] A = [123.0f, -456.0f];
 		const float[2] B = [12.0f, 17.0f];
 		float[2] c;
@@ -14,18 +24,19 @@
 			movq MM0, A;
 			pfadd MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 135.0f){
 			assert(0);
 		}
-		if(c[1] != -449.0f){
+		if(c[1] != -439.0f){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfadd_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfadd_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfadd_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(){
+		have3DNow!()();
+		
 		const float[2] A = [123.0f, -456.0f];
 		const float[2] B = [12.0f, 17.0f];
 		float[2] c;
@@ -15,18 +25,19 @@
 			movq MM1, B;
 			pfadd MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 135.0f){
 			assert(0);
 		}
-		if(c[1] != -449.0f){
+		if(c[1] != -439.0f){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfcmpeq_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpeq_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -14,6 +14,7 @@
 			movq MM0, A;
 			pfcmpeq MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != uint.max){
--- a/run/a/asm_pfcmpeq_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpeq_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfcmpeq_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(){
+		have3DNow!()();
+		
 		const float[2] A = [123.0f, -456.0f];
 		const float[2] B = [123.0f, 456.0f];
 		uint[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B
 			pfcmpeq MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != uint.max){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfcmpge_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpge_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfcmpge_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(){
+		have3DNow!()();
+		
 		const float[2] A = [123.0f, 457.0f];
 		const float[2] B = [124.0f, 456.0f];
 		uint[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfcmpge MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 0){
@@ -24,8 +35,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfcmpge_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpge_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfcmpge_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(){
+		have3DNow!()();
+
 		const float[2] A = [123.0f, 458.0f];
 		const float[2] B = [124.0f, 456.0f];
 		uint[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B
 			pfcmpge MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 0){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfcmpgt_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,19 +4,31 @@
 
 module dstress.run.a.asm_pfcmpgt_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(){
+		haveMMX!()();
+		have3DNow!()();
+
 		const float[2] A = [123.0f, 457.0f];
-		const float[2] B = [123.0f, 456.0f];
+		const float[2] B = [124.0f, 456.0f];
 		uint[2] c;
 
 		asm{
 			movq MM0, A;
 			pfcmpgt MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
-		if(c[0] != 0xFFFF_FFFF){
+		if(c[0] != 0){
 			assert(0);
 		}
 		if(c[1] != 0xFFFF_FFFF){
@@ -24,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfcmpgt_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,10 +4,21 @@
 
 module dstress.run.a.asm_pfcmpgt_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(){
+		haveMMX!()();
+		have3DNow!()();
+
 		const float[2] A = [123.0f, 457.0f];
-		const float[2] B = [123.0f, 456.0f];
+		const float[2] B = [124.0f, 456.0f];
 		uint[2] c;
 
 		asm{
@@ -15,9 +26,10 @@
 			movq MM1, B;
 			pfcmpgt MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
-		if(c[0] != 0xFFFF_FFFF){
+		if(c[0] != 0){
 			assert(0);
 		}
 		if(c[1] != 0xFFFF_FFFF){
@@ -25,8 +37,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmax_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmax_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmax_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(){
+		have3DNow!()();
+		
 		const float[2] A = [-123.0f, 457.0f];
 		const float[2] B = [123.0f, 456.0f];
 		float[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfmax MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != B[0]){
@@ -24,8 +35,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmax_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmax_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmax_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(){
+		have3DNow!()();
+		
 		const float[2] A = [-123.0f, 457.0f];
 		const float[2] B = [123.0f, 456.0f];
 		float[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B;
 			pfmax MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != B[0]){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmin_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmin_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmin_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(){
+		have3DNow!()();
+
 		const float[2] A = [-123.0f, 457.0f];
 		const float[2] B = [123.0f, 456.0f];
 		float[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfmin MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != A[0]){
@@ -24,8 +35,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmin_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmin_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmin_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(){
+		have3DNow!()();
+
 		const float[2] A = [-123.0f, 457.0f];
 		const float[2] B = [123.0f, 456.0f];
 		float[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B;
 			pfmin MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != A[0]){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmul_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmul_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmul_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(){
+		have3DNow!()();
+		
 		const float[2] A = [-3.0f, 7.0f];
 		const float[2] B = [2.0f, 8.0f];
 		float[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfmul MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -6.0f){
@@ -24,8 +35,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfmul_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfmul_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfmul_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(){
+		have3DNow!()();
+		
 		const float[2] A = [-3.0f, 7.0f];
 		const float[2] B = [2.0f, 8.0f];
 		float[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B;
 			pfmul MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -6.0f){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrcp_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcp_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -6,14 +6,14 @@
 
 int main(){
 	version(D_InlineAsm_X86){
-		const float[2] A = [2.0f, -0.5f];
+		const float[2] A = [2.0f, 3.3f];
 		float[2] c;
 
 		asm{
 			pfrcp MM0, A;
 			movq c, MM0;
+			emms;
 		}
-
 		c[0] -= 0.5f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
@@ -22,7 +22,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] -= 0.5f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
--- a/run/a/asm_pfrcp_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcp_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -6,13 +6,14 @@
 
 int main(){
 	version(D_InlineAsm_X86){
-		const float[2] A = [2.0f, -0.5f];
+		const float[2] A = [2.0f, 3.3f];
 		float[2] c;
 
 		asm{
 			movq MM1, A;
 			pfrcp MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		c[0] -= 0.5f;
@@ -23,7 +24,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] -= 0.5f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
--- a/run/a/asm_pfrcpit1_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcpit1_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,19 @@
 
 module dstress.run.a.asm_pfrcpit1_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(){
+		haveMMX!()();
+		have3DNow!()();
+
 		const float[2] A = [2.0f, -0.5f];
 		float[2] c;
 
@@ -13,9 +24,11 @@
 			pfrcp MM0, A;
 			pfrcpit1 MM0, A;
 			movq c, MM0;
+			emms;
 		}
+printf("%f %f\n", c[0], c[1]);
 
-		c[0] -= 0.5f;
+		c[0] -= 1.007812f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -23,7 +36,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] -= 1.007812;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
@@ -32,8 +45,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrcpit1_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcpit1_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,19 @@
 
 module dstress.run.a.asm_pfrcpit1_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(){
+		haveMMX!()();
+		have3DNow!()();
+
 		const float[2] A = [2.0f, -0.5f];
 		float[2] c;
 
@@ -14,9 +25,10 @@
 			pfrcp MM0, MM1;
 			pfrcpit1 MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
-		c[0] -= 0.5f;
+		c[0] -= 1.007812f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -24,7 +36,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] += 1.007812f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -33,8 +45,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrcpit2_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcpit2_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfrcpit2_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(){
+		have3DNow!()();
+		
 		const float[2] A = [2.0f, -0.5f];
 		float[2] c;
 
@@ -14,9 +24,10 @@
 			pfrcpit1 MM0, A;
 			pfrcpit2 MM0, A;
 			movq c, MM0;
+			emms;
 		}
 
-		c[0] -= 0.5f;
+		c[0] -= 2.000061f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -24,7 +35,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] += 0.500015f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
@@ -33,8 +44,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrcpit2_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrcpit2_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfrcpit2_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(){
+		have3DNow!()();
+		
 		const float[2] A = [2.0f, -0.5f];
 		float[2] c;
 
@@ -15,9 +25,10 @@
 			pfrcpit1 MM0, MM1;
 			pfrcpit2 MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
-		c[0] -= 0.5f;
+		c[0] -= 2.000061f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -25,7 +36,7 @@
 			assert(0);
 		}
 		
-		c[1] += 2.0f;
+		c[1] += 0.500015f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
@@ -34,8 +45,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrsqrt_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrsqrt_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -6,27 +6,28 @@
 
 int main(){
 	version(D_InlineAsm_X86){
-		const float[2] A = [4.0f, 0.5f];
+		const float[2] A = [4.0f, 3.3f];
 		float[2] b;
 
 		asm{
 			pfrsqrt MM0, A;
 			movq b, MM0;
+			emms;
 		}
 
-		c[0] -= 0.5f;
-		if(c[0] < 0.0f){
-			c[0] = -c[0];
+		b[0] -= 0.5f;
+		if(b[0] < 0.0f){
+			b[0] = -b[0];
 		}
-		if(c[0] > float.epsilon * (1 << 11)){
+		if(b[0] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 		
-		c[1] -= 4.0f;
-		if(c[1] < 0.0f){
-			c[1] = -c[1];
+		b[1] -= 0.5f;
+		if(b[1] < 0.0f){
+			b[1] = -b[1];
 		}
-		if(c[1] > float.epsilon * (1 << 11)){
+		if(b[1] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 
--- a/run/a/asm_pfrsqrt_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrsqrt_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfrsqrt_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(){
+		have3DNow!()();
+
 		const float[2] A = [4.0f, 0.5f];
 		float[2] c;
 
@@ -13,6 +23,7 @@
 			movq MM1, A;
 			pfrsqrt MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		c[0] -= 0.5f;
@@ -32,8 +43,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrsqrtit1_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrsqrtit1_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfrsqrtit1_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(){
+		have3DNow!()();
+		
 		const float[2] A = [4.0f, 0.5f];
 		float[2] c;
 
@@ -13,9 +23,9 @@
 			pfrsqrt MM0, A;
 			pfrsqit1 MM0, A;
 			movq c, MM0;
+			emms;
 		}
-
-		c[0] -= 0.5f;
+		c[0] -= 1.001953f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -23,7 +33,7 @@
 			assert(0);
 		}
 		
-		c[1] -= 4.0f;
+		c[1] -= 1.001953f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
@@ -32,8 +42,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrsqrtit1_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfrsqrtit1_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfrsqrtit1_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(){
+		have3DNow!()();
+		
 		const float[2] A = [4.0f, 0.5f];
 		float[2] c;
 
@@ -14,9 +24,10 @@
 			pfrsqrt MM0, MM1;
 			pfrsqit1 MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
-		c[0] -= 0.5f;
+		c[0] -= 1.001953f;
 		if(c[0] < 0.0f){
 			c[0] = -c[0];
 		}
@@ -24,7 +35,7 @@
 			assert(0);
 		}
 		
-		c[1] -= 4.0f;
+		c[1] -= 1.001953f;
 		if(c[1] < 0.0f){
 			c[1] = -c[1];
 		}
@@ -33,8 +44,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfsub_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfsub_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfsub_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(){
+		have3DNow!()();
+		
 		const float[2] A = [6.0f, 2.0f];
 		const float[2] B = [2.0f, -1.0f];
 		float[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B;
 			pfsub MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 4.0f){
@@ -26,8 +37,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfsub_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfsub_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfsub_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(){
+		have3DNow!()();
+
 		const float[2] A = [6.0f, 2.0f];
 		const float[2] B = [2.0f, -1.0f];
 		float[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfsub MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != 4.0f){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfsubr_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfsubr_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfsubr_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(){
+		have3DNow!()();
+		
 		const float[2] A = [6.0f, 2.0f];
 		const float[2] B = [2.0f, -1.0f];
 		float[2] c;
@@ -15,6 +25,7 @@
 			movq MM1, B;
 			pfsubr MM0, MM1;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -4.0f){
@@ -26,8 +37,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfsubr_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pfsubr_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pfsubr_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(){
+		have3DNow!()();
+		
 		const float[2] A = [6.0f, 2.0f];
 		const float[2] B = [2.0f, -1.0f];
 		float[2] c;
@@ -14,6 +24,7 @@
 			movq MM0, A;
 			pfsubr MM0, B;
 			movq c, MM0;
+			emms;
 		}
 
 		if(c[0] != -4.0f){
@@ -25,8 +36,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pi2fd_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pi2fd_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,8 +4,18 @@
 
 module dstress.run.a.asm_pi2fd_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(){
+		have3DNow!()();
+		
 		const int[2] A = [6, 2];
 		float[2] b;
 
@@ -13,6 +23,7 @@
 			movq MM1, A;
 			pi2fd MM0, MM1;
 			movq b, MM0;
+			emms;
 		}
 
 		if(b[0] != 6.0f){
@@ -24,8 +35,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pi2fd_01_B.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pi2fd_01_B.d	Wed Jun 07 09:28:21 2006 +0000
@@ -4,14 +4,25 @@
 
 module dstress.run.a.asm_pi2fd_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(){
+		have3DNow!()();
+		
 		const int[2] A = [6, 2];
 		float[2] b;
 
 		asm{
 			pi2fd MM0, A;
 			movq b, MM0;
+			emms;
 		}
 
 		if(b[0] != 6.0f){
@@ -23,8 +34,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pmulhuw_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pmulhuw_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -24,7 +24,7 @@
 		asm{
 			movdqu XMM0, A;
 			movdqu XMM1, B;
-			pmulhuw, XMM0, XMM1;
+			pmulhuw XMM0, XMM1;
 			movdqu c, XMM0;
 		}
 
--- a/run/a/asm_pmulhw_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pmulhw_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -17,14 +17,14 @@
 		haveSSE2!()();
 
 		const short[8] A = [-1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, -16];
-		const short[8] B = [2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0xABCD];
+		const short[8] B = [2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0x6BCD];
 
 		ushort[8] c;
 
 		asm{
 			movdqu XMM0, A;
 			movdqu XMM1, B;
-			pmulhw, XMM0, XMM1;
+			pmulhw XMM0, XMM1;
 			movdqu c, XMM0;
 		}
 
@@ -49,7 +49,7 @@
 		if(c[6] != 0){
 			assert(0);
 		}
-		if(c[7] != 0xFFF5){
+		if(c[7] != 0xFFF9){
 			assert(0);
 		}
 
--- a/run/a/asm_pmullw_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pmullw_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -24,7 +24,7 @@
 		asm{
 			movdqu XMM0, A;
 			movdqu XMM1, B;
-			pmullw, XMM0, XMM1;
+			pmullw XMM0, XMM1;
 			movdqu c, XMM0;
 		}
 
--- a/run/a/asm_pmuludq_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pmuludq_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -24,7 +24,7 @@
 		asm{
 			movdqu XMM0, A;
 			movdqu XMM1, B;
-			pmuludq, XMM0, XMM1;
+			pmuludq XMM0, XMM1;
 			movdqu c, XMM0;
 		}
 
--- a/run/a/asm_pslldq_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_pslldq_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -9,7 +9,7 @@
 }else version(D_InlineAsm_X86_64){
 	version = runTest;
 }
-
+import std.stdio;
 version(runTest){
 	import addon.cpuinfo;
 
@@ -17,20 +17,18 @@
 		haveSSE2!()();
 
 		const ulong[2] A = [(1 << 63) | 1, (1 << 63) | 3];
-		const long[2] B = [8, 1];
 		ulong[2] c;
 
 		asm{
 			movdqu XMM0, A;
-			movdqu XMM1, B;
-			pslldq XMM0, XMM1;
+			pslldq XMM0, 1;
 			movdqu c, XMM0;
 		}
 
-		if(c[0] != 3){
+		if(c[0] != 0x100){
 			assert(0);
 		}
-		if(c[1] != 6){
+		if(c[1] != 0x300){
 			assert(0);
 		}
 
--- a/run/a/asm_psrldq_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_psrldq_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -16,21 +16,19 @@
 	int main(){
 		haveSSE2!()();
 
-		const ulong[2] A = [(1 << 63) | 1, (1 << 63) | 3];
-		const long[2] B = [8, 1];
+		const ulong[2] A = [0x1234_5678_90AB_CDEF, 0x0102_0304_0506_0708];
 		ulong[2] c;
 
 		asm{
 			movdqu XMM0, A;
-			movdqu XMM1, B;
-			psrldq XMM0, XMM1;
+			psrldq XMM0, 1;
 			movdqu c, XMM0;
 		}
 
-		if(c[0] != (1 << 62)){
+		if(c[0] != 0x0012_3456_7890_ABCD){
 			assert(0);
 		}
-		if(c[1] != (3 << 62) | 1){
+		if(c[1] != 0x0001_0203_0405_0607){
 			assert(0);
 		}
 
--- a/run/a/asm_psubusb_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_psubusb_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -28,7 +28,7 @@
 			movdqu c, XMM0;
 		}
 
-		foreach(byte x; c[0 .. c.length -1]){
+		foreach(ubyte x; c[0 .. c.length -1]){
 			if(x != 1){
 				assert(0);
 			}
@@ -37,6 +37,8 @@
 		if(c[c.length - 1] != 0){
 			assert(0);
 		}
+
+		return 0;
 	}
 }else{
 	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
--- a/run/a/asm_psubusw_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_psubusw_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -28,7 +28,7 @@
 			movdqu c, XMM0;
 		}
 
-		foreach(short x; c[0 .. c.length -1]){
+		foreach(ushort x; c[0 .. c.length -1]){
 			if(x != 1){
 				assert(0);
 			}
@@ -37,6 +37,8 @@
 		if(c[c.length - 1] != 0){
 			assert(0);
 		}
+
+		return 0;
 	}
 }else{
 	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
--- a/run/a/asm_punpcklwd_01_A.d	Sun Jun 04 06:28:03 2006 +0000
+++ b/run/a/asm_punpcklwd_01_A.d	Wed Jun 07 09:28:21 2006 +0000
@@ -16,7 +16,7 @@
 	int main(){
 		haveSSE2!()();
 
-		const short[8] A = [4, 5, 6, 7, 0, 1, 2, 3, 4];
+		const short[8] A = [4, 5, 6, 7, 0, 1, 2, 3];
 		const short[8] B = [-4, -5, -6, -7, 0, -1, -2, -3];
 
 		short[8] c;
@@ -28,28 +28,28 @@
 			movdqu c, XMM0;
 		}
 
-		if(c[0] != 0){
+		if(c[0] != 4){
 			assert(0);
 		}
-		if(c[1] != 0){
+		if(c[1] != -4){
 			assert(0);
 		}
-		if(c[2] != -1){
+		if(c[2] != 5){
 			assert(0);
 		}
-		if(c[3] != 1){
+		if(c[3] != -5){
 			assert(0);
 		}
-		if(c[4] != -2){
+		if(c[4] != 6){
 			assert(0);
 		}
-		if(c[5] != 2){
+		if(c[5] != -6){
 			assert(0);
 		}
-		if(c[6] != -3){
+		if(c[6] != 7){
 			assert(0);
 		}
-		if(c[7] != 3){
+		if(c[7] != -7){
 			assert(0);
 		}