Skip to content

Commit c14a157

Browse files
Bénédikt's review suggestions
1 parent c0f99d1 commit c14a157

1 file changed

Lines changed: 43 additions & 43 deletions

File tree

‎Objects/stringlib/find_max_char.h‎

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,43 @@
1313
/* Masks selecting the bits that are set in a C 'size_t' holding several
1414
characters when at least one of them is wider than ASCII, UCS1 or UCS2. */
1515
#if STRINGLIB_SIZEOF_CHAR == 1
16-
# if SIZEOF_SIZE_T == 8
17-
# define MASK_ASCII 0x8080808080808080ULL
18-
# elif SIZEOF_SIZE_T == 4
19-
# define MASK_ASCII 0x80808080U
20-
# else
21-
# error C 'size_t' size should be either 4 or 8!
22-
# endif
23-
# define MASK_MAX_CHAR MASK_ASCII
24-
# define MAX_CHAR MAX_CHAR_UCS1
16+
# if SIZEOF_SIZE_T == 8
17+
# define MASK_ASCII 0x8080808080808080ULL
18+
# elif SIZEOF_SIZE_T == 4
19+
# define MASK_ASCII 0x80808080U
20+
# else
21+
# error C 'size_t' size should be either 4 or 8!
22+
# endif
23+
# define MASK_MAX_CHAR MASK_ASCII
24+
# define MAX_CHAR MAX_CHAR_UCS1
2525
#elif STRINGLIB_SIZEOF_CHAR == 2
26-
# if SIZEOF_SIZE_T == 8
27-
# define MASK_ASCII 0xFF80FF80FF80FF80ULL
28-
# define MASK_UCS1 0xFF00FF00FF00FF00ULL
29-
# elif SIZEOF_SIZE_T == 4
30-
# define MASK_ASCII 0xFF80FF80U
31-
# define MASK_UCS1 0xFF00FF00U
32-
# else
33-
# error C 'size_t' size should be either 4 or 8!
34-
# endif
35-
# define MASK_MAX_CHAR MASK_UCS1
36-
# define MAX_CHAR MAX_CHAR_UCS2
26+
# if SIZEOF_SIZE_T == 8
27+
# define MASK_ASCII 0xFF80FF80FF80FF80ULL
28+
# define MASK_UCS1 0xFF00FF00FF00FF00ULL
29+
# elif SIZEOF_SIZE_T == 4
30+
# define MASK_ASCII 0xFF80FF80U
31+
# define MASK_UCS1 0xFF00FF00U
32+
# else
33+
# error C 'size_t' size should be either 4 or 8!
34+
# endif
35+
# define MASK_MAX_CHAR MASK_UCS1
36+
# define MAX_CHAR MAX_CHAR_UCS2
3737
#elif STRINGLIB_SIZEOF_CHAR == 4
38-
# if SIZEOF_SIZE_T == 8
39-
# define MASK_ASCII 0xFFFFFF80FFFFFF80ULL
40-
# define MASK_UCS1 0xFFFFFF00FFFFFF00ULL
41-
# define MASK_UCS2 0xFFFF0000FFFF0000ULL
42-
# elif SIZEOF_SIZE_T == 4
43-
# define MASK_ASCII 0xFFFFFF80U
44-
# define MASK_UCS1 0xFFFFFF00U
45-
# define MASK_UCS2 0xFFFF0000U
46-
# else
47-
# error C 'size_t' size should be either 4 or 8!
48-
# endif
49-
# define MASK_MAX_CHAR MASK_UCS2
50-
# define MAX_CHAR MAX_CHAR_UCS4
38+
# if SIZEOF_SIZE_T == 8
39+
# define MASK_ASCII 0xFFFFFF80FFFFFF80ULL
40+
# define MASK_UCS1 0xFFFFFF00FFFFFF00ULL
41+
# define MASK_UCS2 0xFFFF0000FFFF0000ULL
42+
# elif SIZEOF_SIZE_T == 4
43+
# define MASK_ASCII 0xFFFFFF80U
44+
# define MASK_UCS1 0xFFFFFF00U
45+
# define MASK_UCS2 0xFFFF0000U
46+
# else
47+
# error C 'size_t' size should be either 4 or 8!
48+
# endif
49+
# define MASK_MAX_CHAR MASK_UCS2
50+
# define MAX_CHAR MAX_CHAR_UCS4
5151
#else
52-
#error Invalid STRINGLIB_SIZEOF_CHAR (must be 1, 2 or 4)
52+
# error Invalid STRINGLIB_SIZEOF_CHAR (must be 1, 2 or 4)
5353
#endif
5454

5555
/* OR all characters into a single size_t accumulator and test the high bits
@@ -70,15 +70,15 @@ STRINGLIB(find_max_char)(const STRINGLIB_CHAR *begin, const STRINGLIB_CHAR *end)
7070
one register when the compiler does not vectorize it. */
7171
size_t v0 = 0, v1 = 0, v2 = 0, v3 = 0;
7272
for (int i = 0; i < 16 * SIZEOF_SIZE_T; i += 4 * SIZEOF_SIZE_T) {
73-
size_t a, b, c, d;
74-
memcpy(&a, p + i, SIZEOF_SIZE_T);
75-
memcpy(&b, p + i + SIZEOF_SIZE_T, SIZEOF_SIZE_T);
76-
memcpy(&c, p + i + 2 * SIZEOF_SIZE_T, SIZEOF_SIZE_T);
77-
memcpy(&d, p + i + 3 * SIZEOF_SIZE_T, SIZEOF_SIZE_T);
78-
v0 |= a;
79-
v1 |= b;
80-
v2 |= c;
81-
v3 |= d;
73+
size_t w0, w1, w2, w3;
74+
memcpy(&w0, p + i, SIZEOF_SIZE_T);
75+
memcpy(&w1, p + i + SIZEOF_SIZE_T, SIZEOF_SIZE_T);
76+
memcpy(&w2, p + i + 2*SIZEOF_SIZE_T, SIZEOF_SIZE_T);
77+
memcpy(&w3, p + i + 3*SIZEOF_SIZE_T, SIZEOF_SIZE_T);
78+
v0 |= w0;
79+
v1 |= w1;
80+
v2 |= w2;
81+
v3 |= w3;
8282
}
8383
value |= v0 | v1 | v2 | v3;
8484
if (value & MASK_MAX_CHAR) {

0 commit comments

Comments
 (0)