Mercurial > projects > dstress
comparison run/a/asm_pmaddwd_01_A.d @ 1290:e3d0dea394ab
partial inline asm review
author | thomask |
---|---|
date | Wed, 27 Dec 2006 11:59:48 +0000 |
parents | 03c97933de98 |
children |
comparison
equal
deleted
inserted
replaced
1289:ad4d84aba69b | 1290:e3d0dea394ab |
---|---|
15 import addon.cpuinfo; | 15 import addon.cpuinfo; |
16 | 16 |
17 int main(){ | 17 int main(){ |
18 haveSSE2!()(); | 18 haveSSE2!()(); |
19 | 19 |
20 const short[8] A = [1, 2, 3, 4, 5, 6, 16, 1]; | 20 short[] A = [1, 2, 3, 4, 5, 6, 16, 1]; |
21 const short[8] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 2]; | 21 short* a = A.ptr; |
22 | 22 |
23 int[4] c; | 23 short[] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 2]; |
24 short* b = B.ptr; | |
24 | 25 |
25 asm{ | 26 int* c = (new int[4]).ptr; |
26 movdqu XMM0, A; | 27 |
27 movdqu XMM1, B; | 28 asm{ |
28 pmaddwd XMM0, XMM1; | 29 mov EAX, a; |
29 movdqu c, XMM0; | 30 movdqu XMM0, [EAX]; |
30 } | 31 mov EAX, b; |
32 movdqu XMM1, [EAX]; | |
33 pmaddwd XMM0, XMM1; | |
34 mov EAX, c; | |
35 movdqu [EAX], XMM0; | |
36 } | |
31 | 37 |
32 if(c[0] != (1 * -9) + (2 * 10)){ | 38 if(c[0] != (1 * -9) + (2 * 10)){ |
33 assert(0); | 39 assert(0); |
34 } | 40 } |
35 if(c[1] != (3 * -11) + (4 * -12)){ | 41 if(c[1] != (3 * -11) + (4 * -12)){ |
36 assert(0); | 42 assert(0); |
37 } | 43 } |
38 if(c[2] != (5 * -12) + (6 * 13)){ | 44 if(c[2] != (5 * 13) + (6 * 14)){ |
39 assert(0); | 45 assert(0); |
40 } | 46 } |
41 if(c[3] != 0xFFF02){ | 47 if(c[3] != 0xFFF2){ |
42 assert(0); | 48 assert(0); |
43 } | 49 } |
44 | 50 |
45 return 0; | 51 return 0; |
46 } | 52 } |