# HG changeset patch # User thomask # Date 1167220775 0 # Node ID ad4d84aba69be95791cfb07abcb4955f462ac0d1 # Parent 61d7e32e70a8b6f60ff32aee96d7eedcfae8fb72 partial inline asm review diff -r 61d7e32e70a8 -r ad4d84aba69b run/a/asm_pi2fd_01_A.d --- a/run/a/asm_pi2fd_01_A.d Wed Dec 27 11:59:19 2006 +0000 +++ b/run/a/asm_pi2fd_01_A.d Wed Dec 27 11:59:35 2006 +0000 @@ -16,17 +16,32 @@ int main(){ have3DNow!()(); - int[] a = new int[2]; + int* a = (new int[2]).ptr; a[0] = 6; a[1] = 2; - float[] b = new float[2]; + float* b = (new float[2]).ptr; - asm{ - movq MM1, a; - pi2fd MM0, MM1; - movq b, MM0; - emms; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movq MM1, [EAX]; + pi2fd MM0, MM1; + mov EAX, b; + movq [EAX], MM0; + emms; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movq MM1, [RAX]; + pi2fd MM0, MM1; + mov RAX, b; + movq [RAX], MM0; + emms; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != 6.0f){ diff -r 61d7e32e70a8 -r ad4d84aba69b run/a/asm_pi2fd_01_B.d --- a/run/a/asm_pi2fd_01_B.d Wed Dec 27 11:59:19 2006 +0000 +++ b/run/a/asm_pi2fd_01_B.d Wed Dec 27 11:59:35 2006 +0000 @@ -16,16 +16,30 @@ int main(){ have3DNow!()(); - int[] a = new int[2]; + int* a = (new int[2]).ptr; a[0] = 6; a[1] = 2; - float[] b = new float[2]; + float* b = (new float[2]).ptr; - asm{ - pi2fd MM0, a; - movq b, MM0; - emms; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + pi2fd MM0, [EAX]; + mov EAX, b; + movq [EAX], MM0; + emms; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + pi2fd MM0, [RAX]; + mov RAX, b; + movq [RAX], MM0; + emms; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != 6.0f){ diff -r 61d7e32e70a8 -r ad4d84aba69b run/a/asm_pinsrw_01_C.d --- a/run/a/asm_pinsrw_01_C.d Wed Dec 27 11:59:19 2006 +0000 +++ b/run/a/asm_pinsrw_01_C.d Wed Dec 27 11:59:35 2006 +0000 @@ -16,8 +16,10 @@ int main(){ haveSSE!()(); - ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0]; - ushort* b = new ushort[8]; + ushort[] A = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0]; + ushort* a = A.ptr; + + ushort* b = (new ushort[8]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r 61d7e32e70a8 -r ad4d84aba69b run/a/asm_pinsrw_01_D.d --- a/run/a/asm_pinsrw_01_D.d Wed Dec 27 11:59:19 2006 +0000 +++ b/run/a/asm_pinsrw_01_D.d Wed Dec 27 11:59:35 2006 +0000 @@ -16,8 +16,10 @@ int main(){ haveSSE!()(); - ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0]; - ushort* b = new ushort[8]; + ushort[] A = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0]; + ushort* a = A.ptr; + + ushort* b = (new ushort[8]).ptr; ushort x = 0x34CD; ushort y = 0x0010;