Mercurial > projects > dstress
diff run/a/asm_psadbw_01_A.d @ 1329:1c8652b3795a
inline asm review
author | thomask |
---|---|
date | Fri, 12 Jan 2007 23:07:17 +0000 |
parents | 03c97933de98 |
children |
line wrap: on
line diff
--- a/run/a/asm_psadbw_01_A.d Fri Jan 12 23:06:49 2007 +0000 +++ b/run/a/asm_psadbw_01_A.d Fri Jan 12 23:07:17 2007 +0000 @@ -16,19 +16,39 @@ int main(){ haveSSE!()(); - const ubyte[16] A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; - const ubyte[16] B = [2, 2, 2, 2, 2, 2, 2, 2, 1, 10, 10, 10, 10, 10, 10, 10]; + ubyte[] A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; + ubyte* a = A.ptr; - ushort[8] c; + ubyte[] B = [2, 2, 2, 2, 2, 2, 2, 2, 1, 10, 10, 10, 10, 10, 10, 10]; + ubyte* b = B.ptr; + + ushort* c = (new ushort[8]).ptr; - asm{ - movdqu XMM0, A; - movdqu XMM1, B; - psadbw XMM0, XMM1; - movdqu c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + mov EAX, b; + movdqu XMM1, [EAX]; + psadbw XMM0, XMM1; + mov EAX, c; + movdqu [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movdqu XMM0, [RAX]; + mov RAX, b; + movdqu XMM1, [RAX]; + psadbw XMM0, XMM1; + mov RAX, c; + movdqu [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } - if(c[0] != 0){ + if(c[0] != 22){ assert(0); } if(c[1] != 0){ @@ -37,10 +57,10 @@ if(c[2] != 0){ assert(0); } - if(c[3] != 22){ + if(c[3] != 0){ assert(0); } - if(c[4] != 0){ + if(c[4] != 29){ assert(0); } if(c[5] != 0){ @@ -49,7 +69,7 @@ if(c[6] != 0){ assert(0); } - if(c[7] != 21){ + if(c[7] != 0){ assert(0); } return 0;