# HG changeset patch # User thomask # Date 1166691486 0 # Node ID 236f0d02b8b92b5c63cbe7e619905d06ad35d747 # Parent b3d4452d48ac53f382f9ea5727934e6493bdb8f0 32<->64 iasm fixes diff -r b3d4452d48ac -r 236f0d02b8b9 nocompile/a/asm_offset_01_B.d --- a/nocompile/a/asm_offset_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/nocompile/a/asm_offset_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -6,14 +6,12 @@ // @date@ 2006-04-28 // @uri@ news:bug-116-3@http.d.puremagic.com/bugzilla/ -// __DSTRESS_ELINE__ 26 +// __DSTRESS_ELINE__ 24 module dstress.nocompile.a.asm_offset_01_B; version(D_InlineAsm_X86){ version = runTest; -}else version(D_InlineAsm_X86_64){ - version = runTest; } version(runTest){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_haddpd_01_A.d --- a/run/a/asm_haddpd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_haddpd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,15 +16,15 @@ int main(){ haveSSE3!()(); - double* a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 7.0; a[1] = 11.0; - double* b = new double[2]; + double* b = (new double[2]).ptr; b[0] = 2.0; b[1] = 3.0; - double* c = new double[2]; + double* c = (new double[2]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_haddps_01_A.d --- a/run/a/asm_haddps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_haddps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,19 +16,19 @@ int main(){ haveSSE3!()(); - float* a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 6.1f; a[1] = 7.2f; a[2] = 8.3f; a[3] = 9.4f; - float* b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 1.0f; b[1] = 2.0f; b[2] = 3.0f; b[3] = 4.0f; - float* c = new float[4]; + float* c = (new float[4]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_hsubpd_01_A.d --- a/run/a/asm_hsubpd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_hsubpd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,15 +16,15 @@ int main(){ haveSSE3!()(); - double* a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 2.0; a[1] = 3.0; - double* b = new double[2]; + double* b = (new double[2]).ptr; b[0] = 1.0; b[1] = 4.0; - double* c = new double[2]; + double* c = (new double[2]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_hsubps_01_A.d --- a/run/a/asm_hsubps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_hsubps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,19 +16,19 @@ int main(){ haveSSE3!()(); - float* a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 2.0f; a[1] = 3.0f; a[2] = 6.0f; a[3] = 8.0f; - float* b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 1.0f; b[1] = 4.0f; b[2] = 5.0f; b[3] = 9.0f; - float* c = new float[4]; + float* c = (new float[4]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_lddqu_01.d --- a/run/a/asm_lddqu_01.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_lddqu_01.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,7 +16,7 @@ int main(){ haveSSE3!()(); - ubyte* a = new ubyte[16]; + ubyte* a = (new ubyte[16]).ptr; a[0] = 1; a[1] = 2; a[2] = 3; @@ -34,7 +34,7 @@ a[14] = 15; a[15] = 16; - ubyte* b = new ubyte[16]; + ubyte* b = (new ubyte[16]).ptr; static if(size_t.sizeof == 4){ asm{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movntpd_01_A.d --- a/run/a/asm_movntpd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movntpd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,16 +16,30 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = -1.0; - double[] b = aligned_new!(double)(2, 16); + double* b = (aligned_new!(double)(2, 16)).ptr; - asm{ - movupd XMM0, a; - movntpd b, XMM0; - sfence; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mov EAX, b; + movntpd [EAX], XMM0; + sfence; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mov RAX, b; + movntpd [RAX], XMM0; + sfence; + } + }else{ + static assert(0, "unhandled pointer size"); } if(a[0] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movntps_01_A.d --- a/run/a/asm_movntps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movntps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,17 +16,30 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = -1.0f; a[2] = 0.0f; a[3] = 0.1f; - float[] b = aligned_new!(float)(4, 16); + float* b = (aligned_new!(float)(4, 16)).ptr; - asm{ - movups XMM0, a; - movntps b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movntps [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movntps [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(a[0] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movq2dq_01.d --- a/run/a/asm_movq2dq_01.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movq2dq_01.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,18 +16,34 @@ int main(){ haveSSE!()(); - ulong[] x = new ulong[2]; + ulong* x = (new ulong[2]).ptr; x[0] = 0x0011_2233_4455_6677_8899LU; x[1] = 0x1234_5678_90AB_CDEF; ulong a = 0x1234_ABCD_5678_EF01; - asm{ - movdqu XMM0, x; - movq MM0, a; - movq2dq XMM0, MM0; - movdqu x, XMM0; - emms; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, x; + movdqu XMM0, [EAX]; + movq MM0, a; + movq2dq XMM0, MM0; + mov EAX, x; + movdqu [EAX], XMM0; + emms; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, x; + movdqu XMM0, [RAX]; + movq MM0, a; + movq2dq XMM0, MM0; + mov RAX, x; + movdqu [RAX], XMM0; + emms; + } + }else{ + static assert(0, "unhandled pointer size"); } if(a != 0x1234_ABCD_5678_EF01){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movq_01_B.d --- a/run/a/asm_movq_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movq_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,17 +16,32 @@ int main(){ haveSSE2!()(); - ulong[] a = new ulong[2]; + ulong* a = (new ulong[2]).ptr; a[0] = 0x1234_ABCD_5678_EF90_LU; a[1] = 0x1122_5566_77AA_FFFF_LU; - ulong[] b = new ulong[2]; + + ulong* b = (new ulong[2]).ptr; ulong c = 0x1234_ABCD_5678_EF01_LU; - asm{ - movdqu XMM0, a; - movq XMM0, c; - movdqu b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + movq c, XMM0; + mov EAX, b; + movq [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movdqu XMM0, [RAX]; + movq c, XMM0; + mov RAX, b; + movq [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != c){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movq_01_C.d --- a/run/a/asm_movq_01_C.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movq_01_C.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,21 +16,38 @@ int main(){ haveSSE2!()(); - ulong[] a = new ulong[2]; + ulong* a = (new ulong[2]).ptr; a[0] = 0x1234_ABCD_5678_EF90_LU; a[1] = 0x1122_2222_5555_FFFF_LU; - ulong[] b = new ulong[2]; + ulong* b = (new ulong[2]).ptr; b[0] = 0x1000_1111_5678_EF90_LU; b[1] = 0x1122_5566_77AA_FFFF_LU; - ulong[] c = new ulong[2]; + ulong* c = (new ulong[2]).ptr; - asm{ - movdqu XMM0, a; - movdqu XMM1, b; - movq XMM0, XMM1; - movdqu c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + mov EAX, b; + movdqu XMM1, [EAX]; + movq 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]; + movq XMM0, XMM1; + mov RAX, c; + movdqu [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[1] == a[1]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movsd_01_A.d --- a/run/a/asm_movsd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movsd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,15 +16,26 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 2.0; double b; - asm{ - movupd XMM0, a; - movsd b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + movsd b, XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + movsd b, XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b != a[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movsd_01_B.d --- a/run/a/asm_movsd_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movsd_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,17 +16,31 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 2.0; double b = 3.0; - double[] c = new double[2]; + double* c = (new double[2]).ptr; - asm{ - movupd XMM0, A; - movsd XMM0, b; - movupd c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + movsd XMM0, b; + mov EAX, c; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + movsd XMM0, b; + mov RAX, c; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != b){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movsd_01_C.d --- a/run/a/asm_movsd_01_C.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movsd_01_C.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,21 +16,38 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 2.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; b[0] = 3.0; b[1] = 4.0; - double[] c = new double[2]; + double* c = (new double[2]).ptr; - asm{ - movupd XMM0, a; - movupd XMM1, b; - movsd XMM0, XMM1; - movupd c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mov EAX, b; + movupd XMM1, [EAX]; + movsd XMM0, XMM1; + mov EAX,c; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mov RAX, b; + movupd XMM1, [RAX]; + movsd XMM0, XMM1; + mov RAX,c; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movshdup_01_A.d --- a/run/a/asm_movshdup_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movshdup_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -14,18 +14,32 @@ import addon.cpuinfo; int main(){ - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = -1.0f; a[2] = -2.0f; a[3] = 2.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; - asm{ - movups XMM0, a; - movshdup XMM1, XMM0; - movups b, XMM1; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + movshdup XMM1, XMM0; + mov EAX, b; + movups [EAX], XMM1; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + movshdup XMM1, XMM0; + mov RAX, b; + movups [RAX], XMM1; + } + }else{ + static assert(0, "unhandled pointer size"); } if(a[1] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movsldup_01_A.d --- a/run/a/asm_movsldup_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movsldup_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,18 +16,25 @@ int main(){ haveSSE3!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = -1.0f; a[2] = -2.0f; a[3] = 2.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; - asm{ - movups XMM0, a; - movsldup XMM1, XMM0; - movups b, XMM1; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + movsldup XMM1, XMM0; + mov EAX, b; + movups [EAX], XMM1; + } + }else static if(size_t.sizeof == 8){ + }else{ + static assert(0, "unhandled pointer size"); } if(a[0] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movss_01_A.d --- a/run/a/asm_movss_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movss_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,7 +16,7 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; @@ -24,12 +24,26 @@ float b = 9.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movss XMM0, b; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + movss XMM0, b; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + movss XMM0, b; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != b){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movss_01_B.d --- a/run/a/asm_movss_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movss_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; a[3] = 4.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 5.0f; b[1] = 6.0f; b[2] = 7.0f; b[3] = 9.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - movss XMM0, XMM1; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + movss XMM0, XMM1; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + movss XMM0, XMM1; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != b[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movss_01_C.d --- a/run/a/asm_movss_01_C.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movss_01_C.d Thu Dec 21 08:58:06 2006 +0000 @@ -15,7 +15,7 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; @@ -23,9 +23,20 @@ float b; - asm{ - movups XMM0, a; - movss b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + movss b, XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + movss b, XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b != a[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movupd_01_A.d --- a/run/a/asm_movupd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movupd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,15 +16,28 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 4.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; - asm{ - movdqu XMM0, a; - movupd b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + mov EAX, b; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movdqu XMM0, [RAX]; + mov RAX, b; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != a[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movupd_01_B.d --- a/run/a/asm_movupd_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movupd_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,16 +16,30 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 4.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; - asm{ - movdqu XMM0, a; - movupd XMM1, XMM0; - movdqu b, XMM1; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movdqu XMM0, [EAX]; + movupd XMM1, XMM0; + mov EAX, b; + movdqu [EAX], XMM1; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movdqu XMM0, [RAX]; + movupd XMM1, XMM0; + mov RAX, b; + movdqu [RAX], XMM1; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != a[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movupd_01_C.d --- a/run/a/asm_movupd_01_C.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movupd_01_C.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,15 +16,28 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 1.0; a[1] = 4.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; - asm{ - movupd XMM0, a; - movdqu b, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mov EAX, b; + movdqu [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mov RAX, b; + movdqu [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(b[0] != a[0]){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movups_01_A.d --- a/run/a/asm_movups_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movups_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -2,6 +2,8 @@ // $Date$ // $Author$ +// __DSTRESS_TORTURE_BLOCK__ -fPIC + module dstress.run.a.asm_movups_01_A; version(D_InlineAsm_X86){ @@ -16,29 +18,24 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; - a[0] = 1.0f; - a[1] = 2.0f; - a[2] = 3.0f; - a[3] = 4.0f; - - float[] b = new float[4]; + float[4] a = [1.0f, 2.0f, 3.0f, 4.0f]; + float[4] b; asm{ - movdqu XMM0, A; + movdqu XMM0, a; movups b, XMM0; } - if(b[0] != A[0]){ + if(b[0] != a[0]){ assert(0); } - if(b[1] != A[1]){ + if(b[1] != a[1]){ assert(0); } - if(b[2] != A[2]){ + if(b[2] != a[2]){ assert(0); } - if(b[3] != A[3]){ + if(b[3] != a[3]){ assert(0); } diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movups_01_B.d --- a/run/a/asm_movups_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movups_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -2,6 +2,8 @@ // $Date$ // $Author$ +// __DSTRESS_TORTURE_BLOCK__ -fPIC + module dstress.run.a.asm_movups_01_B; version(D_InlineAsm_X86){ @@ -16,13 +18,8 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; - a[0] = 1.0f; - a[1] = 2.0f; - a[2] = 3.0f; - a[3] = 4.0f; - - float[] b = new float[4]; + float[4] a = [1.0f, 2.0f, 3.0f, 4.0f]; + float[4] b; asm{ movdqu XMM0, a; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_movups_01_C.d --- a/run/a/asm_movups_01_C.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_movups_01_C.d Thu Dec 21 08:58:06 2006 +0000 @@ -2,6 +2,8 @@ // $Date$ // $Author$ +// __DSTRESS_TORTURE_BLOCK__ -fPIC + module dstress.run.a.asm_movups_01_C; version(D_InlineAsm_X86){ @@ -16,13 +18,8 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; - a[0] = 1.0f; - a[1] = 2.0f; - a[2] = 3.0f; - a[3] = 4.0f; - - float[] b = new float[4]; + float[4] a = [1.0f, 2.0f, 3.0f, 4.0f]; + float[4] b; asm{ movups XMM0, a; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_mulsd_01_A.d --- a/run/a/asm_mulsd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_mulsd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,21 +16,38 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 7.0; a[1] = 4.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; b[0] = 3.0; b[1] = 2.0; - double[] c = new double[2]; + double* c = (new double[2]).ptr; - asm{ - movupd XMM0, a; - movupd XMM1, b; - mulsd XMM0, XMM1; - movupd c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mov EAX, b; + movupd XMM1, [EAX]; + mulsd XMM0, XMM1; + mov EAX, c; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mov RAX, b; + movupd XMM1, [RAX]; + mulsd XMM0, XMM1; + mov RAX, c; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 21.0){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_mulsd_01_B.d --- a/run/a/asm_mulsd_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_mulsd_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,18 +16,32 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 7.0; a[1] = 4.0; double b = 2.0; - double[] c = new double[2]; + double* c = (new double[2]).ptr; - asm{ - movupd XMM0, a; - mulsd XMM0, b; - movupd c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mulsd XMM0, b; + mov EAX, c; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mulsd XMM0, b; + mov RAX, c; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 14.0){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_mulss_01_A.d --- a/run/a/asm_mulss_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_mulss_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 7.0f; a[1] = 4.0f; a[2] = 1.0f; a[3] = -2.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 3.0f; b[1] = 2.0f; b[2] = 0.0f; b[3] = 5.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - mulss XMM0, XMM1; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + mulss XMM0, XMM1; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + mulss XMM0, XMM1; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 21.0f){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_mulss_01_B.d --- a/run/a/asm_mulss_01_B.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_mulss_01_B.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,7 +16,7 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 7.0f; a[1] = 4.0f; a[2] = 1.0f; @@ -24,12 +24,26 @@ float b = 5.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - mulss XMM0, b; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mulss XMM0, b; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mulss XMM0, b; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 35.0f){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_offset_01_A.d --- a/run/a/asm_offset_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_offset_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -23,7 +23,7 @@ static if(size_t.sizeof == 4){ asm{ - mov EAX, offsetof b; + mov EAX, offset b; mov y, EAX; } }else{ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_orpd_01_A.d --- a/run/a/asm_orpd_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_orpd_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,21 +16,38 @@ int main(){ haveSSE2!()(); - double[] a = new double[2]; + double* a = (new double[2]).ptr; a[0] = 4.0; a[1] = 8.0; - double[] b = new double[2]; + double* b = (new double[2]).ptr; b[0] = 3.0; b[1] = 4.0; - double[] c = new double[2]; + double* c = (new double[2]).ptr; - asm{ - movupd XMM0, a; - movupd XMM1, b; - orpd XMM0, XMM1; - movupd c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movupd XMM0, [EAX]; + mov EAX, b; + movupd XMM1, [EAX]; + orpd XMM0, XMM1; + mov EAX, c; + movupd [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movupd XMM0, [RAX]; + mov RAX, b; + movupd XMM1, [RAX]; + orpd XMM0, XMM1; + mov RAX, c; + movupd [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 6.0){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_orps_01_A.d --- a/run/a/asm_orps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_orps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 5.0f; a[1] = 10.0f; a[2] = 1.0f; a[3] = 17.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 6.0f; b[1] = 9.0f; b[2] = -2.0f; b[3] = 20.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - orpd XMM0, XMM1; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + orpd XMM0, XMM1; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + orpd XMM0, XMM1; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } if(c[0] != 7.0f){ diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_rcpps_01_A.d --- a/run/a/asm_rcpps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_rcpps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,18 +16,32 @@ int main(){ haveSSE2!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 0.5f; a[3] = -4.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; - asm{ - movups XMM0, a; - rcpps XMM1, XMM0; - movups b, XMM1; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + rcpps XMM1, XMM0; + mov EAX, b; + movups [EAX], XMM1; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + rcpps XMM1, XMM0; + mov RAX, b; + movups [RAX], XMM1; + } + }else{ + static assert(0, "unhandled pointer size"); } b[0] -= 1.0f; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_rcpss_01_A.d --- a/run/a/asm_rcpss_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_rcpss_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE2!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 2.0f; a[1] = 1.0f; a[2] = 0.5f; a[3] = -4.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = 5.0f; b[1] = 6.0f; b[2] = 7.0f; b[3] = 8.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - rcpss XMM1, XMM0; - movups c, XMM1; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + rcpss XMM1, XMM0; + mov EAX, c; + movups [EAX], XMM1; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + rcpss XMM1, XMM0; + mov RAX, c; + movups [RAX], XMM1; + } + }else{ + static assert(0, "unhandled pointer size"); } c[0] -= 0.5f; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_rsqrtps_01_A.d --- a/run/a/asm_rsqrtps_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_rsqrtps_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; a[3] = 4.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = -1.0f; b[1] = 1.0f; b[2] = 4.0f; b[3] = -4.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - rsqrtps XMM0, XMM1; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + rsqrtps XMM0, XMM1; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + rsqrtps XMM0, XMM1; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } c[0] += 1.0f; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_rsqrtss_01_A.d --- a/run/a/asm_rsqrtss_01_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_rsqrtss_01_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -16,25 +16,42 @@ int main(){ haveSSE!()(); - float[] a = new float[4]; + float* a = (new float[4]).ptr; a[0] = 1.0f; a[1] = 2.0f; a[2] = 3.0f; a[3] = 4.0f; - float[] b = new float[4]; + float* b = (new float[4]).ptr; b[0] = -1.0f; b[1] = 1.0f; b[2] = 4.0f; b[3] = -4.0f; - float[] c = new float[4]; + float* c = (new float[4]).ptr; - asm{ - movups XMM0, a; - movups XMM1, b; - rsqrtss XMM0, XMM1; - movups c, XMM0; + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + movups XMM0, [EAX]; + mov EAX, b; + movups XMM1, [EAX]; + rsqrtss XMM0, XMM1; + mov EAX, c; + movups [EAX], XMM0; + } + }else static if(size_t.sizeof == 8){ + asm{ + mov RAX, a; + movups XMM0, [RAX]; + mov RAX, b; + movups XMM1, [RAX]; + rsqrtss XMM0, XMM1; + mov RAX, c; + movups [RAX], XMM0; + } + }else{ + static assert(0, "unhandled pointer size"); } c[0] += 1.0f; diff -r b3d4452d48ac -r 236f0d02b8b9 run/a/asm_smsw_02_A.d --- a/run/a/asm_smsw_02_A.d Tue Dec 19 15:00:26 2006 +0000 +++ b/run/a/asm_smsw_02_A.d Thu Dec 21 08:58:06 2006 +0000 @@ -20,7 +20,7 @@ mov a, EAX; } - if(a == 0){ + if(a & 0xFFFF == 0){ assert(0); }