qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning
@ 2020-05-28  8:48 Philippe Mathieu-Daudé
  2020-05-28  8:57 ` Thomas Huth
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-28  8:48 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Thomas Huth, Alex Bennée, Richard Henderson,
	Philippe Mathieu-Daudé, Aurelien Jarno

When building with clang version 10.0.0-4ubuntu1, we get:

    CC      lm32-softmmu/fpu/softfloat.o
  fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
      absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
          absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
          absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
      zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
      zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
                      ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
              zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
          zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Fix by rewriting the fishy bitwise AND of two bools as an int.

Suggested-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/bugs/1881004
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v2: Resend without the Cc: "Toni Wilen <twilen@winuae.net>" tag
---
 fpu/softfloat.c | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 6c8f2d597a..0dd57eddd7 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -3362,7 +3362,9 @@ static int32_t roundAndPackInt32(bool zSign, uint64_t absZ,
     }
     roundBits = absZ & 0x7F;
     absZ = ( absZ + roundIncrement )>>7;
-    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
+    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
+        absZ &= ~1;
+    }
     z = absZ;
     if ( zSign ) z = - z;
     if ( ( absZ>>32 ) || ( z && ( ( z < 0 ) ^ zSign ) ) ) {
@@ -3420,7 +3422,9 @@ static int64_t roundAndPackInt64(bool zSign, uint64_t absZ0, uint64_t absZ1,
     if ( increment ) {
         ++absZ0;
         if ( absZ0 == 0 ) goto overflow;
-        absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
+        if (((absZ1 << 1) == 0) && roundNearestEven) {
+            absZ0 &= ~1;
+        }
     }
     z = absZ0;
     if ( zSign ) z = - z;
@@ -3480,7 +3484,9 @@ static int64_t roundAndPackUint64(bool zSign, uint64_t absZ0,
             float_raise(float_flag_invalid, status);
             return UINT64_MAX;
         }
-        absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
+        if (((absZ1 << 1) == 0) && roundNearestEven) {
+            absZ0 &= ~1;
+        }
     }
 
     if (zSign && absZ0) {
@@ -3603,7 +3609,9 @@ static float32 roundAndPackFloat32(bool zSign, int zExp, uint32_t zSig,
         status->float_exception_flags |= float_flag_inexact;
     }
     zSig = ( zSig + roundIncrement )>>7;
-    zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
+    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
+        zSig &= ~1;
+    }
     if ( zSig == 0 ) zExp = 0;
     return packFloat32( zSign, zExp, zSig );
 
@@ -3757,7 +3765,9 @@ static float64 roundAndPackFloat64(bool zSign, int zExp, uint64_t zSig,
         status->float_exception_flags |= float_flag_inexact;
     }
     zSig = ( zSig + roundIncrement )>>10;
-    zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
+    if (((roundBits ^ 0x200) == 0) && roundNearestEven) {
+        zSig &= ~1;
+    }
     if ( zSig == 0 ) zExp = 0;
     return packFloat64( zSign, zExp, zSig );
 
@@ -3983,8 +3993,9 @@ floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,
             }
             if ( increment ) {
                 ++zSig0;
-                zSig0 &=
-                    ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
+                if (((zSig1 << 1) == 0) && roundNearestEven) {
+                    zSig0 &= ~1;
+                }
                 if ( (int64_t) zSig0 < 0 ) zExp = 1;
             }
             return packFloatx80( zSign, zExp, zSig0 );
@@ -4000,7 +4011,9 @@ floatx80 roundAndPackFloatx80(int8_t roundingPrecision, bool zSign,
             zSig0 = UINT64_C(0x8000000000000000);
         }
         else {
-            zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
+            if (((zSig1 << 1) == 0) && roundNearestEven) {
+                zSig0 &= ~1;
+            }
         }
     }
     else {
@@ -4270,7 +4283,9 @@ static float128 roundAndPackFloat128(bool zSign, int32_t zExp,
     }
     if ( increment ) {
         add128( zSig0, zSig1, 0, 1, &zSig0, &zSig1 );
-        zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
+        if ((zSig2 + zSig2 == 0) && roundNearestEven) {
+            zSig1 &= ~1;
+        }
     }
     else {
         if ( ( zSig0 | zSig1 ) == 0 ) zExp = 0;
-- 
2.21.3



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning
  2020-05-28  8:48 [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning Philippe Mathieu-Daudé
@ 2020-05-28  8:57 ` Thomas Huth
  2020-05-28  9:00   ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Huth @ 2020-05-28  8:57 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Richard Henderson, Alex Bennée, Aurelien Jarno,
	Peter Maydell

On 28/05/2020 10.48, Philippe Mathieu-Daudé wrote:
> When building with clang version 10.0.0-4ubuntu1, we get:
> 
>     CC      lm32-softmmu/fpu/softfloat.o
>   fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>       absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>           absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>           absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>       zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>       zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>                       ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>               zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
>   fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>           zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> Fix by rewriting the fishy bitwise AND of two bools as an int.
> 
> Suggested-by: Eric Blake <eblake@redhat.com>
> Buglink: https://bugs.launchpad.net/bugs/1881004
> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> v2: Resend without the Cc: "Toni Wilen <twilen@winuae.net>" tag
> ---
>  fpu/softfloat.c | 33 ++++++++++++++++++++++++---------
>  1 file changed, 24 insertions(+), 9 deletions(-)
> 
> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
> index 6c8f2d597a..0dd57eddd7 100644
> --- a/fpu/softfloat.c
> +++ b/fpu/softfloat.c
> @@ -3362,7 +3362,9 @@ static int32_t roundAndPackInt32(bool zSign, uint64_t absZ,
>      }
>      roundBits = absZ & 0x7F;
>      absZ = ( absZ + roundIncrement )>>7;
> -    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
> +    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
> +        absZ &= ~1;
> +    }

You could get rid of some more parentheses now:

   if ((roundBits ^ 0x40) == 0 && roundNearestEven)

... also in the other hunks.

Anyway:
Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning
  2020-05-28  8:57 ` Thomas Huth
@ 2020-05-28  9:00   ` Philippe Mathieu-Daudé
  2020-05-28 13:37     ` Eric Blake
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-28  9:00 UTC (permalink / raw)
  To: Thomas Huth, qemu-devel
  Cc: Richard Henderson, Alex Bennée, Aurelien Jarno,
	Peter Maydell

On 5/28/20 10:57 AM, Thomas Huth wrote:
> On 28/05/2020 10.48, Philippe Mathieu-Daudé wrote:
>> When building with clang version 10.0.0-4ubuntu1, we get:
>>
>>     CC      lm32-softmmu/fpu/softfloat.o
>>   fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>       absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>           absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
>>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:3483:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>           absZ0 &= ~(((uint64_t)(absZ1<<1) == 0) & roundNearestEven);
>>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:3606:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>       zSig &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:3760:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>       zSig &= ~ ( ( ( roundBits ^ 0x200 ) == 0 ) & roundNearestEven );
>>               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:3987:21: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>                       ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>>                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:4003:22: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>               zSig0 &= ~ ( ( (uint64_t) ( zSig1<<1 ) == 0 ) & roundNearestEven );
>>                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>>   fpu/softfloat.c:4273:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>           zSig1 &= ~ ( ( zSig2 + zSig2 == 0 ) & roundNearestEven );
>>                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Fix by rewriting the fishy bitwise AND of two bools as an int.
>>
>> Suggested-by: Eric Blake <eblake@redhat.com>
>> Buglink: https://bugs.launchpad.net/bugs/1881004
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>> ---
>> v2: Resend without the Cc: "Toni Wilen <twilen@winuae.net>" tag
>> ---
>>  fpu/softfloat.c | 33 ++++++++++++++++++++++++---------
>>  1 file changed, 24 insertions(+), 9 deletions(-)
>>
>> diff --git a/fpu/softfloat.c b/fpu/softfloat.c
>> index 6c8f2d597a..0dd57eddd7 100644
>> --- a/fpu/softfloat.c
>> +++ b/fpu/softfloat.c
>> @@ -3362,7 +3362,9 @@ static int32_t roundAndPackInt32(bool zSign, uint64_t absZ,
>>      }
>>      roundBits = absZ & 0x7F;
>>      absZ = ( absZ + roundIncrement )>>7;
>> -    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>> +    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
>> +        absZ &= ~1;
>> +    }
> 
> You could get rid of some more parentheses now:
> 
>    if ((roundBits ^ 0x40) == 0 && roundNearestEven)
> 
> ... also in the other hunks.

I first wrote

    if (!(roundBits ^ 0x40) && roundNearestEven)

But then thought this would diverge from Eric suggestion, so I kept what
he wrote (which is a bit closer to the style of rest of this file).

> 
> Anyway:
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> 

Thanks!



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning
  2020-05-28  9:00   ` Philippe Mathieu-Daudé
@ 2020-05-28 13:37     ` Eric Blake
  2020-05-28 13:41       ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 5+ messages in thread
From: Eric Blake @ 2020-05-28 13:37 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, Thomas Huth, qemu-devel
  Cc: Richard Henderson, Alex Bennée, Aurelien Jarno,
	Peter Maydell

On 5/28/20 4:00 AM, Philippe Mathieu-Daudé wrote:
> On 5/28/20 10:57 AM, Thomas Huth wrote:
>> On 28/05/2020 10.48, Philippe Mathieu-Daudé wrote:
>>> When building with clang version 10.0.0-4ubuntu1, we get:

In the subject, I'd suggest s/Silent/Silence/

>>>
>>>      CC      lm32-softmmu/fpu/softfloat.o
>>>    fpu/softfloat.c:3365:13: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>>        absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>>                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>
>>>    fpu/softfloat.c:3423:18: error: bitwise negation of a boolean expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>>            absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) & roundNearestEven );
>>>                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>

Also, do you need to list all errors, or will just one or two 
representative errors be sufficient?

>>>
>>> Fix by rewriting the fishy bitwise AND of two bools as an int.
>>>
>>> Suggested-by: Eric Blake <eblake@redhat.com>
>>> Buglink: https://bugs.launchpad.net/bugs/1881004
>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>> ---

>>> +++ b/fpu/softfloat.c
>>> @@ -3362,7 +3362,9 @@ static int32_t roundAndPackInt32(bool zSign, uint64_t absZ,
>>>       }
>>>       roundBits = absZ & 0x7F;
>>>       absZ = ( absZ + roundIncrement )>>7;
>>> -    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>> +    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
>>> +        absZ &= ~1;
>>> +    }
>>
>> You could get rid of some more parentheses now:
>>
>>     if ((roundBits ^ 0x40) == 0 && roundNearestEven)
>>
>> ... also in the other hunks.
> 
> I first wrote
> 
>      if (!(roundBits ^ 0x40) && roundNearestEven)
> 
> But then thought this would diverge from Eric suggestion, so I kept what
> he wrote (which is a bit closer to the style of rest of this file).

I don't mind the patch as-is for minimizing churn and matching existing 
style, but I also would not be opposed if you wanted to elide 
unnecessary ().

> 
>>
>> Anyway:
>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>>
> 
> Thanks!
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning
  2020-05-28 13:37     ` Eric Blake
@ 2020-05-28 13:41       ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-05-28 13:41 UTC (permalink / raw)
  To: Eric Blake, Thomas Huth, qemu-devel
  Cc: Richard Henderson, Alex Bennée, Aurelien Jarno,
	Peter Maydell

On 5/28/20 3:37 PM, Eric Blake wrote:
> On 5/28/20 4:00 AM, Philippe Mathieu-Daudé wrote:
>> On 5/28/20 10:57 AM, Thomas Huth wrote:
>>> On 28/05/2020 10.48, Philippe Mathieu-Daudé wrote:
>>>> When building with clang version 10.0.0-4ubuntu1, we get:
> 
> In the subject, I'd suggest s/Silent/Silence/

Don't fit... 73 chars :S I'll use 'Avoid' (or 'Remove'?) instead.

> 
>>>>
>>>>      CC      lm32-softmmu/fpu/softfloat.o
>>>>    fpu/softfloat.c:3365:13: error: bitwise negation of a boolean
>>>> expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>>>        absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>>>                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>
>>>>    fpu/softfloat.c:3423:18: error: bitwise negation of a boolean
>>>> expression; did you mean logical negation? [-Werror,-Wbool-operation]
>>>>            absZ0 &= ~ ( ( (uint64_t) ( absZ1<<1 ) == 0 ) &
>>>> roundNearestEven );
>>>>                    
>>>> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>
> 
> Also, do you need to list all errors, or will just one or two
> representative errors be sufficient?

Fair :)

> 
>>>>
>>>> Fix by rewriting the fishy bitwise AND of two bools as an int.
>>>>
>>>> Suggested-by: Eric Blake <eblake@redhat.com>
>>>> Buglink: https://bugs.launchpad.net/bugs/1881004
>>>> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>>> ---
> 
>>>> +++ b/fpu/softfloat.c
>>>> @@ -3362,7 +3362,9 @@ static int32_t roundAndPackInt32(bool zSign,
>>>> uint64_t absZ,
>>>>       }
>>>>       roundBits = absZ & 0x7F;
>>>>       absZ = ( absZ + roundIncrement )>>7;
>>>> -    absZ &= ~ ( ( ( roundBits ^ 0x40 ) == 0 ) & roundNearestEven );
>>>> +    if (((roundBits ^ 0x40) == 0) && roundNearestEven) {
>>>> +        absZ &= ~1;
>>>> +    }
>>>
>>> You could get rid of some more parentheses now:
>>>
>>>     if ((roundBits ^ 0x40) == 0 && roundNearestEven)
>>>
>>> ... also in the other hunks.
>>
>> I first wrote
>>
>>      if (!(roundBits ^ 0x40) && roundNearestEven)
>>
>> But then thought this would diverge from Eric suggestion, so I kept what
>> he wrote (which is a bit closer to the style of rest of this file).
> 
> I don't mind the patch as-is for minimizing churn and matching existing
> style, but I also would not be opposed if you wanted to elide
> unnecessary ().

OK, thanks for the review!

> 
>>
>>>
>>> Anyway:
>>> Reviewed-by: Thomas Huth <thuth@redhat.com>
>>>
>>
>> Thanks!
>>
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-05-28 13:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-28  8:48 [PATCH v2] fpu/softfloat: Silent 'bitwise negation of a boolean expression' warning Philippe Mathieu-Daudé
2020-05-28  8:57 ` Thomas Huth
2020-05-28  9:00   ` Philippe Mathieu-Daudé
2020-05-28 13:37     ` Eric Blake
2020-05-28 13:41       ` Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).