changeset 983:642e3fea11a9

extended SSE tests - most of them are broken, see http://d.puremagic.com/bugzilla/show_bug.cgi?id=115
author thomask
date Mon, 01 May 2006 11:18:12 +0000
parents 825b27e25a95
children 9acd7becc753
files run/a/asm_movmskpd_01_A.d run/a/asm_movmskps_01_A.d run/a/asm_movntpd_01_A.d run/a/asm_movntps_01_A.d run/a/asm_movshdup_01_A.d run/a/asm_movsldup_01_A.d run/a/asm_movss_01.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_movupd_01_A.d run/a/asm_movupd_01_B.d run/a/asm_movupd_01_C.d run/a/asm_movups_01_A.d run/a/asm_movups_01_B.d run/a/asm_movups_01_C.d run/a/asm_mulpd_01_A.d run/a/asm_mulpd_01_B.d run/a/asm_mulps_01_A.d run/a/asm_mulps_01_B.d run/a/asm_mulss_01_A.d run/a/asm_mulss_01_B.d
diffstat 22 files changed, 704 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movmskpd_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,28 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movmskpd_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] a = [1.0, -1.0];
+		uint b;
+		
+		asm{
+			movdqu XMM0, a;
+			mov EAX, 0xFFFF_FFFF;
+			movmskpd EAX, XMM0;
+			mov b, EAX;
+		}
+		
+		if(b != 0xFFFF_FF02){
+			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_movmskps_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,28 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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];
+		uint b;
+		
+		asm{
+			movdqu XMM0, a;
+			mov EAX, 0xFFFF_FFFF;
+			movmskps EAX, XMM0;
+			mov b, EAX;
+		}
+		
+		if(b != 0xFFFF_FF06){
+			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_movntpd_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,29 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movntpd_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] a = [1.0, -1.0];
+		double[2] b;
+		
+		asm{
+			movdqu XMM0, a;
+			movntpd b, XMM0;
+		}
+		
+		if(a[0] != b[0]){
+			assert(0);
+		}
+		if(a[1] != b[1]){
+			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_movntps_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,35 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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];
+		float[4] b;
+		
+		asm{
+			movdqu XMM0, a;
+			movntps b, XMM0;
+		}
+		
+		if(a[0] != b[0]){
+			assert(0);
+		}
+		if(a[1] != b[1]){
+			assert(0);
+		}
+		if(a[2] != b[2]){
+			assert(0);
+		}
+		if(a[3] != b[3]){
+			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_movshdup_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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;
+		
+		asm{
+			movdqu XMM0, a;
+			movshdup XMM1, XMM0;
+			movdqu b, XMM1;
+		}
+		
+		if(a[1] != b[0]){
+			assert(0);
+		}
+		if(a[1] != b[1]){
+			assert(0);
+		}
+		if(a[3] != b[2]){
+			assert(0);
+		}
+		if(a[3] != b[3]){
+			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_movsldup_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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];
+		double[4] b;
+		
+		asm{
+			movdqu XMM0, a;
+			movsldup XMM1, XMM0;
+			movdqu b, XMM1;
+		}
+		
+		if(a[0] != b[0]){
+			assert(0);
+		}
+		if(a[0] != b[1]){
+			assert(0);
+		}
+		if(a[2] != b[2]){
+			assert(0);
+		}
+		if(a[2] != b[3]){
+			assert(0);
+		}
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- a/run/a/asm_movss_01.d	Mon May 01 09:06:06 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-// $HeadURL$
-// $Date$
-// $Author$
-
-module dstress.run.a.asm_movss_01;
-
-int main(){
-	version(D_InlineAsm_X86){
-		
-		float a = -12.1L;
-		float b = 2.8L;
-		
-		asm{
-			movss XMM0, a;
-			movss 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_movss_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,37 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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;
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			movss XMM0, B;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != B){
+			assert(0);
+		}
+		if(c[1] != 0.0){
+			assert(0);
+		}
+		if(c[2] != 0.0){
+			assert(0);
+		}
+		if(c[3] != 0.0){
+			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_movss_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,38 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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];
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			movdqu XMM1, B;
+			movss XMM0, XMM1;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != B[0]){
+			assert(0);
+		}
+		if(c[1] != A[1]){
+			assert(0);
+		}
+		if(c[2] != A[2]){
+			assert(0);
+		}
+		if(c[3] != A[3]){
+			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_movss_01_C.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,26 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movss_01_C;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [1.0, 2.0, 3.0, 4.0];
+		float b;
+		
+		asm{
+			movdqu XMM0, A;
+			movss b, XMM0;
+		}
+		
+		if(b != A[0]){
+			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_movupd_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,29 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movupd_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] A = [1.0, 4.0];
+		double[2] b;
+		
+		asm{
+			movdqu XMM0, A;
+			movupd b, XMM0;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			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_movupd_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,30 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movupd_01_B;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] A = [1.0, 4.0];
+		double[2] b;
+		
+		asm{
+			movdqu XMM0, A;
+			movupd XMM1, XMM0;
+			movdqu b, XMM1;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			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_movupd_01_C.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,29 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movupd_01_C;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] A = [1.0, 4.0];
+		double[2] b;
+		
+		asm{
+			movupd XMM0, A;
+			movdqu b, XMM0;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			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_movups_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,35 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movups_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [1.0, 2.0, 3.0, 4.0];
+		float[4] b;
+		
+		asm{
+			movdqu XMM0, A;
+			movups b, XMM0;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			assert(0);
+		}
+		if(b[2] != A[2]){
+			assert(0);
+		}
+		if(b[3] != A[3]){
+			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_movups_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movups_01_B;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [1.0, 2.0, 3.0, 4.0];
+		float[4] b;
+		
+		asm{
+			movdqu XMM0, A;
+			movups XMM1, XMM0;
+			movdqu b, XMM1;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			assert(0);
+		}
+		if(b[2] != A[2]){
+			assert(0);
+		}
+		if(b[3] != A[3]){
+			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_movups_01_C.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,35 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movups_01_C;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [1.0, 2.0, 3.0, 4.0];
+		float[4] b;
+		
+		asm{
+			movups XMM0, A;
+			movdqu b, XMM0;
+		}
+		
+		if(b[0] != A[0]){
+			assert(0);
+		}
+		if(b[1] != A[1]){
+			assert(0);
+		}
+		if(b[2] != A[2]){
+			assert(0);
+		}
+		if(b[3] != A[3]){
+			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_mulpd_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,31 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulpd_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] A = [7.0, 4.0];
+		const double[2] B = [3.0, 2.0];
+		double[2] c;
+		
+		asm{
+			movdqu XMM0, A;
+			mulpd XMM0, B;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0){
+			assert(0);
+		}
+		if(c[1] != 8.0){
+			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_mulpd_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,32 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulpd_01_B;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const double[2] A = [7.0, 4.0];
+		const double[2] B = [3.0, 2.0];
+		double[2] c;
+		
+		asm{
+			movdqu XMM0, A;
+			movdqu XMM1, B;
+			mulpd XMM0, XMM1;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0){
+			assert(0);
+		}
+		if(c[1] != 8.0){
+			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_mulps_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,38 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulps_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [7.0f, 4.0f, 1.0f, -2.0f];
+		const float[4] B = [3.0f, 2.0f, 0.0f, 5.0f];
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			mulps XMM0, B;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0f){
+			assert(0);
+		}
+		if(c[1] != 8.0f){
+			assert(0);
+		}
+		if(c[2] != 0.0f){
+			assert(0);
+		}
+		if(c[3] != -10.0f){
+			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_mulps_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,39 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulps_01_B;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [7.0f, 4.0f, 1.0f, -2.0f];
+		const float[4] B = [3.0f, 2.0f, 0.0f, 5.0f];
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			movdqu XMM1, B;
+			mulps XMM0, XMM1;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0f){
+			assert(0);
+		}
+		if(c[1] != 8.0f){
+			assert(0);
+		}
+		if(c[2] != 0.0f){
+			assert(0);
+		}
+		if(c[3] != -10.0f){
+			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_mulss_01_A.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,39 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulss_01_A;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [7.0f, 4.0f, 1.0f, -2.0f];
+		const float[4] B = [3.0f, 2.0f, 0.0f, 5.0f];
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			movdqu XMM1, B;
+			mulss XMM0, XMM1;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0f){
+			assert(0);
+		}
+		if(c[1] != A[1]){
+			assert(0);
+		}
+		if(c[2] != A[2]){
+			assert(0);
+		}
+		if(c[3] != A[3]){
+			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_mulss_01_B.d	Mon May 01 11:18:12 2006 +0000
@@ -0,0 +1,38 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_mulss_01_B;
+
+int main(){
+	version(D_InlineAsm_X86){
+		const float[4] A = [7.0f, 4.0f, 1.0f, -2.0f];
+		const float B = 3.0f;
+		float[4] c;
+		
+		asm{
+			movdqu XMM0, A;
+			mulss XMM0, B;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] != 21.0f){
+			assert(0);
+		}
+		if(c[1] != A[1]){
+			assert(0);
+		}
+		if(c[2] != A[2]){
+			assert(0);
+		}
+		if(c[3] != A[3]){
+			assert(0);
+		}
+
+
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}