On Sun, Sep 09, 2012 at 01:40:52AM +0400, Max Filippov wrote: > On Sun, Sep 9, 2012 at 1:12 AM, Aurelien Jarno <aurel...@aurel32.net> wrote: > > float{32,64}_muladd takes an enum as a parameter, and not flags. It > > means the parameter should be checked with == test instead of &. > > > > Cc: Peter Maydell <peter.mayd...@linaro.org> > > Signed-off-by: Aurelien Jarno <aurel...@aurel32.net> > > --- > > Hi Aurelien, > > I've also stumbled upon this bug, have a patch for it in the xtensa tree. > I guess that the interface was designed to allow combining these flags, why > don't just make them independent:
My idea was that negating both the product and c is equivalent to negating the result, so there is no need to allow all of them independent. > diff --git a/fpu/softfloat.h b/fpu/softfloat.h > index feec3a1..2860ca0 100644 > --- a/fpu/softfloat.h > +++ b/fpu/softfloat.h > @@ -219,7 +219,7 @@ void float_raise( int8 flags STATUS_PARAM); > enum { > float_muladd_negate_c = 1, > float_muladd_negate_product = 2, > - float_muladd_negate_result = 3, > + float_muladd_negate_result = 4, > }; > > > /*---------------------------------------------------------------------------- That said your solution is also fine, it just allow multiple way to do the same thing. -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurel...@aurel32.net http://www.aurel32.net