Mercurial > projects > dstress
comparison run/a/asm_movhlps_01_A.d @ 1329:1c8652b3795a
inline asm review
author | thomask |
---|---|
date | Fri, 12 Jan 2007 23:07:17 +0000 |
parents | 81222734adf3 |
children |
comparison
equal
deleted
inserted
replaced
1328:288d15cd3b95 | 1329:1c8652b3795a |
---|---|
18 import addon.cpuinfo; | 18 import addon.cpuinfo; |
19 | 19 |
20 int main(){ | 20 int main(){ |
21 haveSSE!()(); | 21 haveSSE!()(); |
22 | 22 |
23 float[] a = new float[4]; | 23 float* a = (new float[4]).ptr; |
24 a[0] = 3.0f; | 24 a[0] = 3.0f; |
25 a[1] = 4.0f; | 25 a[1] = 4.0f; |
26 a[2] = 5.0f; | 26 a[2] = 5.0f; |
27 a[3] = 6.0f; | 27 a[3] = 6.0f; |
28 | 28 |
29 float[] b = new float[4]; | 29 float* b = (new float[4]).ptr; |
30 a[0] = 10.0f; | 30 b[0] = 10.0f; |
31 a[1] = 20.0f; | 31 b[1] = 20.0f; |
32 a[2] = 30.0f; | 32 b[2] = 30.0f; |
33 a[3] = 40.0f; | 33 b[3] = 40.0f; |
34 | 34 |
35 float[] c = new float[4]; | 35 float* c = (new float[4]).ptr; |
36 | 36 |
37 asm{ | 37 static if(size_t.sizeof == 4){ |
38 movups XMM0, a; | 38 asm{ |
39 movups XMM1, b; | 39 mov EAX, a; |
40 movlhps XMM0, XMM1; | 40 movups XMM0, [EAX]; |
41 movups c, XMM0; | 41 mov EAX, b; |
42 movups XMM1, [EAX]; | |
43 movlhps XMM0, XMM1; | |
44 mov EAX, c; | |
45 movups [EAX], XMM0; | |
46 } | |
47 }else static if(size_t.sizeof == 8){ | |
48 asm{ | |
49 mov RAX, a; | |
50 movups XMM0, [RAX]; | |
51 mov RAX, b; | |
52 movups XMM1, [RAX]; | |
53 movlhps XMM0, XMM1; | |
54 mov RAX, c; | |
55 movups [RAX], XMM0; | |
56 } | |
57 }else{ | |
58 static assert(0, "unhandled pointer size"); | |
42 } | 59 } |
43 | 60 |
44 if(c[0] != a[0]){ | 61 if(c[0] != a[0]){ |
45 assert(0); | 62 assert(0); |
46 } | 63 } |