changeset 974:000adc086356

extended asm tests
author thomask
date Thu, 27 Apr 2006 22:53:36 +0000
parents 8c327aff56f3
children 5f982ba378c4
files norun/a/asm_lldt_01.d norun/a/asm_lmsw_01.d norun/a/asm_ltr_01.d run/a/asm_jmp_01.d run/a/asm_lar_01.d run/a/asm_lea_01_A.d run/a/asm_lea_01_B.d run/a/asm_lock_01.d run/a/asm_movddup_01.d run/a/asm_movq2dq_01.d run/a/asm_movq_01_B.d run/a/asm_movq_01_C.d run/a/asm_movsd_01.d run/a/asm_movss_01.d run/a/asm_movsx_01_A.d run/a/asm_movsx_01_B.d run/a/asm_mul_01_A.d
diffstat 17 files changed, 240 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/norun/a/asm_lldt_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,19 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.norun.a.asm_lldt_01;
+
+int main(){
+	version(D_InlineAsm_X86){
+		asm{
+			mov AX, 0;
+			lldt AX;
+		}
+
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/norun/a/asm_lmsw_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,19 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.norun.a.asm_lmsw_01;
+
+int main(){
+	version(D_InlineAsm_X86){
+		asm{
+			mov AX, 0;
+			lmsw AX;
+		}
+
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/norun/a/asm_ltr_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,18 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.norun.a.asm_ltr_01;
+
+int main(){
+	version(D_InlineAsm_X86){
+		ushort s = 0;
+		asm{
+			ltr s;
+		}
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- a/run/a/asm_jmp_01.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_jmp_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,7 +5,7 @@
 module dstress.run.a.asm_jmp_01;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
 		int a = 0;
 		
 		asm{
@@ -14,7 +14,9 @@
 		save1:	mov a, EAX;
 		}
 		
-		assert(a == 1);
+		if(a != 1){
+			assert(0);
+		}
 		
 		asm{
 			mov EAX, 0;
@@ -23,7 +25,9 @@
 		save2:	mov a, EAX;
 		}
 
-		assert(a == 0);
+		if(a != 0){
+			assert(0);
+		}
 		
 		
 		return 0;
@@ -31,4 +35,4 @@
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_lar_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,19 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lar_01;
+
+int main(){
+	version(D_InlineAsm_X86){
+		asm{
+			mov AX, 0x0;
+			lar BX, AX;
+		}
+
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- a/run/a/asm_lea_01_A.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_lea_01_A.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,19 +5,22 @@
 module dstress.run.a.asm_lea_01_A;
 
 int main(){
-	version(D_InlineAsm){
-		uint i;
+	version(D_InlineAsm_X86){
+		uint a;
+		uint b;
 		
 		asm{
-			lea EAX, i;
-			mov i, EAX;
+			lea EAX, a;
+			mov b, EAX;
 		}
 		
-		assert(cast(uint)&i == i);
+		if(b != cast(int)&a){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- a/run/a/asm_lea_01_B.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_lea_01_B.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,7 +5,7 @@
 module dstress.run.a.asm_lea_01_B;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
 		ushort i;
 		
 		asm{
@@ -13,11 +13,13 @@
 			mov i, AX;
 		}
 		
-		assert(cast(ushort)&i == i);
+		if(cast(ushort)&i != i){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_lock_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,23 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lock_01;
+
+int main(){
+	version(D_InlineAsm_X86){
+		uint i = 0;
+		asm{
+			lock;
+			inc i;
+		}
+
+		if(i != 1){
+			assert(0);
+		}
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- a/run/a/asm_movddup_01.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movddup_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -4,30 +4,26 @@
 
 module dstress.run.a.asm_movdup_01;
 
-align(16) struct X{
-	ulong[2] c;
-}
-
 int main(){
-	version(D_InlineAsm){
-		
-		double d = -3.5;
-		
-		X* x = new X;
+	version(D_InlineAsm_X86){
+		double a = -3.5;
+		double[2] b;
 		
 		asm{
-			mov EAX, x;
-			movddup XMM0, d;
-			movdqa X.c[EAX], XMM0;
+			movddup XMM0, a;
+			movdqu f, XMM0;
 		}
 		
-		assert(x.c[0]==x.c[1]);
-		
-		assert(*(cast(double*)cast(void*)&x.c[0]) == d);
-		
+		if(b[0] != a){
+			assert(0);
+		}
+
+		if(b[1] != a){
+			assert(0);
+		}
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- a/run/a/asm_movq2dq_01.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movq2dq_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,23 +5,35 @@
 module dstress.run.a.asm_movq2dq_01_B;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
+		static ulong[2] x = [0x0011_2233_4455_6677_8899LU, 0x1234_5678_90AB_CDEF];
+		ulong[2] y = x.dup;
 		
-		ulong a = 0x1234_ABCD_5678_EF01;
-		ulong b = 2;
+		static ulong A = 0x1234_ABCD_5678_EF01;
+		ulong a = A;
 		
 		asm{
+			movdqu XMM0, x;
 			movq MM0, a;
 			movq2dq XMM0, MM0;
-			movq b, XMM0;
+			movdqu y, XMM0;
 		}
 		
-		assert(a==b);
-		assert(b==0x1234_ABCD_5678_EF01);
+		if(a != A){
+			assert(0);
+		}
+
+		if(y[0] != A){
+			assert(0);
+		}
+		
+		if(y[1] != 0){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- a/run/a/asm_movq_01_B.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movq_01_B.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,22 +5,29 @@
 module dstress.run.a.asm_movq_01_B;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
+		static ulong[2] a = [0x1234_ABCD_56789_EF90_LU, 0x1122_5566_77AA_FFFF_LU];
+		ulong[2] b;
 		
-		ulong a = 0x1234_ABCD_5678_EF01;
-		ulong b = 2;
+		ulong c = 0x1234_ABCD_5678_EF01_LU;
 		
 		asm{
-			movq XMM0, a;
-			movq b, XMM0;
+			movdqu XMM0, a;
+			movq XMM0, c;
+			movdqu b, XMM0;
 		}
 		
-		assert(a==b);
-		assert(b==0x1234_ABCD_5678_EF01);
+		if(b[0] != c){
+			assert(0);
+		}
+
+		if(b[1] != 0){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_movq_01_C.d	Thu Apr 27 22:53:36 2006 +0000
@@ -0,0 +1,38 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movq_01_C;
+
+int main(){
+	version(D_InlineAsm_X86){
+		static ulong[2] a = [0x1234_ABCD_5678_EF90_LU, 0x1122_2222_5555_FFFF_LU];
+		static ulong[2] b = [0x1000_1111_5678_EF90_LU, 0x1122_5566_77AA_FFFF_LU];
+		
+		ulong[2] c;
+		
+		asm{
+			movdqu XMM0, a;
+			movdqu XMM1, b;
+			movq XMM0, XMM1;
+			movdqu c, XMM0;
+		}
+		
+		if(c[0] == a[0]){
+			// Intel
+		}else if(c[0] == 0){
+			// AMD
+		}else{
+			assert(0);
+		}
+
+		if(c[1] != b[1]){
+			assert(0);
+		}
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
--- a/run/a/asm_movsd_01.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movsd_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,7 +5,7 @@
 module dstress.run.a.asm_movsd_01;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
 		
 		double a = -12.1L;
 		double b = 2.8L;
@@ -15,11 +15,13 @@
 			movsd b, XMM0;
 		}
 		
-		assert(a==b);
+		if(a != b){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- a/run/a/asm_movss_01.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movss_01.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,7 +5,7 @@
 module dstress.run.a.asm_movss_01;
 
 int main(){
-	version(D_InlineAsm){
+	version(D_InlineAsm_X86){
 		
 		float a = -12.1L;
 		float b = 2.8L;
@@ -15,7 +15,9 @@
 			movss b, XMM0;
 		}
 		
-		assert(a==b);
+		if(a != b){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
--- a/run/a/asm_movsx_01_A.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movsx_01_A.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,11 +5,9 @@
 module dstress.run.a.asm_movsx_01_A;
 
 int main(){
-	version(D_InlineAsm){
-		int i=0xFF_FF_FF_FFu;
-		byte b=byte.min;
-		
-		assert(i==0xFF_FF_FF_FFu);
+	version(D_InlineAsm_X86){
+		int i = 0xFF_FF_FF_FFu;
+		byte b = byte.min;
 		
 		asm{
 			mov EAX, i;
@@ -18,7 +16,9 @@
 			mov i, EAX;
 		}
 	
-		assert(i==byte.min);
+		if(i != byte.min){
+			assert(0);
+		}
 		
 		i=0xFF_FF_FF_FFu;
 		b=byte.max;
@@ -30,11 +30,13 @@
 			mov i, EAX;
 		}
 		
-		assert(i==byte.max);
+		if(i != byte.max){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}
--- a/run/a/asm_movsx_01_B.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_movsx_01_B.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,11 +5,9 @@
 module dstress.run.a.asm_movsx_01_B;
 
 int main(){
-	version(D_InlineAsm){
-		uint i=0x12_3F_FF_FFu;
-		byte b=-128;
-		
-		assert(i==0x12_3F_FF_FFu);
+	version(D_InlineAsm_X86){
+		uint i = 0x12_3F_FF_FFu;
+		byte b = -128;
 		
 		asm{
 			mov EAX, i;
@@ -18,7 +16,9 @@
 			mov i, EAX;
 		}
 	
-		assert(i== 0x12_3F_FF_80u);
+		if(i != 0x12_3F_FF_80u){
+			assert(0);
+		}
 
 		return 0;
 	}else{
--- a/run/a/asm_mul_01_A.d	Thu Apr 27 11:29:22 2006 +0000
+++ b/run/a/asm_mul_01_A.d	Thu Apr 27 22:53:36 2006 +0000
@@ -5,22 +5,24 @@
 module dstress.run.a.asm_mul_01_A;
 
 int main(){
-	version(D_InlineAsm){
-		ushort a;
-		ubyte x = byte.max+2;
+	version(D_InlineAsm_X86){
+		uint i;
+		ubyte x = 0xFF;
 		
 		asm{
-			mov EAX, 0x12_34_56_78u;
-			mov AL, 2;
+			mov EAX, 0x23_43_56_78u;
+			mov AL, 0xEE;
 			mul x;
-			mov a, AX;
+			mov i, EAX;
 		}
 
-		assert(a==(byte.max+2)*2);
+		if(i != 0x23_43_ED_12){
+			assert(0);
+		}
 		
 		return 0;
 	}else{
 		pragma(msg, "no Inline asm support");
 		static assert(0);
 	}
-}
\ No newline at end of file
+}