Still not the same output in gforth and gforth-fast: DRuffer@DaR-PC /usr/src/gforth # gforth Gforth 0.7.9-20120209, Copyright (C) 1995-2011 Free Software Foundation, Inc. Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' Type `bye' to exit 1 2 3 pi cr .s f.s fsin cr .s f.s <3> 1 2 3 <1> 3.141592653590E0 <3> 1 2 3 <1> 1.2246467991E-16 ok bye
DRuffer@DaR-PC /usr/src/gforth # gforth-fast Gforth 0.7.9-20120209, Copyright (C) 1995-2011 Free Software Foundation, Inc. Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' Type `bye' to exit 1 2 3 pi cr .s f.s fsin cr .s f.s <3> 1 2 3 <1> 3.141592653590E0 <3> 1 2 54 <1> 1.2246467991E-16 ok DaR -----Original Message----- From: Bernd Paysan [mailto:[email protected]] Sent: Monday, February 13, 2012 2:19 PM To: [email protected] Cc: Dennis Ruffer; 'Marcel Hendrix' Subject: Re: [gforth] Strange behavior of f! etc. - fixed Am Montag, 13. Februar 2012, 13:46:10 schrieb Dennis Ruffer: > I have confirmed your results back through 0.7.0-20100915, but at > 0.7.0-20100807 it appears to have been worse: > > # gforth-fast-0.7.0-20100807.exe > Gforth 0.7.0-20100807, Copyright (C) 1995-2009 Free Software > Foundation, Inc. > Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license' > Type `bye' to exit > 1 2 3 pi cr .s f.s fsin cr .s f.s > <3> 1 2 3 <1> 3.141592653590E0 > <3> 1 2 2125807600 <1> 1.2246467991E-16 ok Ok, the problem seems to be that fsin et. al globber %edx, and GCC doesn't realize that the global register assignment won't work. I've now moved TOSreg to %ecx, which seems to cure that problem. The few remaining x86 opcodes in prim that will use %ecx should be fine with that, because it's already TOS (lshift, rshift). Thanks for all who participated in nailing down this bug. I have not tested it with the original problem submission, but I'm sure someone else on the list will do ;-). -- Bernd Paysan "If you want it done right, you have to do it yourself" http://bernd-paysan.de/
