On Monday 12 November 2007 12:33:41 Andy Dougherty wrote:

> I was trying parrot for the first time in a while today, and the test
> suite hung at t/op/arithmetics_22.pasm.  (This is with gcc-4.1.0 on
> Solaris 8/SPARC.)  It just sits and uses up CPU.  It appears to be stuck
> in the 'gcd' op.
>
> It's been a while since I tried compiling with gcc, so I don't know how
> long this problem has been here.
>
> After poking around quite a bit, the following patch fixes it:
>
> --- parrot-current/src/ops/experimental.ops   Wed Oct 17 19:15:15 2007
> +++ parrot-andy/src/ops/experimental.ops      Mon Nov 12 15:13:43 2007
> @@ -91,7 +91,7 @@
>    FLOATVAL temp2 = fabs($2);
>    FLOATVAL temp3 = fabs($3);
>
> -  while (!FLOAT_IS_ZERO(temp3)) {
> +  while (temp3 != 0.0) {
>      q     = floor((FLOATVAL)temp2/temp3);
>      c     = temp2 - temp3*q;
>      temp2 = temp3;
>
> It may well be there's an issue with gcc's optimizer, since the problem
> goes away without optimization, but I think it's also fair to say that
> the definition of FLOAT_IS_ZERO in include/parrot/misc.h is
> perhaps not optimal here.  I'd prefer the simpler definition:
>
>       #define FLOAT_IS_ZER0(f) ((f) == 0.0)
>
> but I didn't get anywhere last time I proposed that.  I don't know
> what else to do.

For what it's worth (as the person who had to distill the existing abominable 
macro definition and try to get it working portably), I now agree with Andy 
here.

If no one beats me to applying this patch in the next several hours, I'll do 
it myself.

-- c

Reply via email to