changeset 698:5b99d1577b50

added some more iasm tests
author thomask
date Mon, 03 Oct 2005 14:17:40 +0000
parents fbee62becd2c
children 9b960ca15583
files run/a/asm_addsd_01.d run/a/asm_addss_01.d run/a/asm_bsf_01_A.d run/a/asm_bsf_01_B.d run/a/asm_bsr_01_A.d run/a/asm_bsr_01_B.d run/a/asm_bswap_01.d run/a/asm_call_01.d run/a/asm_clc_01.d run/a/asm_clflush_01.d run/a/asm_fwait_01.d run/a/asm_test_01_A.d run/a/asm_test_01_B.d run/a/asm_test_01_C.d run/a/asm_wait_01.d run/a/asm_xadd_01_A.d run/a/asm_xadd_01_B.d run/a/asm_xadd_01_C.d run/a/asm_xchg_01_A.d run/a/asm_xchg_01_B.d run/a/asm_xchg_01_C.d run/a/asm_xor_01_A.d run/a/asm_xor_01_B.d run/a/asm_xor_01_C.d
diffstat 24 files changed, 617 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/run/a/asm_addsd_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,32 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_addsd_01;
+
+int main(){
+	version(D_InlineAsm){
+		double a = 1.2;
+		double b = 0.2;
+		double c = 1.4;
+		
+		asm{
+			movq XMM0, a;
+			movq XMM1, b;
+			addsd XMM1, XMM0;
+			movq c, XMM1;
+		}
+		
+		a += b;
+		
+		b = a-c;
+		b = (b>0) ? b : (-1 * b);
+		
+		assert(b < b.epsilon*4);
+		
+		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_addss_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,32 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_addss_01;
+
+int main(){
+	version(D_InlineAsm){
+		float a = 1.2;
+		float b = 0.2;
+		float c = 1.4;
+		
+		asm{
+			movd XMM0, a;
+			movd XMM1, b;
+			addss XMM1, XMM0;
+			movd c, XMM1;
+		}
+		
+		a += b;
+		
+		b = a-c;
+		b = (b>0) ? b : (-1 * b);
+		
+		assert(b < b.epsilon*4);
+		
+		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_bsf_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_bsf_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 0x3000;
+		
+		asm{
+			bsf AX, a;
+			mov a, AX;
+		}
+		
+		assert(a==12);
+		
+		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_bsf_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_bsf_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 0x30000;
+		
+		asm{
+			bsf EAX, a;
+			mov a, EAX;
+		}
+		
+		assert(a==16);
+		
+		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_bsr_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_bsr_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 0x30000;
+		
+		asm{
+			bsr EAX, a;
+			mov a, EAX;
+		}
+		
+		assert(a==17);
+		
+		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_bsr_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,23 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_bsr_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 0x3000;
+		
+		asm{
+			bsr AX, a;
+			mov a, AX;
+		}
+		
+		assert(a==13);
+		
+		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_bswap_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,24 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_bswp_01;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 0xAB_34_56_78;
+		
+		asm{
+			mov EAX, a;
+			bswap EAX;
+			mov a, EAX;
+		}
+		
+		assert(a==0x78_56_34_AB);
+		
+		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_call_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,30 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_call_01;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 0xAB_34_56_78;
+		
+		asm{
+			mov EAX, a;
+			call dummy;
+			jmp dummy_end;
+		dummy:
+			inc EAX;
+			ret;
+		dummy_end:
+			inc EAX;
+			mov a, EAX;
+		}
+		
+		assert(a==0xAB_34_56_7A);
+		
+		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_clc_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,29 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_cl_01.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_clc_01;
+
+int main(){
+	version(D_InlineAsm){
+		uint a;
+		
+		asm{
+			mov EAX, 1;
+			cmp EAX, 2;
+			clc;
+			jb dummy;
+			inc EAX;
+		dummy:
+			inc EAX;
+			mov a, EAX;
+		}
+	
+		assert(a==3);
+		
+		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_clflush_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,33 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_cl_01.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_clflush_01;
+
+int main(){
+	version(D_InlineAsm){
+		uint a;
+		ubyte b = 1;
+		
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov EAX, EDX;
+			mov EBX, 0x2000;
+			and EAX, EBX;
+			cmp EAX, EBX;
+			jne not_supported;
+			clflush b;
+			inc EAX;
+		not_supported:
+			mov a, EAX;
+		}
+	
+		assert(a==0x20001 || a==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_fwait_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,18 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_fwait_01;
+
+int main(){
+	version(D_InlineAsm){
+		asm{
+			fwait;
+		}
+	
+		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_test_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,28 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_test_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		ubyte a = 3u;
+		ubyte b = 2u;
+		
+		asm{
+			mov AL, a;
+			test b, AL;
+			jg dummy;
+			mov a, 0;
+		dummy:
+			inc a;
+		}
+	
+		assert(a==4);
+		
+		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_test_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,28 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_test_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 3u;
+		ushort b = 2u;
+		
+		asm{
+			mov AX, a;
+			test b, AX;
+			jg dummy;
+			mov a, 0;
+		dummy:
+			inc a;
+		}
+	
+		assert(a==4);
+		
+		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_test_01_C.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,28 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_test_01_C;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 3u;
+		uint b = 2u;
+		
+		asm{
+			mov EAX, a;
+			test b, EAX;
+			jg dummy;
+			mov a, 0;
+		dummy:
+			inc a;
+		}
+	
+		assert(a==4);
+		
+		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_wait_01.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,18 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_wait_01;
+
+int main(){
+	version(D_InlineAsm){
+		asm{
+			wait;
+		}
+	
+		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_xadd_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xadd_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		ubyte a = 1u;
+		ubyte b = 3u;
+		
+		asm{
+			mov AL, a;
+			xadd b, AL;
+			mov a, AL;
+		}
+	
+		assert(a==3);
+		assert(b==4);
+		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_xadd_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xadd_01_C;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 1u;
+		ushort b = 3u;
+		
+		asm{
+			mov AX, a;
+			xadd b, AX;
+			mov a, AX;
+		}
+	
+		assert(a==3);
+		assert(b==4);
+		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_xadd_01_C.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xadd_01_C;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 1u;
+		uint b = 3u;
+		
+		asm{
+			mov EAX, a;
+			xadd b, EAX;
+			mov a, EAX;
+		}
+	
+		assert(a==3);
+		assert(b==4);
+		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_xchg_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xchg_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		ubyte a = 1u;
+		ubyte b = 3u;
+		
+		asm{
+			mov AL, a;
+			xchg AL, b;
+			mov a, AL;
+		}
+	
+		assert(a==3u);
+		assert(b==1u);
+		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_xchg_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xchg_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 1u;
+		ushort b = 3u;
+		
+		asm{
+			mov AX, a;
+			xchg AX, b;
+			mov a, AX;
+		}
+	
+		assert(a==3u);
+		assert(b==1u);
+		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_xchg_01_C.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xchg_01_C;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 1u;
+		uint b = 3u;
+		
+		asm{
+			mov EAX, a;
+			xchg EAX, b;
+			mov a, EAX;
+		}
+	
+		assert(a==3u);
+		assert(b==1u);
+		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_xor_01_A.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xor_01_A;
+
+int main(){
+	version(D_InlineAsm){
+		ubyte a = 1u;
+		ubyte b = 3u;
+		
+		asm{
+			mov AL, a;
+			xor b, AL;
+			mov a, AL;
+		}
+	
+		assert(a==1u);
+		assert(b==2u);
+		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_xor_01_B.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xor_01_B;
+
+int main(){
+	version(D_InlineAsm){
+		ushort a = 1u;
+		ushort b = 3u;
+		
+		asm{
+			mov AX, a;
+			xor b, AX;
+			mov a, AX;
+		}
+	
+		assert(a==1u);
+		assert(b==2u);
+		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_xor_01_C.d	Mon Oct 03 14:17:40 2005 +0000
@@ -0,0 +1,25 @@
+// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
+// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
+// $Author: thomask $
+
+module dstress.run.a.asm_xor_01_C;
+
+int main(){
+	version(D_InlineAsm){
+		uint a = 1u;
+		uint b = 3u;
+		
+		asm{
+			mov EAX, a;
+			xor b, EAX;
+			mov a, EAX;
+		}
+	
+		assert(a==1u);
+		assert(b==2u);
+		return 0;
+	}else{
+		pragma(msg, "no Inline asm support");
+		static assert(0);
+	}
+}
\ No newline at end of file