[v3,03/18] Add string-maskoff.h generic header

Message ID 2506af15-632d-0771-9350-16f58badf08d@linaro.org
State Dropped
Headers

Commit Message

Adhemerval Zanella Jan. 11, 2018, 5:57 p.m. UTC
  On 11/01/2018 11:29, Joseph Myers wrote:
> On Wed, 10 Jan 2018, Adhemerval Zanella wrote:
> 
>> +/* Provide a mask based on the pointer alignment that sets up non-zero
>> +   bytes before the beginning of the word.  It is used to mask off
>> +   undesirable bits from an aligned read from an unaligned pointer.
>> +   For instance, on a 64 bits machine with a pointer alignment of
>> +   3 the function returns 0x0000000000ffffff for LE and 0xffffff0000000000
> 
> Is there a missing "for BE" at the end of this line?
> 

I applied the following patch based on Paul's suggestion:
  

Patch

diff --git a/sysdeps/generic/string-maskoff.h b/sysdeps/generic/string-maskoff.h
index 6231798..98e7852 100644
--- a/sysdeps/generic/string-maskoff.h
+++ b/sysdeps/generic/string-maskoff.h
@@ -47,18 +47,17 @@  repeat_bytes (unsigned char c_in)
   return ((op_t)-1 / 0xff) * c_in;
 }
 
-/* Create a mask with high bit of each byte being 1, and the low 7 bits
-   being all the opposite of the input mask.  It is used to mask off
-   undesirable bits from an aligned read from an unaligned pointer,
-   and also taking care to avoid match possible bytes meant to be
-   matched.  For instance, on a 64 bits machine with a pointer alignment
-   of 3 the function returns 0x7f7f7f0000000000 (input meant to
-   be 0xffffff0000000000) for BE and 0x00000000007f7f7f for LE (input
-   meant to be 0x0000000000ffffff).  */
+/* Based on mask created by 'create_mask', mask off the high bit of each
+   byte in the mask.  It is used to mask off undesirable bits from an
+   aligned read from an unaligned pointer, and also taking care to avoid
+   match possible bytes meant to be matched.  For instance, on a 64 bits
+   machine with a mask created from a pointer with an alignment of 3
+   (0x0000000000ffffff) the function returns 0x7f7f7f0000000000 for BE
+   and 0x00000000007f7f7f for LE.  */
 static inline op_t
 highbit_mask (op_t m)
 {
-  return m & ~repeat_bytes (0x80);
+  return m & repeat_bytes (0x7f);
 }
 
 #endif /* STRING_MASKOFF_H  */