Mercurial > projects > dstress
comparison run/a/asm_pshufhw_01_A.d @ 1329:1c8652b3795a
inline asm review
author | thomask |
---|---|
date | Fri, 12 Jan 2007 23:07:17 +0000 |
parents | 03c97933de98 |
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 const short[8] A = [9, 9, 9, 9, 9, 9, 9, 9]; | 19 short[] A = [9, 9, 9, 9, 9, 9, 9, 9]; |
20 const short[8] B = [1, 2, 3, 4, 5, 6, 7, 8]; | 20 short* a = A.ptr; |
21 | 21 |
22 short[8] c; | 22 short[] B = [1, 2, 3, 4, 5, 6, 7, 8]; |
23 short* b = B.ptr; | |
24 | |
25 short* c = (new short[8]).ptr; | |
23 | 26 |
24 asm{ | 27 asm{ |
25 movdqu XMM0, A; | 28 mov EAX, a; |
26 movdqu XMM1, B; | 29 movdqu XMM0, [EAX]; |
30 mov EAX, b; | |
31 movdqu XMM1, [EAX]; | |
27 pshufhw XMM0, XMM1, 0b11_10_01_00; | 32 pshufhw XMM0, XMM1, 0b11_10_01_00; |
28 movdqu, XMM0; | 33 mov EAX, c; |
34 movdqu [EAX], XMM0; | |
29 } | 35 } |
30 | 36 |
31 if(c[0] != 4){ | 37 if(c[0] != 1){ |
32 assert(0); | 38 assert(0); |
33 } | 39 } |
34 if(c[1] != 3){ | 40 if(c[1] != 2){ |
35 assert(0); | 41 assert(0); |
36 } | 42 } |
37 if(c[2] != 2){ | 43 if(c[2] != 3){ |
38 assert(0); | 44 assert(0); |
39 } | 45 } |
40 if(c[3] != 1){ | 46 if(c[3] != 4){ |
41 assert(0); | 47 assert(0); |
42 } | 48 } |
43 if(c[4] != 5){ | 49 if(c[4] != 5){ |
44 assert(0); | 50 assert(0); |
45 } | 51 } |