Mercurial > projects > dstress
comparison run/a/asm_pfrcpit2_01_A.d @ 1288:61d7e32e70a8
partial inline asm review
author | thomask |
---|---|
date | Wed, 27 Dec 2006 11:59:19 +0000 |
parents | 03c97933de98 |
children | 7a397590d6e0 |
comparison
equal
deleted
inserted
replaced
1287:8cd17283ece1 | 1288:61d7e32e70a8 |
---|---|
14 import addon.cpuinfo; | 14 import addon.cpuinfo; |
15 | 15 |
16 int main(){ | 16 int main(){ |
17 have3DNow!()(); | 17 have3DNow!()(); |
18 | 18 |
19 const float[2] A = [2.0f, -0.5f]; | 19 float* a = (new float[2]).ptr; |
20 float[2] c; | 20 a[0] = 2.0f; |
21 a[1] = -0.5f; | |
21 | 22 |
22 asm{ | 23 float* c = (new float[2]).ptr; |
23 pfrcp MM0, A; | 24 |
24 pfrcpit1 MM0, A; | 25 static if(size_t.sizeof == 4){ |
25 pfrcpit2 MM0, A; | 26 asm{ |
26 movq c, MM0; | 27 mov EAX, a; |
27 emms; | 28 pfrcp MM0, [EAX]; |
29 pfrcpit1 MM0, [EAX]; | |
30 pfrcpit2 MM0, [EAX]; | |
31 mov EAX, c; | |
32 movq [EAX], MM0; | |
33 emms; | |
34 } | |
35 }else static if(size_t.sizeof == 8){ | |
36 asm{ | |
37 mov RAX, a; | |
38 pfrcp MM0, [RAX]; | |
39 pfrcpit1 MM0, [RAX]; | |
40 pfrcpit2 MM0, [RAX]; | |
41 mov RAX, c; | |
42 movq [RAX], MM0; | |
43 emms; | |
44 } | |
45 }else{ | |
46 static assert(0, "unhandled pointer size"); | |
28 } | 47 } |
29 | 48 |
30 c[0] -= 2.000061f; | 49 c[0] -= 2.000061f; |
31 if(c[0] < 0.0f){ | 50 if(c[0] < 0.0f){ |
32 c[0] = -c[0]; | 51 c[0] = -c[0]; |