Mercurial > projects > dstress
comparison run/a/asm_pshuflw_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; | |
23 | 24 |
24 asm{ | 25 short* c = (new short[8]).ptr; |
25 movdqu XMM0, A; | 26 |
26 movdqu XMM1, B; | 27 static if(size_t.sizeof == 4){ |
27 psuhflw XMM0, XMM1, 0b11_10_01_00; | 28 asm{ |
28 movdqu, XMM0; | 29 mov EAX, a; |
30 movdqu XMM0, [EAX]; | |
31 mov EAX, b; | |
32 movdqu XMM1, [EAX]; | |
33 pshuflw XMM0, XMM1, 0b11_01_10_00; | |
34 mov EAX, c; | |
35 movdqu [EAX], XMM0; | |
36 } | |
37 }else static if(size_t.sizeof == 8){ | |
38 asm{ | |
39 mov RAX, a; | |
40 movdqu XMM0, [RAX]; | |
41 mov RAX, b; | |
42 movdqu XMM1, [RAX]; | |
43 pshuflw XMM0, XMM1, 0b11_01_10_00; | |
44 mov RAX, c; | |
45 movdqu [RAX], XMM0; | |
46 } | |
47 }else{ | |
48 static assert(0, "unhandled pointer size"); | |
29 } | 49 } |
30 | 50 |
31 if(c[0] != 1){ | 51 if(c[0] != 1){ |
32 assert(0); | 52 assert(0); |
33 } | 53 } |
34 if(c[1] != 2){ | 54 if(c[1] != 3){ |
35 assert(0); | 55 assert(0); |
36 } | 56 } |
37 if(c[2] != 3){ | 57 if(c[2] != 2){ |
38 assert(0); | 58 assert(0); |
39 } | 59 } |
40 if(c[3] != 4){ | 60 if(c[3] != 4){ |
41 assert(0); | 61 assert(0); |
42 } | 62 } |
43 if(c[4] != 8){ | 63 if(c[4] != 5){ |
44 assert(0); | 64 assert(0); |
45 } | 65 } |
46 if(c[5] != 7){ | 66 if(c[5] != 6){ |
47 assert(0); | 67 assert(0); |
48 } | 68 } |
49 if(c[6] != 6){ | 69 if(c[6] != 7){ |
50 assert(0); | 70 assert(0); |
51 } | 71 } |
52 if(c[7] != 5){ | 72 if(c[7] != 8){ |
53 assert(0); | 73 assert(0); |
54 } | 74 } |
55 | 75 |
56 return 0; | 76 return 0; |
57 } | 77 } |