Mercurial > projects > dstress
changeset 993:861fe190f7ef
inline ASM review
line wrap: on
line diff
--- a/addon/cpuinfo.d Wed May 10 19:00:54 2006 +0000 +++ b/addon/cpuinfo.d Fri May 12 18:01:12 2006 +0000 @@ -129,19 +129,22 @@ throw new Exception("no X86 SSE2 support present"); } } - -void haveSSE3(){ - uint a = 0; + +template haveSSE3(){ + void haveSSE3(){ + uint a = 1; + uint b = 0; - version(haveX86InlineAsm){ - asm{ - mov EAX, 1; - cpuid; - mov a, ECX; + version(haveX86InlineAsm){ + asm{ + mov EAX, a; + cpuid; + mov b, ECX; + } + } + + if(!(a & 1)){ + throw new Exception("DSTRESS{XFAIL}: no SSE3 support present"); } } - - if(!(a & 1)){ - throw new Exception("no X86 SSE3 support present"); - } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fld_02_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,36 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fld_02_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + const float a = 1.2f; + float b; + + asm{ + fld a; + fst b; + } + + if(b != 1.2f){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_ftst_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,54 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_ftst_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f; + ushort s; + + asm{ + fldpi; + fldpi; + fld1; + ftst; + fstsw s; + fstp f; + } + + if(f != 1.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(s & C0){ + assert(0); + } + if(s & C2){ + assert(0); + } + if(s & C3){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fucom_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fucom_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f1 = float.nan; + float f2; + ushort s; + + asm{ + fldz; + fldz; + fld1; + fld f1; + fucom; + fstsw s; + fstp f1; + fstp f2; + } + + if(!(f1 !<>= 0.0f)){ + assert(0); + } + if(f2 != 1.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(!(s & C0)){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(!(s & C3)){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fucom_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,61 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fucom_01_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f1 = float.nan; + float f2; + + ushort s; + + asm{ + fldz; + fld f1; + fld1; + fldz; + fucom ST(2); + fstsw s; + fstp f1; + fstp f2; + } + + if(f1 != 0.0f){ + assert(0); + } + if(f2 != 1.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(!(s & C0)){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(!(s & C3)){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fucomp_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fucomp_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f1 = float.nan; + float f2; + ushort s; + + asm{ + fldz; + fld1; + fldz; + fld f1; + fucomp; + fstsw s; + fstp f1; + fstp f2; + } + + if(f1 != 0.0f){ + assert(0); + } + if(f2 != 1.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(!(s & C0)){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(!(s & C3)){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fucomp_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,61 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fucomp_01_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f1 = float.nan; + float f2; + + ushort s; + + asm{ + fld f1; + fldz; + fld1; + fldz; + fucomp ST(3); + fstsw s; + fstp f1; + fstp f2; + } + + if(f1 != 1.0f){ + assert(0); + } + if(f2 != 0.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(!(s & C0)){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(!(s & C3)){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fucompp_01.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fucompp_01; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f1 = float.nan; + float f2; + ushort s; + + asm{ + fldz; + fld1; + fld f1; + fldz; + fcompp; + fstsw s; + fstp f1; + fstp f2; + } + + if(f1 != 1.0f){ + assert(0); + } + if(f2 != 0.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(!(s & C0)){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(!(s & C3)){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_fwait_01.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_fwait_01.d Fri May 12 18:01:12 2006 +0000 @@ -4,15 +4,21 @@ module dstress.run.a.asm_fwait_01; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ asm{ fwait; } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fxam_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,52 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fxam_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float f; + ushort s; + + asm{ + fld1; + fxam; + fstsw s; + fstp f; + } + + if(f != 1.0f){ + assert(0); + } + + ushort C0 = 1 << 8; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + if(s & C0){ + assert(0); + } + if(!(s & C2)){ + assert(0); + } + if(s & C3){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_fxch_01.d Wed May 10 19:00:54 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -// $HeadURL$ -// $Date$ -// $Author$ - -module dstress.run.a.asm_fxch_01; - -int main(){ - version(D_InlineAsm){ - real a = -1.0f; - real b = 3.5f; - - real a2, b2; - - asm{ - finit; - fld a; - fld b; - fxch; - fstp b2; - fstp a2; - } - - assert(a2==b); - assert(b2==a); - - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); - } -} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fxch_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,44 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fxch_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float a = -1.0f; + float b = 3.5f; + + float a2, b2; + + asm{ + fld a; + fld b; + fxch; + fstp b2; + fst a2; + } + + if(a2 != b){ + assert(0); + } + if(b2 != a){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fxch_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,49 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fxch_01_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float a = -1.0f; + float b = 3.5f; + + float a2, b2, x2; + + asm{ + fld a; + fld1; + fld b; + fxch ST(2); + fstp b2; + fstp x2; + fst a2; + } + + if(a2 != b){ + assert(0); + } + if(x2 != 1.0f){ + assert(0); + } + if(b2 != a){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fxrstor_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,44 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_fxrstor_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + ubyte[512] state; + + float a; + float b; + + asm{ + fld1; + fldz; + fxsave state; + fldpi; + fxrstor state; + fstp a; + fst b; + } + + if(a != 0.0f){ + assert(0); + } + if(b != 1.0f){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_fxtract_01.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_fxtract_01.d Fri May 12 18:01:12 2006 +0000 @@ -4,26 +4,45 @@ module dstress.run.a.asm_fxtract_01; -int main(){ - version(D_InlineAsm){ - real a = -8.0f; - - double exponent, significand; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float a = -8.0f; + float exponent; + float significand; + float f; asm{ - finit; + fldz; fld a; fxtract; fstp significand; fstp exponent; + fst f; } - assert(significand == -1.0f); - assert(exponent == 3.0f); + if(significand != -1.0f){ + assert(0); + } + if(exponent != 3.0f){ + assert(0); + } + if(f != 0.0f){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_fyl2x_01.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_fyl2x_01.d Fri May 12 18:01:12 2006 +0000 @@ -4,24 +4,40 @@ module dstress.run.a.asm_fyl2x_01; -int main(){ - version(D_InlineAsm){ - real a = -2.0L; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float a = -2.0f; + float b; asm{ - finit; + fld a; fld a; fld1; fyl2x; - fstp a; - fstp a; + fstp b; + fst a; } - assert(a == -0.0L); + if(b != -0.0f){ + assert(0); + } + if(a != -2.0f){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_fyl2xp1_01.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_fyl2xp1_01.d Fri May 12 18:01:12 2006 +0000 @@ -4,12 +4,21 @@ module dstress.run.a.asm_fyl2xp1_01; -int main(){ - version(D_InlineAsm){ - real a = -0.0L; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveFPU!()(); + + float a = -0.0f; asm{ - finit; fld a; fld a; fyl2xp1; @@ -17,11 +26,13 @@ fstp a; } - assert(a == 0.0L); + if(a != 0.0L){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_haddpd_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_haddpd_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,17 +4,27 @@ module dstress.run.a.asm_haddpd_01_A; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE3!()(); + static double[2] A = [7.0, 11.0]; static double[2] B = [2.0, 3.0]; double[2] c; asm{ - movdqu XMM0, A; - movdqu XMM1, B; + movupd XMM0, A; + movupd XMM1, B; haddpd XMM0, XMM1; - movdqu c, XMM0; + movupd c, XMM0; } c[0] -= 18.0; @@ -34,8 +44,8 @@ } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }
--- a/run/a/asm_haddps_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_haddps_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,17 +4,27 @@ module dstress.run.a.asm_haddps_01_A; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE3!()(); + static float[4] A = [6.1f, 7.2f, 8.3f, 9.4f]; static float[4] B = [1.0f, 2.0f, 3.0f, 4.0f]; float[4] c; asm{ - movdqu XMM0, A; - movdqu XMM1, B; + movups XMM0, A; + movups XMM1, B; haddps XMM0, XMM1; - movdqu c, XMM0; + movups c, XMM0; } c[0] -= 13.3f; @@ -49,8 +59,8 @@ assert(0); } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }
--- a/run/a/asm_hsubpd_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_hsubpd_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,17 +4,27 @@ module dstress.run.a.asm_hsubpd_01_A; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE3!()(); + static double[2] A = [2.0, 3.0]; static double[2] B = [1.0, 4.0]; double[2] c; asm{ - movdqu XMM0, A; - movdqu XMM1, B; + movupd XMM0, A; + movupd XMM1, B; hsubpd XMM0, XMM1; - movdqu c, XMM0; + movupd c, XMM0; } c[0] += 1.0; @@ -34,8 +44,8 @@ } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }
--- a/run/a/asm_hsubps_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_hsubps_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,17 +4,27 @@ module dstress.run.a.asm_hsubps_01_A; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE3!()(); + static float[4] A = [2.0f, 3.0f, 6.0f, 8.0f]; static float[4] B = [1.0f, 4.0f, 5.0f, 9.0f]; float[4] c; asm{ - movdqu XMM0, A; - movdqu XMM1, B; + movups XMM0, A; + movups XMM1, B; hsubps XMM0, XMM1; - movdqu c, XMM0; + movups c, XMM0; } c[0] += 1.0f; @@ -49,8 +59,8 @@ assert(0); } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }
--- a/run/a/asm_idiv_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_idiv_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,41 +4,44 @@ module dstress.run.a.asm_idiv_01_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ byte y = 2; - byte a = 0x00; - byte b = - 0x7F; + ushort a = 0x00_81; asm{ - mov AH, a; - mov AL, b; + mov AX, a; idiv y; - mov a, AL; - mov b, AH; + mov a, AX; } - - assert(a==0x40); - assert(b==1); + if(a != 0x0140){ + assert(0); + } - a = 0x00_00; - b = - 0x7E; + a = 0x00_80; asm{ - mov AH, a; - mov AL, b; + mov AX, a; idiv y; - mov a, AL; - mov b, AH; + mov a, AX; } - assert(a==0x41); - assert(b==0); + if(a != 0x0040){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_idiv_01_B.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_idiv_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_idiv_01_B; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ short y = 2; short a = 0x00_00; @@ -19,8 +25,12 @@ mov b, DX; } - assert(a==0x78_00); - assert(b==1); + if(a != 0x78_00){ + assert(0); + } + if(b != 1){ + assert(0); + } a = 0x00_00; b = - 0x0F_FE; @@ -33,12 +43,16 @@ mov b, DX; } - assert(a==0x78_01); - assert(b==0); + if(a != 0x78_01){ + assert(0); + } + if(b != 0){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_idiv_01_C.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_idiv_01_C.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_idiv_01_C; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ int y = -2; int a = 0x00_00_00_00; @@ -19,8 +25,12 @@ mov b, EDX; } - assert(a==0x88_00_00_00u); - assert(b==1); + if(a != 0x88_00_00_00u){ + assert(0); + } + if(b != 1){ + assert(0); + } a = 0x00_00_00_00; b = 0x0F_FF_FF_FE; @@ -33,12 +43,16 @@ mov b, EDX; } - assert(a==0xF8_00_00_01u); - assert(b==0); + if(a != 0xF8_00_00_01u){ + assert(0); + } + if(b != 0){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_idiv_02_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_idiv_02_A.d Fri May 12 18:01:12 2006 +0000 @@ -2,22 +2,48 @@ // $Date$ // $Author$ -module dstress.run.a.asm_neg_02_A; +module dstress.run.a.asm_idiv_02_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ byte y = 2; - + + ushort a = 0x00_81; + asm{ - lock; - neg y; + mov AX, a; + mov CL, y; + idiv CL; + mov a, AX; + } + if(a != 0x0140){ + assert(0); } + + a = 0x00_80; - assert(y == -2); + asm{ + mov AX, a; + mov CL, y; + idiv CL; + mov a, AX; + } + + if(a != 0x0040){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_idiv_02_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_idiv_02_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + short y = 2; + + short a = 0x00_00; + short b = - 0x0F_FF; + + asm{ + mov DX, a; + mov AX, b; + mov CX, y; + idiv CX; + mov a, AX; + mov b, DX; + } + + if(a != 0x78_00){ + assert(0); + } + if(b != 1){ + assert(0); + } + + a = 0x00_00; + b = - 0x0F_FE; + + asm{ + mov DX, a; + mov AX, b; + mov CX, y; + idiv CX; + mov a, AX; + mov b, DX; + } + + if(a != 0x78_01){ + assert(0); + } + if(b != 0){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_idiv_02_C.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_idiv_02_C; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + int y = -2; + + int a = 0x00_00_00_00; + int b = - 0x0F_FF_FF_FF; + + asm{ + mov EDX, a; + mov EAX, b; + mov ECX, y; + idiv ECX; + mov a, EAX; + mov b, EDX; + } + + if(a != 0x88_00_00_00u){ + assert(0); + } + if(b != 1){ + assert(0); + } + + a = 0x00_00_00_00; + b = 0x0F_FF_FF_FE; + + asm{ + mov EDX, a; + mov EAX, b; + mov ECX, y; + idiv ECX; + mov a, EAX; + mov b, EDX; + } + + if(a != 0xF8_00_00_01u){ + assert(0); + } + if(b != 0){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_imul_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_imul_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_imul_01_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ byte a = -2; byte b = 3; @@ -15,11 +21,13 @@ mov b, AL; } - assert(b==-6); + if(b != -6){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_imul_01_B.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_imul_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_imul_01_B; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ short a = -2; short b = 3; @@ -15,11 +21,13 @@ mov b, AX; } - assert(b==-6); + if(b != -6){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_imul_01_C.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_imul_01_C.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_imul_01_C; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ int a = -2; int b = 3; @@ -15,11 +21,13 @@ mov b, EAX; } - assert(b==-6); + if(b != -6){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_imul_02_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_imul_02_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_imul_02_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ int a = -2; int b = 3; @@ -15,11 +21,13 @@ mov b, EAX; } - assert(b==-6); + if(b != -6){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_imul_02_B.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_imul_02_B.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_imul_02_B; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ short a = -2; short b = 3; @@ -15,11 +21,13 @@ mov b, AX; } - assert(b==-6); + if(b != -6){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_imul_03_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_imul_03_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + byte a = -2; + byte b = 3; + + asm{ + mov AL, a; + mov BL, b; + imul BL; + mov b, AL; + } + + if(b != -6){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_imul_03_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_imul_03_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + short a = -2; + short b = 3; + + asm{ + mov AX, a; + mov BX, b; + imul BX; + mov b, AX; + } + + if(b != -6){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_imul_03_C.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_imul_03_C; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + int a = -2; + int b = 3; + + asm{ + mov EAX, a; + mov EBX, b; + imul EBX; + mov b, EAX; + } + + if(b != -6){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_imul_04_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_imul_04_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + int a = -2; + int b = 3; + + asm{ + mov EAX, a; + mov EBX, b; + imul EAX, EBX; + mov b, EAX; + } + + if(b != -6){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_imul_04_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,34 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_imul_04_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + short a = -2; + short b = 3; + + asm{ + mov AX, a; + mov BX, b; + imul AX, BX; + mov b, AX; + } + + if(b != -6){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_inc_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_inc_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,23 +4,30 @@ module dstress.run.a.asm_inc_01_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + + +version(runTest){ + int main(){ uint i = 0x12_34_5F_FFu; - assert(i==0x12_34_5F_FFu); - asm{ mov EAX, i; inc AL; mov i, EAX; } - assert(i==0x12_34_5F_00u); + if(i != 0x12_34_5F_00u){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_inc_01_B.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_inc_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -4,23 +4,29 @@ module dstress.run.a.asm_inc_01_B; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ uint i = 0x12_3F_FF_FFu; - assert(i==0x12_3F_FF_FFu); - asm{ mov EAX, i; inc AX; mov i, EAX; } - assert(i==0x12_3F_00_00u); + if(i != 0x12_3F_00_00u){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_inc_01_C.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_inc_01_C.d Fri May 12 18:01:12 2006 +0000 @@ -4,23 +4,29 @@ module dstress.run.a.asm_inc_01_C; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ uint i = 0xFF_FF_FF_FFu; - assert(i==0xFF_FF_FF_FFu); - asm{ mov EAX, i; inc EAX; mov i, EAX; } - assert(i==0x00_00_00_00u); + if(i != 0x00_00_00_00u){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_inc_02_A.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,31 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_inc_02_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + + +version(runTest){ + int main(){ + byte b = 0x2F; + + asm{ + inc b; + } + + if(b != 0x30){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_inc_02_B.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,31 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_inc_02_B; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + + +version(runTest){ + int main(){ + short b = 0x342F; + + asm{ + inc b; + } + + if(b != 0x3430){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_inc_02_C.d Fri May 12 18:01:12 2006 +0000 @@ -0,0 +1,31 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_inc_02_C; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + + +version(runTest){ + int main(){ + int b = 0x12_FF_FF_FF; + + asm{ + inc b; + } + + if(b != 0x13_00_00_00){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_ja_01_A.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_ja_01_A.d Fri May 12 18:01:12 2006 +0000 @@ -4,24 +4,28 @@ module dstress.run.a.asm_ja_01_A; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ uint a=5; uint b=5; asm{ mov EAX, a; cmp EAX, b; - ja save; - add EAX, 1; - save: mov a, EAX; + ja error; } - assert(a == 6); - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); + error: + assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_ja_01_B.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_ja_01_B.d Fri May 12 18:01:12 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_ja_01_B; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ uint a=5; uint b=4; @@ -13,15 +19,14 @@ mov EAX, a; cmp EAX, b; ja save; - add EAX, 1; - save: mov a, EAX; } - assert(a == 5); - + assert(0); + + save: return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_ja_01_C.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_ja_01_C.d Fri May 12 18:01:12 2006 +0000 @@ -4,24 +4,29 @@ module dstress.run.a.asm_ja_01_C; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ uint a=5; uint b=6; asm{ mov EAX, a; cmp EAX, b; - ja save; - add EAX, 1; - save: mov a, EAX; + ja error; } - assert(a == 6); + return 0; - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); + error: + assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_jmp_01.d Wed May 10 19:00:54 2006 +0000 +++ b/run/a/asm_jmp_01.d Fri May 12 18:01:12 2006 +0000 @@ -4,14 +4,20 @@ module dstress.run.a.asm_jmp_01; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ int a = 0; asm{ mov EAX, 0; add EAX, 1; - save1: mov a, EAX; + mov a, EAX; } if(a != 1){ @@ -31,8 +37,8 @@ return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }