Skip to content

Commit 83a611a

Browse files
committed
Remove newly added asserts from pg_bitutils.h
These were valuable during development, but are unlikely to tell us anything going forward. This reverts 204b0cb and adjusts the content of 6773197 to more closely match the more-readable original style. Per review from Tom Lane Discussion: https://www.postgresql.org/message-id/3567481.1676906261%40sss.pgh.pa.us
1 parent e00bc6c commit 83a611a

File tree

1 file changed

+51
-99
lines changed

1 file changed

+51
-99
lines changed

src/include/port/pg_bitutils.h

Lines changed: 51 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -41,38 +41,26 @@ static inline int
4141
pg_leftmost_one_pos32(uint32 word)
4242
{
4343
#ifdef HAVE__BUILTIN_CLZ
44-
int bitscan_result;
44+
Assert(word != 0);
45+
46+
return 31 - __builtin_clz(word);
4547
#elif defined(_MSC_VER)
46-
unsigned long bitscan_result;
48+
unsigned long result;
4749
bool non_zero;
48-
#endif
4950

50-
#if !defined(HAVE_BITSCAN_REVERSE) || defined(USE_ASSERT_CHECKING)
51-
int result;
51+
non_zero = _BitScanReverse(&result, word);
52+
Assert(non_zero);
53+
return (int) result;
54+
#else
5255
int shift = 32 - 8;
5356

5457
Assert(word != 0);
5558

5659
while ((word >> shift) == 0)
5760
shift -= 8;
5861

59-
result = shift + pg_leftmost_one_pos[(word >> shift) & 255];
60-
#endif
61-
62-
#ifdef HAVE_BITSCAN_REVERSE
63-
64-
#if defined(HAVE__BUILTIN_CLZ)
65-
bitscan_result = 31 - __builtin_clz(word);
66-
#elif defined(_MSC_VER)
67-
non_zero = _BitScanReverse(&bitscan_result, word);
68-
Assert(non_zero);
69-
#endif
70-
Assert(bitscan_result == result);
71-
return bitscan_result;
72-
73-
#else
74-
return result;
75-
#endif /* HAVE_BITSCAN_REVERSE */
62+
return shift + pg_leftmost_one_pos[(word >> shift) & 255];
63+
#endif /* HAVE__BUILTIN_CLZ */
7664
}
7765

7866
/*
@@ -83,45 +71,33 @@ static inline int
8371
pg_leftmost_one_pos64(uint64 word)
8472
{
8573
#ifdef HAVE__BUILTIN_CLZ
86-
int bitscan_result;
87-
#elif defined(_MSC_VER)
88-
unsigned long bitscan_result;
89-
bool non_zero;
90-
#endif
91-
92-
#if !defined(HAVE_BITSCAN_REVERSE) || defined(USE_ASSERT_CHECKING)
93-
int result;
94-
int shift = 64 - 8;
95-
9674
Assert(word != 0);
9775

98-
while ((word >> shift) == 0)
99-
shift -= 8;
100-
101-
result = shift + pg_leftmost_one_pos[(word >> shift) & 255];
102-
#endif
103-
104-
#ifdef HAVE_BITSCAN_REVERSE
105-
106-
#if defined(HAVE__BUILTIN_CLZ)
10776
#if defined(HAVE_LONG_INT_64)
108-
bitscan_result = 63 - __builtin_clzl(word);
77+
return 63 - __builtin_clzl(word);
10978
#elif defined(HAVE_LONG_LONG_INT_64)
110-
bitscan_result = 63 - __builtin_clzll(word);
79+
return 63 - __builtin_clzll(word);
11180
#else
11281
#error must have a working 64-bit integer datatype
11382
#endif /* HAVE_LONG_INT_64 */
11483

11584
#elif defined(_MSC_VER)
116-
non_zero = _BitScanReverse64(&bitscan_result, word);
117-
Assert(non_zero);
118-
#endif /* HAVE__BUILTIN_CLZ */
119-
Assert(bitscan_result == result);
120-
return bitscan_result;
85+
unsigned long result;
86+
bool non_zero;
12187

88+
non_zero = _BitScanReverse64(&result, word);
89+
Assert(non_zero);
90+
return (int) result;
12291
#else
123-
return result;
124-
#endif /* HAVE_BITSCAN_REVERSE */
92+
int shift = 64 - 8;
93+
94+
Assert(word != 0);
95+
96+
while ((word >> shift) == 0)
97+
shift -= 8;
98+
99+
return shift + pg_leftmost_one_pos[(word >> shift) & 255];
100+
#endif /* HAVE__BUILTIN_CLZ */
125101
}
126102

127103
/*
@@ -133,15 +109,17 @@ static inline int
133109
pg_rightmost_one_pos32(uint32 word)
134110
{
135111
#ifdef HAVE__BUILTIN_CTZ
136-
const uint32 orig_word = word;
137-
int bitscan_result;
112+
Assert(word != 0);
113+
114+
return __builtin_ctz(word);
138115
#elif defined(_MSC_VER)
139-
const unsigned long orig_word = word;
140-
unsigned long bitscan_result;
116+
unsigned long result;
141117
bool non_zero;
142-
#endif
143118

144-
#if !defined(HAVE_BITSCAN_FORWARD) || defined(USE_ASSERT_CHECKING)
119+
non_zero = _BitScanForward(&result, word);
120+
Assert(non_zero);
121+
return (int) result;
122+
#else
145123
int result = 0;
146124

147125
Assert(word != 0);
@@ -152,22 +130,8 @@ pg_rightmost_one_pos32(uint32 word)
152130
result += 8;
153131
}
154132
result += pg_rightmost_one_pos[word & 255];
155-
#endif
156-
157-
#ifdef HAVE_BITSCAN_FORWARD
158-
159-
#if defined(HAVE__BUILTIN_CTZ)
160-
bitscan_result = __builtin_ctz(orig_word);
161-
#elif defined(_MSC_VER)
162-
non_zero = _BitScanForward(&bitscan_result, orig_word);
163-
Assert(non_zero);
164-
#endif
165-
Assert(bitscan_result == result);
166-
return bitscan_result;
167-
168-
#else
169133
return result;
170-
#endif /* HAVE_BITSCAN_FORWARD */
134+
#endif /* HAVE__BUILTIN_CTZ */
171135
}
172136

173137
/*
@@ -178,15 +142,24 @@ static inline int
178142
pg_rightmost_one_pos64(uint64 word)
179143
{
180144
#ifdef HAVE__BUILTIN_CTZ
181-
const uint64 orig_word = word;
182-
int bitscan_result;
145+
Assert(word != 0);
146+
147+
#if defined(HAVE_LONG_INT_64)
148+
return __builtin_ctzl(word);
149+
#elif defined(HAVE_LONG_LONG_INT_64)
150+
return __builtin_ctzll(word);
151+
#else
152+
#error must have a working 64-bit integer datatype
153+
#endif /* HAVE_LONG_INT_64 */
154+
183155
#elif defined(_MSC_VER)
184-
const unsigned __int64 orig_word = word;
185-
unsigned long bitscan_result;
156+
unsigned long result;
186157
bool non_zero;
187-
#endif
188158

189-
#if !defined(HAVE_BITSCAN_FORWARD) || defined(USE_ASSERT_CHECKING)
159+
non_zero = _BitScanForward64(&result, word);
160+
Assert(non_zero);
161+
return (int) result;
162+
#else
190163
int result = 0;
191164

192165
Assert(word != 0);
@@ -197,29 +170,8 @@ pg_rightmost_one_pos64(uint64 word)
197170
result += 8;
198171
}
199172
result += pg_rightmost_one_pos[word & 255];
200-
#endif
201-
202-
#ifdef HAVE_BITSCAN_FORWARD
203-
204-
#if defined(HAVE__BUILTIN_CTZ)
205-
#if defined(HAVE_LONG_INT_64)
206-
bitscan_result = __builtin_ctzl(orig_word);
207-
#elif defined(HAVE_LONG_LONG_INT_64)
208-
bitscan_result = __builtin_ctzll(orig_word);
209-
#else
210-
#error must have a working 64-bit integer datatype
211-
#endif /* HAVE_LONG_INT_64 */
212-
213-
#elif defined(_MSC_VER)
214-
non_zero = _BitScanForward64(&bitscan_result, orig_word);
215-
Assert(non_zero);
216-
#endif /* HAVE__BUILTIN_CTZ */
217-
Assert(bitscan_result == result);
218-
return bitscan_result;
219-
220-
#else
221173
return result;
222-
#endif /* HAVE_BITSCAN_FORWARD */
174+
#endif /* HAVE__BUILTIN_CTZ */
223175
}
224176

225177
/*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy