comparison run/a/asm_pf2id_01_B.d @ 1285:229e630d4b1a

partuial inline asm review
author thomask
date Tue, 26 Dec 2006 14:21:37 +0000
parents 9dcac8d4e97f
children 7a397590d6e0
comparison
equal deleted inserted replaced
1284:96e7be832c35 1285:229e630d4b1a
14 import addon.cpuinfo; 14 import addon.cpuinfo;
15 15
16 int main(){ 16 int main(){
17 have3DNow!()(); 17 have3DNow!()();
18 18
19 float[] a = new float[2]; 19 float* a = (new float[2]).ptr;
20 a[0] = 123.0f; 20 a[0] = 123.0f;
21 a[1] = -456.0f; 21 a[1] = -456.0f;
22 22
23 int[] b = new int[2]; 23 int* b = (new int[2]).ptr;
24 24
25 asm{ 25 static if(size_t.sizeof == 4){
26 movq MM1, a; 26 asm{
27 pf2id MM0, MM1; 27 mov EAX, a;
28 movq b, MM0; 28 movq MM1, [EAX];
29 emms; 29 pf2id MM0, MM1;
30 mov EAX, b;
31 movq [EAX], MM0;
32 emms;
33 }
34 }else static if(size_t.sizeof == 8){
35 asm{
36 mov RAX, a;
37 movq MM1, [RAX];
38 pf2id MM0, MM1;
39 mov RAX, b;
40 movq [RAX], MM0;
41 emms;
42 }
43 }else{
44 static assert(0, "unhandled pointer size");
30 } 45 }
31 46
32 if(b[0] != a[0]){ 47 if(b[0] != a[0]){
33 assert(0); 48 assert(0);
34 } 49 }