Mercurial > projects > dstress
diff run/a/asm_paddb_01_A.d @ 1285:229e630d4b1a
partuial inline asm review
author | thomask |
---|---|
date | Tue, 26 Dec 2006 14:21:37 +0000 |
parents | 9dcac8d4e97f |
children |
line wrap: on
line diff
--- a/run/a/asm_paddb_01_A.d Tue Dec 26 14:21:29 2006 +0000 +++ b/run/a/asm_paddb_01_A.d Tue Dec 26 14:21:37 2006 +0000 @@ -16,7 +16,7 @@ int main(){ haveSSE2!()(); - byte[] a = new byte[16]; + byte* a = (new byte[16]).ptr; a[0] = 1; a[1] = 2; a[2] = 3; @@ -30,10 +30,11 @@ a[10] = 11; a[11] = 12; a[12] = 13; + a[13] = 14; a[14] = 15; a[15] = 16; - byte[] b = new byte[16]; + byte* b = (new byte[16]).ptr; b[0] = -8; b[1] = -7; b[2] = -6; @@ -51,13 +52,30 @@ b[14] = 6; b[15] = 7; - byte[] c = new byte[16]; + byte* c = (new byte[16]).ptr; - asm{ - movdqu XMM0, a; - movdqu XMM1, b; - paddb XMM0, XMM1; - movdqu c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + mov EAX, b; + movdqu XMM1, [EAX]; + paddb 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]; + paddb XMM0, XMM1; + mov RAX, c; + movdqu [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != -7){