# HG changeset patch # User thomask # Date 1146214097 0 # Node ID 4bc1d14d6851079ddda74a0e527d32e059a4c30e # Parent 5f982ba378c4e907547659585c2e615863297c0e extended SSE asm tests diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addpd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addpd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,43 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addpd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.123, 1234.5]; + static double[2] B = [0.0012, -2.4]; + double[2] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addpd XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] -= 1.1242; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > double.epsilon * 16){ + assert(0); + } + + c[1] -= 1232.1; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + if(c[1] > double.epsilon * 16){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addps_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addps_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,59 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addps_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 20.0f, 0.4f, 1.0f]; + static float[4] B = [4.0f, 10.0f, 4.0f, -1.0f]; + float[4] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addps XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] -= 5.0f; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > float.epsilon * 16){ + assert(0); + } + + c[1] -= 30.0f; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + if(c[1] > float.epsilon * 16){ + assert(0); + } + + c[2] -= 4.4f; + if(c[2] < 0.0){ + c[2] = -c[2]; + } + + if(c[2] > float.epsilon * 16){ + assert(0); + } + + if(c[3] < 0.0){ + c[3] = -c[3]; + } + + if(c[3] > float.epsilon * 16){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addsd_01.d --- a/run/a/asm_addsd_01.d Fri Apr 28 01:22:57 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -// $HeadURL$ -// $Date$ -// $Author$ - -module dstress.run.a.asm_addsd_01; - -int main(){ - version(D_InlineAsm){ - double a = 1.2; - double b = 0.2; - double c = 1.4; - - asm{ - movq XMM0, a; - movq XMM1, b; - addsd XMM1, XMM0; - movq c, XMM1; - } - - a += b; - - b = a-c; - b = (b>0) ? b : (-1 * b); - - assert(b < b.epsilon*4); - - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); - } -} \ No newline at end of file diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addsd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addsd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,39 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addsd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.0, 20.0]; + static double[2] B = [4.0, 10.0]; + double[2] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addsd XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] -= 5.0; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > double.epsilon * 16){ + assert(0); + } + + c[1] -= 20.0; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addss_01.d --- a/run/a/asm_addss_01.d Fri Apr 28 01:22:57 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -// $HeadURL$ -// $Date$ -// $Author$ - -module dstress.run.a.asm_addss_01; - -int main(){ - version(D_InlineAsm){ - float a = 1.2; - float b = 0.2; - float c = 1.4; - - asm{ - movd XMM0, a; - movd XMM1, b; - addss XMM1, XMM0; - movd c, XMM1; - } - - a += b; - - b = a-c; - b = (b>0) ? b : (-1 * b); - - assert(b < b.epsilon*4); - - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); - } -} \ No newline at end of file diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addss_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addss_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addss_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 20.0f, 0.4f, 2.0f]; + static float[4] B = [4.0f, 10.0f, -4.0f, -0.4f]; + float[4] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addss XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] -= 5.0f; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > float.epsilon * 16){ + assert(0); + } + + c[1] -= 20.0f; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + if(c[1] > float.epsilon * 16){ + assert(0); + } + + c[2] -= 0.4f; + if(c[2] < 0.0){ + c[2] = -c[2]; + } + + if(c[2] > float.epsilon * 16){ + assert(0); + } + + c[3] -= 2.0f; + if(c[3] < 0.0){ + c[3] = -c[3]; + } + + if(c[3] > float.epsilon * 16){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addsubpd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addsubpd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,42 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addsubpd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.0, 30.0]; + static double[2] B = [4.0, 10.0]; + double[2] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addsubpd XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] += 3.0; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > double.epsilon * 16){ + assert(0); + } + + c[1] -= 40.0; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + if(c[1] > double.epsilon * 16){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_addsubps_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addsubps_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_addsubps_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f]; + static float[4] B = [0.1f, 0.2f, 0.3f, 0.4f]; + float[4] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + addsubps XMM0, XMM1; + movdqu c, XMM0; + } + + c[0] -= 0.9f; + if(c[0] < 0.0){ + c[0] = -c[0]; + } + + if(c[0] > float.epsilon * 16){ + assert(0); + } + + c[1] -= 2.2f; + if(c[1] < 0.0){ + c[1] = -c[1]; + } + + if(c[1] > float.epsilon * 16){ + assert(0); + } + + c[2] -= 2.7f; + if(c[2] < 0.0){ + c[2] = -c[2]; + } + + if(c[2] > float.epsilon * 16){ + assert(0); + } + + c[3] -= 4.4f; + if(c[3] < 0.0){ + c[3] = -c[3]; + } + + if(c[3] > float.epsilon * 16){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmpisd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmpisd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,51 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmpisd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.0, 2.0]; + static double[2] B = [0.0, 1.0]; + uint i; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + comisd XMM0, XMM1; + mov EAX, 0; + jc done_1; + jz done_1; + jp done_1; + inc EAX; + done_1: + mov i, EAX; + } + + if(i != 1){ + assert(0); + } + + asm{ + movdqu XMM0, B; + movdqu XMM1, A; + comisd XMM0, XMM1; + mov EAX, 0; + jnc done_2; + jz done_2; + jp done_2; + inc EAX; + done_2: + mov i, EAX; + } + + if(i != 1){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmpiss_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmpiss_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,51 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmpiss_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 2.0f, 3.0f, -8.0f]; + static float[4] B = [0.0f, 4.0f, 3.0f, -4.0f]; + uint i; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + comiss XMM0, XMM1; + mov EAX, 0; + jc done_1; + jz done_1; + jp done_1; + inc EAX; + done_1: + mov i, EAX; + } + + if(i != 1){ + assert(0); + } + + asm{ + movdqu XMM0, B; + movdqu XMM1, A; + comiss XMM0, XMM1; + mov EAX, 0; + jnc done_2; + jz done_2; + jp done_2; + inc EAX; + done_2: + mov i, EAX; + } + + if(i != 1){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmppd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmppd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,31 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmppd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.0, 2.0f]; + static double[2] B = [1.1, 2.0f]; + ulong[2] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + cmppd XMM0, XMM1, 0; + movdqu c, XMM0; + } + + if(c[0]){ + assert(0); + } + if(c[1] != ulong.max){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmpps_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmpps_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,37 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmpps_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 2.0f, 3.0f, 4.0f]; + static float[4] B = [1.1f, 1.9f, 3.0f, 4.1f]; + uint[4] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + cmpps XMM0, XMM1, 0; + movdqu c, XMM0; + } + + if(c[0]){ + assert(0); + } + if(c[1]){ + assert(0); + } + if(c[2] != uint.max){ + assert(0); + } + if(c[3]){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmpsd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmpsd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmpsd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [1.0, 2.0]; + static double[2] B = [1.0, 2.0]; + ulong[2] c; + double[2] d; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + cmpsd XMM0, XMM1, 0; + movdqu c, XMM0; + movdqu d, XMM0; + } + + if(c[0] != ulong.max){ + assert(0); + } + if(d[1] != A[1]){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cmpss_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cmpss_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,39 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cmpss_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static float[4] A = [1.0f, 2.0f, 3.0f, 4.0]; + uint[4] c; + float[4] f; + + asm{ + movdqu XMM0, A; + movdqu XMM1, A; + cmpss XMM0, XMM1, 0; + movdqu c, XMM0; + movdqu f, XMM0; + } + + if(c[0] != uint.max){ + assert(0); + } + if(f[1] != A[1]){ + assert(0); + } + if(f[2] != A[2]){ + assert(0); + } + if(f[3] != A[3]){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cvtdq2pd_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cvtdq2pd_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,30 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cvtdq2pd_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static int[4] A = [0, -1, 2, -3]; + double[2] b; + + asm{ + movdqu XMM0, A; + cvtdq2pd XMM1, XMM0; + movdqu b, XMM1; + } + + if(b[0] != 0){ + assert(0); + } + if(b[1] != -1){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cvtdq2ps_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cvtdq2ps_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,36 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cvtdq2ps_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static int[4] A = [0, -1, 2, -3]; + float[4] b; + + asm{ + movdqu XMM0, A; + cvtdq2ps XMM1, XMM0; + movdqu b, XMM1; + } + + if(b[0] != 0.0f){ + assert(0); + } + if(b[1] != -1.0f){ + assert(0); + } + if(b[2] != 2.0f){ + assert(0); + } + if(b[3] != -3.0f){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_cvtpd2dq_01_A.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_cvtpd2dq_01_A.d Fri Apr 28 08:48:17 2006 +0000 @@ -0,0 +1,36 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_cvtpd2dq_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static double[2] A = [-2.0, 4.0]; + int[4] b; + + asm{ + movdqu XMM0, A; + cvtpd2dq XMM1, XMM0; + movdqu b, XMM1; + } + + if(b[0] != -2){ + assert(0); + } + if(b[1] != 4){ + assert(0); + } + if(b[2] != 0){ + assert(0); + } + if(b[3] != 0){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_fnstsw_01.d --- a/run/a/asm_fnstsw_01.d Fri Apr 28 01:22:57 2006 +0000 +++ b/run/a/asm_fnstsw_01.d Fri Apr 28 08:48:17 2006 +0000 @@ -5,11 +5,23 @@ module dstress.run.a.asm_fnstsw_01; int main(){ - version(D_InlineAsm){ - short s; + version(D_InlineAsm_X86){ + ushort a; + uint b; asm{ - fnstsw s; + mov EAX, 0x1234_ABCD; + fnstsw a; + fnstsw AX; + mov b, EAX; + } + + if((b & 0xFFFF_0000) != 0x1234_0000){ + assert(0); + } + + if(a != (b & 0xFFFF)){ + assert(0); } return 0; @@ -17,4 +29,4 @@ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +} diff -r 5f982ba378c4 -r 4bc1d14d6851 run/a/asm_fstsw_01.d --- a/run/a/asm_fstsw_01.d Fri Apr 28 01:22:57 2006 +0000 +++ b/run/a/asm_fstsw_01.d Fri Apr 28 08:48:17 2006 +0000 @@ -5,16 +5,29 @@ module dstress.run.a.asm_fstsw_01; int main(){ - version(D_InlineAsm){ - short s; - + version(D_InlineAsm_X86){ + short a; + int b; + asm{ - fstsw s; + mov EAX, 0x1234_ABCD; + fstsw a; + fstsw AX; + mov b, EAX; } + + if((b & 0xFFFF_0000) != 0x1234_0000){ + assert(0); + } + + if(a != (b & 0xFFFF)){ + assert(0); + } + return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}