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];