Søren Sandmann <sandm...@cs.au.dk> writes:

>> /bin/bash: line 5:  5532 Floating point exception${dir}$tst
>> FAIL: combiner-test

I managed to reproduce this using the -m32 option to gcc. The problem is
a divide-by-zero in blend_color_dodge():

        static force_inline float
        blend_color_dodge (float sa, float s, float da, float d)
        {
            if (d == 0.0f)
                return 0.0f;
            else if (d * sa >= sa * da - s * da)
                return sa * da;
            else if (sa - s == 0.0f)
                return sa * da;
            else
                return sa * sa * d / (sa - s);
        }

The division is guarded by

    if (sa - s == 0.0f)
        ....;
    else
        .... / (sa - s);

which in theory should be correct, but isn't with the combination of x87
and gcc optimizations. The following patch fixes the issue by changing
the comparision for equality with zero into a comparision for the
interval -FLT_MIN, FLT_MIN.


Søren
_______________________________________________
Pixman mailing list
Pixman@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pixman

Reply via email to