Mercurial > projects > dstress
comparison run/a/asm_pmovmskb_01_A.d @ 1290:e3d0dea394ab
partial inline asm review
author | thomask |
---|---|
date | Wed, 27 Dec 2006 11:59:48 +0000 |
parents | 1b6d9acddb76 |
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 ubyte Y = 0b1000_0000; | 20 ubyte Y = 0b1000_0000; |
21 const ubyte N = 0b0111_1111; | 21 ubyte N = 0b0111_1111; |
22 | 22 |
23 const ubyte[16] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y]; | 23 ubyte[] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y]; |
24 ubyte* a = A.ptr; | |
24 | 25 |
25 int b; | 26 int b; |
26 | 27 |
27 asm{ | 28 static if(size_t.sizeof == 4){ |
28 mov EAX, 0x1234_5678; | 29 asm{ |
29 movdqu XMM0, A; | 30 mov EAX, 0x1234_5678; |
30 pmovmskb EAX, XMM0; | 31 mov EAX, a; |
31 mov b, EAX; | 32 movdqu XMM0, [EAX]; |
33 pmovmskb EAX, XMM0; | |
34 mov b, EAX; | |
35 } | |
36 }else static if(size_t.sizeof == 8){ | |
37 asm{ | |
38 mov EAX, 0x1234_5678; | |
39 mov RAX, a; | |
40 movdqu XMM0, [RAX]; | |
41 pmovmskb EAX, XMM0; | |
42 mov b, EAX; | |
43 } | |
44 }else{ | |
45 static assert(0, "unhandled pointer size"); | |
32 } | 46 } |
33 | 47 |
34 if(b != 0b1011_0011_1000_1001){ | 48 if(b != 0b1001_0001_1100_1101){ |
35 assert(0); | 49 assert(0); |
36 } | 50 } |
37 | 51 |
38 return 0; | 52 return 0; |
39 } | 53 } |