Mercurial > projects > dstress
comparison run/a/asm_pshufd_01_A.d @ 1329:1c8652b3795a
inline asm review
author | thomask |
---|---|
date | Fri, 12 Jan 2007 23:07:17 +0000 |
parents | 6e5d377573e1 |
children |
comparison
equal
deleted
inserted
replaced
1328:288d15cd3b95 | 1329:1c8652b3795a |
---|---|
14 import addon.cpuinfo; | 14 import addon.cpuinfo; |
15 | 15 |
16 int main(){ | 16 int main(){ |
17 haveSSE2!()(); | 17 haveSSE2!()(); |
18 | 18 |
19 float* a = [1.0f, 2.0f, 3.0f, 4.0f]; | 19 float[] A = [1.0f, 2.0f, 3.0f, 4.0f]; |
20 float* b = [5.0f, 6.0f, 7.0f, 8.0f]; | 20 float* a = A.ptr; |
21 | 21 |
22 float* c = new float[4]; | 22 float[] B = [5.0f, 6.0f, 7.0f, 8.0f]; |
23 float* b = B.ptr; | |
23 | 24 |
24 asm{ | 25 float* c = (new float[4]).ptr; |
25 mov EAX, a; | 26 |
26 movups XMM0, [EAX]; | 27 static if(size_t.sizeof == 4){ |
27 mov EAX, b; | 28 asm{ |
28 movups XMM1, [EAX]; | 29 mov EAX, a; |
29 pshufd XMM0, XMM1, 0b01_01_00_10; | 30 movups XMM0, [EAX]; |
30 mov EAX, c; | 31 mov EAX, b; |
31 movups [EAX], XMM0; | 32 movups XMM1, [EAX]; |
33 pshufd XMM0, XMM1, 0b01_01_00_10; | |
34 mov EAX, c; | |
35 movups [EAX], XMM0; | |
36 } | |
37 }else static if(size_t.sizeof == 8){ | |
38 asm{ | |
39 mov RAX, a; | |
40 movups XMM0, [RAX]; | |
41 mov RAX, b; | |
42 movups XMM1, [RAX]; | |
43 pshufd XMM0, XMM1, 0b01_01_00_10; | |
44 mov RAX, c; | |
45 movups [RAX], XMM0; | |
46 } | |
47 }else{ | |
48 static assert(0, "unhandled pointer size"); | |
32 } | 49 } |
33 | 50 |
34 if(c[0] != 7.0f){ | 51 if(c[0] != 7.0f){ |
35 assert(0); | 52 assert(0); |
36 } | 53 } |