Mercurial > projects > dstress
diff 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 |
line wrap: on
line diff
--- a/run/a/asm_pmovmskb_01_A.d Wed Dec 27 11:59:35 2006 +0000 +++ b/run/a/asm_pmovmskb_01_A.d Wed Dec 27 11:59:48 2006 +0000 @@ -17,21 +17,35 @@ int main(){ haveSSE2!()(); - const ubyte Y = 0b1000_0000; - const ubyte N = 0b0111_1111; + ubyte Y = 0b1000_0000; + ubyte N = 0b0111_1111; - const ubyte[16] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y]; + ubyte[] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y]; + ubyte* a = A.ptr; int b; - asm{ - mov EAX, 0x1234_5678; - movdqu XMM0, A; - pmovmskb EAX, XMM0; - mov b, EAX; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, 0x1234_5678; + mov EAX, a; + movdqu XMM0, [EAX]; + pmovmskb EAX, XMM0; + mov b, EAX; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov EAX, 0x1234_5678; + mov RAX, a; + movdqu XMM0, [RAX]; + pmovmskb EAX, XMM0; + mov b, EAX; + } + }else{ + static assert(0, "unhandled pointer size"); } - if(b != 0b1011_0011_1000_1001){ + if(b != 0b1001_0001_1100_1101){ assert(0); }