Mercurial > projects > dstress
changeset 712:aebd2e3d6382
minor iasm fixes (floating points)
author | thomask |
---|---|
date | Sun, 23 Oct 2005 10:32:26 +0000 |
parents | 5c3e15ed07b6 |
children | 60009f2d4a3e |
files | run/a/asm_f2xm1_01.d run/a/asm_fabs_01.d run/a/asm_fadd_01_A.d run/a/asm_fadd_01_B.d run/a/asm_faddp_01.d run/a/asm_fbld_01.d run/a/asm_fbstp_01.d run/a/asm_fchs_01.d run/a/asm_fcom_01_A.d run/a/asm_fcom_01_B.d |
diffstat | 10 files changed, 210 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/run/a/asm_f2xm1_01.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_f2xm1_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + module dstress.run.a.asm_f2xm1_01; +import addon.cpuinfo; int main(){ version(D_InlineAsm){ + haveFPU(); + float f = -1.0f; asm{
--- a/run/a/asm_fabs_01.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_fabs_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ -module dstress.run.a.asm_fabs_01; +// __DSTRESS_DFLAGS__ addon/cpuinfo.d +module dstress.run.a.asm_fabs_01; +import addon.cpuinfo; + int main(){ - version(D_InlineAsm){ + version(D_InlineAsm){ + haveFPU(); + float f = -1.0f; asm{
--- a/run/a/asm_fadd_01_A.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_fadd_01_A.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + module dstress.run.a.asm_fadd_01_A; +import addon.cpuinfo; int main(){ version(D_InlineAsm){ + haveFPU(); + float a = -1.0f; float b = 3.5f;
--- a/run/a/asm_fadd_01_B.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_fadd_01_B.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + module dstress.run.a.asm_fadd_01_B; +import addon.cpuinfo; int main(){ version(D_InlineAsm){ + haveFPU(); + double a = -1.0f; double b = 3.5f;
--- a/run/a/asm_faddp_01.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_faddp_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + module dstress.run.a.asm_faddp_01; +import addon.cpuinfo; int main(){ version(D_InlineAsm){ + haveFPU(); + double a = -1.0f; double b = 3.5f;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fbld_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -0,0 +1,45 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + +module dstress.run.a.asm_fbld_01; +import addon.cpuinfo; + +int main(){ + version(D_InlineAsm){ + haveFPU(); + + byte[10] raw; + + raw[0] = 1 | (2 << 4); + raw[1] = 3 | (4 << 4); + raw[2] = 5 | (6 << 4); + raw[3] = 0; + raw[4] = 0; + raw[5] = 0; + raw[6] = 0; + raw[7] = 0; + raw[8] = 0; + raw[9] = 0; + + real r = 17; + + asm{ + fbld raw; + fstp r; + } + + r -= 654321.0; + + r = (r<0) ? (-r) : r; + + assert(r < r.epsilon * 4); + + 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_fbstp_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -0,0 +1,39 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + +module dstress.run.a.asm_fbstp_01; +import addon.cpuinfo; + +int main(){ + version(D_InlineAsm){ + haveFPU(); + + byte[10] raw; + + real r = 654321.0L; + + asm{ + fld r; + fbstp raw; + } + + assert(raw[0] == 1 | (2 << 4)); + assert(raw[1] == 3 | (4 << 4)); + assert(raw[2] == 5 | (6 << 4)); + assert(raw[3] == 0); + assert(raw[4] == 0); + assert(raw[5] == 0); + assert(raw[6] == 0); + assert(raw[7] == 0); + assert(raw[8] == 0); + assert(raw[9] == 0); + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} \ No newline at end of file
--- a/run/a/asm_fchs_01.d Sun Oct 23 10:31:14 2005 +0000 +++ b/run/a/asm_fchs_01.d Sun Oct 23 10:32:26 2005 +0000 @@ -2,10 +2,15 @@ // $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ // $Author: thomask $ +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + module dstress.run.a.asm_fchs_01; +import addon.cpuinfo; int main(){ version(D_InlineAsm){ + haveFPU(); + real a = -1.2L; asm{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_fcom_01_A.d Sun Oct 23 10:32:26 2005 +0000 @@ -0,0 +1,46 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_adc_01_A.d $ +// $Date: 2005-08-24 00:23:55 +0200 (Wed, 24 Aug 2005) $ +// $Author: thomask $ + +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + +module dstress.run.a.asm_fcom_01_A; +import addon.cpuinfo; + +int main(){ + version(D_InlineAsm){ + haveFPU(); + + float f1, f2; + ushort s; + + asm{ + fldz; + fldz; + fld1; + fldz; + fcom; + fstsw s; + fstp f1; + fstp f2; + } + + assert(f1 == 0.0); + assert(f2 == 1.0); + + ushort C0 = 1 << 8; + ushort C1 = 1 << 9; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + assert(s & C0); + assert(!(s & C1)); + assert(!(s & C2)); + assert(!(s & C3)); + + 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_fcom_01_B.d Sun Oct 23 10:32:26 2005 +0000 @@ -0,0 +1,48 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_adc_01_A.d $ +// $Date: 2005-08-24 00:23:55 +0200 (Wed, 24 Aug 2005) $ +// $Author: thomask $ + +// __DSTRESS_DFLAGS__ addon/cpuinfo.d + +module dstress.run.a.asm_fcom_01_B; +import addon.cpuinfo; + +int main(){ + version(D_InlineAsm){ + haveFPU(); + + float f1, f2; + f1 = 0.0; + + ushort s; + + asm{ + fldz; + fldz; + fld1; + fldz; + fcom ST(1); + fstsw s; + fstp f1; + fstp f2; + } + + assert(f1 == 0.0); + assert(f2 == 1.0); + + ushort C0 = 1 << 8; + ushort C1 = 1 << 9; + ushort C2 = 1 << 10; + ushort C3 = 1 << 14; + + assert(s & C0); + assert(!(s & C1)); + assert(!(s & C2)); + assert(!(s & C3)); + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} \ No newline at end of file