changeset 709:b0e6b3803e95

added cpuinfo helper for IASM tests
author thomask
date Fri, 21 Oct 2005 19:20:34 +0000
parents e2d3a8156828
children 8cba64b24615
files addon/cpuinfo.d
diffstat 1 files changed, 93 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/addon/cpuinfo.d	Fri Oct 21 19:20:34 2005 +0000
@@ -0,0 +1,93 @@
+// $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 $
+
+// @author@	Thomas Kuehne <thomas-dloop@kuehne.cn>
+
+module /*dstress.*/addon.cpuinfo;
+
+version(D_InlineAsm){
+	void haveCMOV(){
+		uint a = 0;
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		assert((a >> 15) & 1);
+	}
+	
+	void haveCX8(){
+		uint a = 0;
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		assert((a >> 8) & 1);
+	}
+	
+	void haveFPU(){
+		uint a = 0;
+		
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		
+		assert(a & 1);
+	}
+		
+	void haveMMX(){
+		uint a = 0;
+		
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		
+		assert((a >> 23) & 1);
+	}
+
+	
+	void haveSSE(){
+		uint a = 0;
+		
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		
+		assert((a >> 25) & 1);
+	}	
+
+	void haveSSE2(){
+		uint a = 0;
+		
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, EDX;
+		}
+		
+		assert((a >> 26) & 1);
+	}
+	
+	void haveSSE3(){
+		uint a = 0;
+			
+		asm{
+			mov EAX, 1;
+			cpuid;
+			mov a, ECX;
+		}
+			
+		assert(a & 1);
+	}
+}else{
+	pragma(msg, "no Inline ASM support");
+	static assert(0);
+}
\ No newline at end of file