Mercurial > projects > dstress
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