changeset 701:93c604903b9d

small iasm update
author thomask
date Wed, 05 Oct 2005 08:12:26 +0000
parents 98e3d2ab382f
children 4c5b7f538994
files run/a/asm_lddqu_01.d run/a/asm_lea_01_A.d run/a/asm_lea_01_B.d run/a/asm_leave_01.d run/a/asm_lfence_01.d run/a/asm_mfence_01.d run/a/asm_movd_01.d run/a/asm_movddup_01.d run/a/asm_movdq2q_01.d run/a/asm_movdqa_01.d run/a/asm_movdqu_01.d run/a/asm_movntdq_01.d run/a/asm_movnti_01.d run/a/asm_movq2dq_01.d run/a/asm_movq_01_A.d run/a/asm_movq_01_B.d run/a/asm_movsd_01.d run/a/asm_movss_01.d
diffstat 18 files changed, 496 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_lddqu_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,42 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lddqu_01;
+
+align(1) struct X{
+	ubyte a;
+	ulong b;
+}
+
+align(16) struct Y{
+	ulong c;
+}
+		
+int main(){
+	version(D_InlineAsm){	
+		X* x = new X;
+	
+		assert(cast(size_t)&(x.b) % 2 == 1);
+		
+		x.b = 0x0123_4567_89AB_CDEF_LU;
+		
+		Y* y = new Y;
+		
+		assert(cast(size_t)&(y.c) % 16 == 0);
+		
+		asm{
+			mov EAX, x;
+			lddqu XMM0, X.b[EAX];
+			mov EAX, y;
+			movdqa Y.c[EAX], XMM0;
+		}
+		
+		assert(y.c==0x0123_4567_89AB_CDEF_LU);
+		
+		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_lea_01_A.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lea_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		uint i;
+		
+		asm{
+			lea EAX, i;
+			mov i, EAX;
+		}
+		
+		assert(cast(uint)&i == i);
+		
+		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_lea_01_B.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lea_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		ushort i;
+		
+		asm{
+			lea AX, i;
+			mov i, AX;
+		}
+		
+		assert(cast(ushort)&i == i);
+		
+		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_leave_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,26 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_leave_01;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 1;
+		
+		asm{
+			mov EAX, a;
+			enter 2048, 30;
+			leave;
+			inc EAX;
+			mov a, EAX;
+		}
+		
+		assert(a == 2);
+		
+		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_lfence_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,19 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lfence_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		asm{
+			lfence;
+		}
+		
+		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_mfence_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,19 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_lfence_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		asm{
+			mfence;
+		}
+		
+		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_movd_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movd_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		uint a = 0x1234_ABCD;
+		int b = 2;
+		
+		asm{
+			movd MM0, a;
+			movd b, MM0;
+		}
+		
+		assert(a==b);
+		
+		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_movddup_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,33 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+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;
+		
+		asm{
+			mov EAX, x;
+			movddup XMM0, d;
+			movdqa X.c[EAX], XMM0;
+		}
+		
+		assert(x.c[0]==x.c[1]);
+		
+		assert(*(cast(double*)cast(void*)&x.c[0]) == d);
+		
+		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_movdq2q_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movdq2q_01;
+
+int main(){
+	version(D_InlineAsm){
+		double a = -2.5L;
+		double b = 1.1L;
+		
+		asm{
+			movq XMM0, a;
+			movdq2q MM0, XMM0;
+			movq b, XMM0;
+		}
+		
+		assert(a==b);
+		
+		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_movdqa_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,36 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movdqa_01;
+
+align(16) struct X{
+	ulong[2] c;
+}
+
+int main(){
+	version(D_InlineAsm){
+		X* a = new X;
+		a.c[0]=1;
+		a.c[1]=2;
+		X* b = new X;
+		
+		assert(a.c[0]!=b.c[0]);
+		assert(a.c[1]!=b.c[1]);
+		
+		asm{
+			mov EAX, a;
+			mov EBX, b;
+			movdqa XMM0, X.c[EAX];
+			movdqa X.c[EBX], XMM0;
+		}
+		
+		assert(a.c[0]==b.c[0]);
+		assert(a.c[1]==b.c[1]);
+		
+		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_movdqu_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,37 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movdqu_01;
+
+align(3) struct X{
+	byte dummy;
+	ulong[2] c;
+}
+
+int main(){
+	version(D_InlineAsm){
+		X* a = new X;
+		a.c[0]=1;
+		a.c[1]=2;
+		X* b = new X;
+		
+		assert(a.c[0]!=b.c[0]);
+		assert(a.c[1]!=b.c[1]);
+		
+		asm{
+			mov EAX, a;
+			mov EBX, b;
+			movdqu XMM0, X.c[EAX];
+			movdqu X.c[EBX], XMM0;
+		}
+		
+		assert(a.c[0]==b.c[0]);
+		assert(a.c[1]==b.c[1]);
+		
+		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_movntdq_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,33 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movntdq_01;
+
+align(16) struct X{
+	ulong[2] c;
+}
+
+int main(){
+	version(D_InlineAsm){
+		
+		double d = -3.5;
+		
+		X* x = new X;
+		
+		asm{
+			mov EAX, x;
+			movddup XMM0, d;
+			movntdq X.c[EAX], XMM0;
+		}
+		
+		assert(x.c[0]==x.c[1]);
+		
+		assert(*(cast(double*)cast(void*)&x.c[0]) == d);
+		
+		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_movnti_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,26 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movnti_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		uint a = 0x1234_ABCD;
+		uint b = 2;
+		
+		asm{
+			mov EAX, a;
+			movnti b, EAX;
+		}
+		
+		assert(a==b);
+		assert(b==0x1234_ABCD);
+		
+		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_movq2dq_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,27 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movq2dq_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		
+		ulong a = 0x1234_ABCD_5678_EF01;
+		ulong b = 2;
+		
+		asm{
+			movq MM0, a;
+			movq2dq XMM0, MM0;
+			movq b, XMM0;
+		}
+		
+		assert(a==b);
+		assert(b==0x1234_ABCD_5678_EF01);
+		
+		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_A.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,26 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movq_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		
+		ulong a = 0x1234_ABCD_5678_EF01;
+		ulong b = 2;
+		
+		asm{
+			movq MM0, a;
+			movq b, MM0;
+		}
+		
+		assert(a==b);
+		assert(b==0x1234_ABCD_5678_EF01);
+		
+		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_B.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,26 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movq_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		
+		ulong a = 0x1234_ABCD_5678_EF01;
+		ulong b = 2;
+		
+		asm{
+			movq XMM0, a;
+			movq b, XMM0;
+		}
+		
+		assert(a==b);
+		assert(b==0x1234_ABCD_5678_EF01);
+		
+		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_movsd_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movsd_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		double a = -12.1L;
+		double b = 2.8L;
+		
+		asm{
+			movsd XMM0, a;
+			movsd b, XMM0;
+		}
+		
+		assert(a==b);
+		
+		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_movss_01.d	Wed Oct 05 08:12:26 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL$
+// $Date$
+// $Author$
+
+module dstress.run.a.asm_movss_01;
+
+int main(){
+	version(D_InlineAsm){
+		
+		float a = -12.1L;
+		float b = 2.8L;
+		
+		asm{
+			movsd XMM0, a;
+			movsd b, XMM0;
+		}
+		
+		assert(a==b);
+		
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file