709
|
1 // $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $
|
|
2 // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $
|
|
3 // $Author: thomask $
|
|
4
|
|
5 // @author@ Thomas Kuehne <thomas-dloop@kuehne.cn>
|
|
6
|
|
7 module /*dstress.*/addon.cpuinfo;
|
|
8
|
|
9 version(D_InlineAsm){
|
|
10 void haveCMOV(){
|
|
11 uint a = 0;
|
|
12 asm{
|
|
13 mov EAX, 1;
|
|
14 cpuid;
|
|
15 mov a, EDX;
|
|
16 }
|
|
17 assert((a >> 15) & 1);
|
|
18 }
|
|
19
|
|
20 void haveCX8(){
|
|
21 uint a = 0;
|
|
22 asm{
|
|
23 mov EAX, 1;
|
|
24 cpuid;
|
|
25 mov a, EDX;
|
|
26 }
|
|
27 assert((a >> 8) & 1);
|
|
28 }
|
|
29
|
|
30 void haveFPU(){
|
|
31 uint a = 0;
|
|
32
|
|
33 asm{
|
|
34 mov EAX, 1;
|
|
35 cpuid;
|
|
36 mov a, EDX;
|
|
37 }
|
|
38
|
|
39 assert(a & 1);
|
|
40 }
|
|
41
|
|
42 void haveMMX(){
|
|
43 uint a = 0;
|
|
44
|
|
45 asm{
|
|
46 mov EAX, 1;
|
|
47 cpuid;
|
|
48 mov a, EDX;
|
|
49 }
|
|
50
|
|
51 assert((a >> 23) & 1);
|
|
52 }
|
|
53
|
|
54
|
|
55 void haveSSE(){
|
|
56 uint a = 0;
|
|
57
|
|
58 asm{
|
|
59 mov EAX, 1;
|
|
60 cpuid;
|
|
61 mov a, EDX;
|
|
62 }
|
|
63
|
|
64 assert((a >> 25) & 1);
|
|
65 }
|
|
66
|
|
67 void haveSSE2(){
|
|
68 uint a = 0;
|
|
69
|
|
70 asm{
|
|
71 mov EAX, 1;
|
|
72 cpuid;
|
|
73 mov a, EDX;
|
|
74 }
|
|
75
|
|
76 assert((a >> 26) & 1);
|
|
77 }
|
|
78
|
|
79 void haveSSE3(){
|
|
80 uint a = 0;
|
|
81
|
|
82 asm{
|
|
83 mov EAX, 1;
|
|
84 cpuid;
|
|
85 mov a, ECX;
|
|
86 }
|
|
87
|
|
88 assert(a & 1);
|
|
89 }
|
|
90 }else{
|
|
91 pragma(msg, "no Inline ASM support");
|
|
92 static assert(0);
|
|
93 } |