changeset 1083:8d76f113a70c

fPIC fixes
author thomask
date Wed, 12 Jul 2006 14:03:00 +0000
parents 36aa57f9a4b6
children 91ff3e405be5
files run/a/asm_cmpiss_01_A.d run/a/asm_cmpsd_01_B.d run/a/asm_cvtdq2pd_01_A.d run/a/asm_cvtdq2ps_01_A.d run/a/asm_cvtpd2dq_01_A.d run/a/asm_cvtpd2pi_01_A.d run/a/asm_cvtpi2pd_01_A.d run/a/asm_cvtpi2ps_01_A.d run/a/asm_cvtps2pi_01_A.d run/a/asm_cvttpd2pi_01_A.d run/a/asm_cvttps2pi_01_A.d run/a/asm_divpd_01_A.d run/a/asm_divps_01_A.d run/a/asm_divsd_01_A.d run/a/asm_divss_01_A.d run/a/asm_haddpd_01_A.d run/a/asm_haddps_01_A.d run/a/asm_offset_01_A.d
diffstat 18 files changed, 281 insertions(+), 121 deletions(-) [+]
line wrap: on
line diff
--- a/run/a/asm_cmpiss_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cmpiss_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -4,18 +4,35 @@
 
 module dstress.run.a.asm_cmpiss_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static float[4] A = [1.0f, 2.0f, 3.0f, -8.0f];
-		static float[4] B = [0.0f, 4.0f, 3.0f, -4.0f];
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
+		float[] a = new float[4];
+		a[0] = 1.0f;
+		a[1] = 2.0f;
+		a[2] = 3.0f;
+		a[3] = -8.0f;
+		
+		float[] b = new float[4];
+		b[0] = 0.0f;
+		b[1] = 4.0f;
+		b[2] = 3.0f;
+		b[3] = -4.0f;
+
 		uint i;
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			movdqu XMM0, a;
+			movdqu XMM1, b;
 			comiss XMM0, XMM1;
+			emms;
 			mov EAX, 0;
-			jc done_1;
+			jnc done_1;
 			jz done_1;
 			jp done_1;
 			inc EAX;
@@ -28,9 +45,10 @@
 		}
 
 		asm{
-			movdqu XMM0, B;
-			movdqu XMM1, A;
+			movdqu XMM0, b;
+			movdqu XMM1, a;
 			comiss XMM0, XMM1;
+			emms;
 			mov EAX, 0;
 			jnc done_2;
 			jz done_2;
@@ -44,8 +62,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_cmpsd_01_B.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cmpsd_01_B.d	Wed Jul 12 14:03:00 2006 +0000
@@ -10,30 +10,38 @@
 	version = runTest;
 }
 
-int main(){
-	version(runTest){
-		static double[2] A = [1.0, 2.0];
-		static double B = 1.0;
-		ulong[2] c;
-		double[2] d;
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+		
+		double[] a = new double[2];
+		a[0] = 1.0;
+		a[1] = 2.0;
+		
+		double b = 1.0;
+		ulong[] c = new ulong[2];
+		double[] d = new double[2];
 
 		asm{
-			movupd XMM0, A;
-			cmpsd XMM0, B, 0;
+			movupd XMM0, a;
+			cmpsd XMM0, b, 0;
 			movdqu c, XMM0;
 			movupd d, XMM0;
+			emms;
 		}
 
 		if(c[0] != ulong.max){
 			assert(0);
 		}
-		if(d[1] != A[1]){
+		if(d[1] != a[1]){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_cvtdq2pd_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtdq2pd_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -4,15 +4,31 @@
 
 module dstress.run.a.asm_cvtdq2pd_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static int[4] A = [0, -1, 2, -3];
-		double[2] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
+		int[] a = new int[4];
+		a[0] = 0;
+		a[1] = -1;
+		a[2] = 2;
+		a[3] = -3;
+
+		double[] b = new double[2];
 
 		asm{
-			movdqu XMM0, A;
+			movdqu XMM0, a;
 			cvtdq2pd XMM1, XMM0;
 			movdqu b, XMM1;
+			emms;
 		}
 
 		if(b[0] != 0){
@@ -23,8 +39,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_cvtdq2ps_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtdq2ps_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -4,15 +4,31 @@
 
 module dstress.run.a.asm_cvtdq2ps_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static int[4] A = [0, -1, 2, -3];
-		float[4] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
+		int[] a = new int[4];
+		a[0] = 0;
+		a[1] = -1;
+		a[2] = 2;
+		a[3] = -3;
+		
+		float[] b = new float[4];
 
 		asm{
-			movdqu XMM0, A;
+			movdqu XMM0, a;
 			cvtdq2ps XMM1, XMM0;
 			movdqu b, XMM1;
+			emms;
 		}
 
 		if(b[0] != 0.0f){
@@ -29,8 +45,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_cvtpd2dq_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtpd2dq_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -4,15 +4,29 @@
 
 module dstress.run.a.asm_cvtpd2dq_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static double[2] A = [-2.0, 4.0];
-		int[4] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+
+		double[] a = new double[2];
+		a[0] = -2.0;
+		a[1] = 4.0;
+
+		int[] b = new int[4];
 
 		asm{
-			movdqu XMM0, A;
+			movdqu XMM0, a;
 			cvtpd2dq XMM1, XMM0;
 			movdqu b, XMM1;
+			emms;
 		}
 
 		if(b[0] != -2){
@@ -29,8 +43,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_cvtpd2pi_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtpd2pi_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,11 +17,13 @@
 		haveSSE2!()();
 		haveMMX!()();
 
-		static double[2] A = [-2.0, 4.0];
-		int[2] b;
+		double[] a = new double[2];
+		a[0] = -2.0;
+		a[1] = 4.0;
+		int[] b = new int[2];
 
 		asm{
-			movupd XMM0, A;
+			movupd XMM0, a;
 			cvtpd2pi MM0, XMM0;
 			movq b, MM0;
 			emms;
--- a/run/a/asm_cvtpi2pd_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtpi2pd_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,11 +17,14 @@
 		haveSSE2!();
 		haveMMX!();
 
-		static int[2] A = [-3, 2];
-		double[2] b;
+		int[] a = new int[2];
+		a[0] = -3;
+		a[1] = 2;
+		
+		double[] b = new double[2];
 
 		asm{
-			movq MM0, A;
+			movq MM0, a;
 			cvtpi2pd XMM0, MM0;
 			movupd b, XMM0;
 			emms;
--- a/run/a/asm_cvtpi2ps_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtpi2ps_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,13 +17,21 @@
 		haveSSE2!();
 		haveMMX!();
 
-		static int[2] A = [-3, 2];
-		static float[4] B = [10.1f, 20.2f, 30.3f, 40.4f];
-		float[4] c;
+		int[] a = new int[2];
+		a[0] = -3;
+		a[1] = 2;
+		
+		float[] b = new float[4];
+		b[0] = 10.1f;
+		b[1] = 20.2f;
+		b[2] = 30.3f;
+		b[3] = 40.4f;
+		
+		float[] c = new float[4];
 
 		asm{
-			movq MM0, A;
-			movups XMM0, B;
+			movq MM0, a;
+			movups XMM0, b;
 			cvtpi2ps XMM0, MM0;
 			movups c, XMM0;
 			emms;
@@ -45,10 +53,10 @@
 			assert(0);
 		}
 
-		if(c[2] != B[2]){
+		if(c[2] != b[2]){
 			assert(0);
 		}
-		if(c[3] != B[3]){
+		if(c[3] != b[3]){
 			assert(0);
 		}
 		return 0;
--- a/run/a/asm_cvtps2pi_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvtps2pi_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,11 +17,16 @@
 		haveSSE2!();
 		haveMMX!();
 
-		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
-		int[2] b;
+		float[] a = new float[4];
+		a[0] = 1.0f;
+		a[1] = 2.0f;
+		a[2] = 3.0f;
+		a[3] = 4.0f;
+		
+		int[] b = new int[2];
 
 		asm{
-			movups XMM0, A;
+			movups XMM0, a;
 			cvtps2pi MM0, XMM0;
 			movq b, MM0;
 			emms;
--- a/run/a/asm_cvttpd2pi_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvttpd2pi_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,11 +17,14 @@
 		haveSSE2!()();
 		haveMMX!()();
 
-		static double[2] A = [-2.0, 4.0];
-		int[2] b;
+		double[] a = new double[2];
+		a[0] = -2.0;
+		a[1] = 4.0;
+		
+		int[] b = new int[2];
 
 		asm{
-			movupd XMM0, A;
+			movupd XMM0, a;
 			cvttpd2pi MM0, XMM0;
 			movq b, MM0;
 			emms;
--- a/run/a/asm_cvttps2pi_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_cvttps2pi_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -17,11 +17,16 @@
 		haveSSE2!();
 		haveMMX!();
 
-		static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
-		int[2] b;
+		float[] a = new float[4];
+		a[0] = 1.0f;
+		a[1] = 2.0f;
+		a[2] = 3.0f;
+		a[3] = 4.0f;
+
+		int[] b = new int[2];
 
 		asm{
-			movups XMM0, A;
+			movups XMM0, a;
 			cvttps2pi MM0, XMM0;
 			movq b, MM0;
 			emms;
--- a/run/a/asm_divpd_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_divpd_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -10,15 +10,25 @@
 	version = runTest;
 }
 
-int main(){
-	version(runTest){
-		static double[2] A = [-16.0, 12.0];
-		static double[2] B = [2.0, 3.0];
-		double[2] c;
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE2!()();
+		
+		double[] a = new double[2];
+		a[0] = -16.0;
+		a[1] =  12.0;
+		
+		double[] b = new double[2];
+		b[0] = 2.0;
+		b[1] = 3.0;
+
+		double[] c = new double[2];
 
 		asm{
-			movupd XMM0, A;
-			movupd XMM1, B;
+			movupd XMM0, a;
+			movupd XMM1, b;
 			divpd XMM0, XMM1;
 			movupd c, XMM0;
 		}
@@ -40,8 +50,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_divps_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_divps_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -10,15 +10,27 @@
 	version = runTest;
 }
 
-int main(){
-	version(runTest){
-		static float[4] A = [-16.0f, 12.0f, 3.3f, 0.0f];
-		static float[4] B = [2.0f, 3.0f, 1.0f, 9.7f];
-		float[4] c;
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		float[] a = new float[4];
+		a[0] = -16.0f;
+		a[1] = 12.0f;
+		a[2] = 3.3f;
+		a[3] = 0.0f;
+
+		float[] b = new float[4];
+		b[0] = 2.0f;
+		b[1] = 3.0f;
+		b[2] = 1.0f;
+		b[3] = 9.7f;
+		
+		float[] c = new float[4];
 
 		asm{
-			movups XMM0, A;
-			movups XMM1, B;
+			movups XMM0, a;
+			movups XMM1, b;
 			divps XMM0, XMM1;
 			movups c, XMM0;
 		}
@@ -55,8 +67,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_divsd_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_divsd_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -10,17 +10,26 @@
 	version = runTest;
 }
 
-int main(){
-	version(runTest){
-		static double[2] A = [-16.0f, 12.0];
-		static double[2] B = [2.0f, 3.0f];
-		double[2] c;
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		double[] a = new double[2];
+		a[0] = -16.0f;
+		a[1] =  12.0;
+		
+		double[] b = new double[2];
+		b[0] = 2.0f;
+		b[1] = 3.0f;
+		
+		double[] c = new double[2];
 
 		asm{
-			movupd XMM0, A;
-			movupd XMM1, B;
+			movupd XMM0, a;
+			movupd XMM1, b;
 			divsd XMM0, XMM1;
 			movupd c, XMM0;
+			emms;
 		}
 
 		c[0] += 8.0f;
@@ -40,8 +49,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_divss_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_divss_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -10,15 +10,29 @@
 	version = runTest;
 }
 
-int main(){
-	version(runTest){
-		static float[4] A = [-16.0f, 12.0f, 3.3f, 9.0f];
-		static float[4] B = [2.0f, 3.0f, 1.0f, 2.0f];
-		float[4] c;
+version(runTest){
+	import addon.cpuinfo;
+	
+	int main(){
+		haveSSE!()();
+		
+		float[] a = new float[4];
+		a[0] = -16.0f;
+		a[1] = 12.0f;
+		a[2] = 3.3f;
+		a[3] = 9.0f;
+		
+		float[] b = new float[4];
+		b[0] = 2.0f;
+		b[1] = 3.0f;
+		b[2] = 1.0f;
+		b[3] = 2.0f;
+		
+		float[] c = new float[4];
 
 		asm{
-			movups XMM0, A;
-			movups XMM1, B;
+			movups XMM0, a;
+			movups XMM1, b;
 			divss XMM0, XMM1;
 			movups c, XMM0;
 		}
@@ -55,8 +69,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_haddpd_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_haddpd_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -16,13 +16,19 @@
 	int main(){
 		haveSSE3!()();
 
-		static double[2] A = [7.0, 11.0];
-		static double[2] B = [2.0, 3.0];
-		double[2] c;
+		double[] a = new double[2];
+		a[0] = 7.0;
+		a[1] = 11.0;
+		
+		double[] b = new double[2];
+		b[0] = 2.0;
+		b[1] = 3.0;
+		
+		double[] c = new double[2];
 
 		asm{
-			movupd XMM0, A;
-			movupd XMM1, B;
+			movupd XMM0, a;
+			movupd XMM1, b;
 			haddpd XMM0, XMM1;
 			movupd c, XMM0;
 		}
--- a/run/a/asm_haddps_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_haddps_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -16,15 +16,26 @@
 	int main(){
 		haveSSE3!()();
 
-		static float[4] A = [6.1f, 7.2f, 8.3f, 9.4f];
-		static float[4] B = [1.0f, 2.0f, 3.0f, 4.0f];
-		float[4] c;
+		float[] a = new float[4];
+		a[0] = 6.1f;
+		a[1] = 7.2f;
+		a[2] = 8.3f;
+		a[3] = 9.4f;
+		
+		float[] b = new float[4];
+		b[0] = 1.0f;
+		b[1] = 2.0f;
+		b[2] = 3.0f;
+		b[3] = 4.0f;
+
+		float[] c = new float[4];
 
 		asm{
-			movups XMM0, A;
-			movups XMM1, B;
+			movups XMM0, a;
+			movups XMM1, b;
 			haddps XMM0, XMM1;
 			movups c, XMM0;
+			emms;
 		}
 
 		c[0] -= 13.3f;
--- a/run/a/asm_offset_01_A.d	Wed Jul 12 14:02:36 2006 +0000
+++ b/run/a/asm_offset_01_A.d	Wed Jul 12 14:03:00 2006 +0000
@@ -23,7 +23,7 @@
 
 		static if(size_t.sizeof == 4){
 			asm{
-				mov EAX, offset b;
+				mov EAX, offsetof b;
 				mov y, EAX;
 			}
 		}else{