Mercurial > projects > dstress
view addon/cpuinfo.d @ 1002:a7310ceac844
inline ASM review
author | thomask |
---|---|
date | Thu, 18 May 2006 16:07:06 +0000 |
parents | 861fe190f7ef |
children | aab96ff8d6cd |
line wrap: on
line source
// $HeadURL$ // $Date$ // $Author$ // @author@ Thomas Kuehne <thomas-dloop@kuehne.cn> module /*dstress.*/addon.cpuinfo; version(D_InlineAsm){ version(X86){ const bool haveX86InlineAsm = true; version = haveX86InlineAsm; }else version(X86_64){ const bool haveX86InlineAsm = true; version = haveX86InlineAsm; }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); const bool haveX86InlineAsm = false; } }else version(D_InlineAsm_X86){ const bool haveX86InlineAsm = true; version = haveX86InlineAsm; }else version(D_InlineAsm_X86_X64){ const bool haveX86InlineAsm = true; version = haveX86InlineAsm; }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); const bool haveX86InlineAsm = false; } template haveCMOV(){ void haveCMOV(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!((a >> 15) & 1)){ throw new Exception("DSTRESS{XFAIL}: no CMOV support present"); } } } void haveCX8(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } } if(!((a >> 8) & 1)){ throw new Exception("no X86 CX8 support present"); } } template haveFPU(){ void haveFPU(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!(a & 1)){ throw new Exception("DSTRESS{XFAIL}: no X86 FPU present"); } } } template haveMMX(){ void haveMMX(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!((a >> 23) & 1)){ throw new Exception("DSTRESS{XFAIL}: no MMX support present"); } } } template haveSSE(){ void haveSSE(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!((a >> 25) & 1)){ throw new Exception("DSTRESS{XFAIL}: no SSE support present"); } } } template haveSSE2(){ void haveSSE2(){ uint a = 0; version(haveX86InlineAsm){ asm{ mov EAX, 1; cpuid; mov a, EDX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!((a >> 26) & 1)){ throw new Exception("DSTRESS{XFAIL}: no SSE2 support present"); } } } template haveSSE3(){ void haveSSE3(){ uint a = 1; uint b = 0; version(haveX86InlineAsm){ asm{ mov EAX, a; cpuid; mov b, ECX; } }else{ pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); } if(!(a & 1)){ throw new Exception("DSTRESS{XFAIL}: no SSE3 support present"); } } }