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 }