This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v3 03/18] Add string-maskoff.h generic header
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:
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 */