ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/gclib/gclib/GBase.h
(Generate patch)
# Line 25 | Line 25
25    #define CHPATHSEP '\\'
26    #undef off_t
27    #define off_t int64_t
28 +  #ifndef popen
29 +   #define popen _popen
30 +  #endif
31    #ifdef _fseeki64
32      #define fseeko(stream, offset, origin) _fseeki64(stream, offset, origin)
33    #else
# Line 182 | Line 185
185   rhs=tmp;
186   }
187  
185 /// bitCount_32 - this function counts the number of set bits in a value.
186 /// Ex. CountPopulation(0xF000F000) = 8
187 /// Returns 0 if the word is zero.
188 inline uint bitCount_32(uint32_t Value) {
189 #if __GNUC__ >= 4
190    return __builtin_popcount(Value);
191 #else
192    uint32_t v = Value - ((Value >> 1) & 0x55555555);
193    v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
194    return ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
195 #endif
196  }
197
198 /// bitCount_64 - this function counts the number of set bits in a value,
199 /// (64 bit edition.)
200 inline uint bitCount_64(uint64_t Value) {
201 #if __GNUC__ >= 4
202    return __builtin_popcountll(Value);
203 #else
204    uint64_t v = Value - ((Value >> 1) & 0x5555555555555555ULL);
205    v = (v & 0x3333333333333333ULL) + ((v >> 2) & 0x3333333333333333ULL);
206    v = (v + (v >> 4)) & 0x0F0F0F0F0F0F0F0FULL;
207    return uint((uint64_t)(v * 0x0101010101010101ULL) >> 56);
208 #endif
209  }
210
211 /// CountTrailingZeros_32 - this function performs the platform optimal form of
212 /// counting the number of zeros from the least significant bit to the first one
213 /// bit.  Ex. CountTrailingZeros_32(0xFF00FF00) == 8.
214 /// Returns 32 if the word is zero.
215 inline unsigned bitCountTrailingZeros_32(uint32_t Value) {
216 #if __GNUC__ >= 4
217  return Value ? __builtin_ctz(Value) : 32;
218 #else
219  static const unsigned Mod37BitPosition[] = {
220    32, 0, 1, 26, 2, 23, 27, 0, 3, 16, 24, 30, 28, 11, 0, 13,
221    4, 7, 17, 0, 25, 22, 31, 15, 29, 10, 12, 6, 0, 21, 14, 9,
222    5, 20, 8, 19, 18
223  };
224  return Mod37BitPosition[(-Value & Value) % 37];
225 #endif
226 }
227
228 // CountTrailingZeros_64 - This function performs the platform optimal form
229 /// of counting the number of zeros from the least significant bit to the first
230 /// one bit (64 bit edition.)
231 /// Returns 64 if the word is zero.
232 inline unsigned bitCountTrailingZeros_64(uint64_t Value) {
233 #if __GNUC__ >= 4
234  return Value ? __builtin_ctzll(Value) : 64;
235 #else
236  static const unsigned Mod67Position[] = {
237    64, 0, 1, 39, 2, 15, 40, 23, 3, 12, 16, 59, 41, 19, 24, 54,
238    4, 64, 13, 10, 17, 62, 60, 28, 42, 30, 20, 51, 25, 44, 55,
239    47, 5, 32, 65, 38, 14, 22, 11, 58, 18, 53, 63, 9, 61, 27,
240    29, 50, 43, 46, 31, 37, 21, 57, 52, 8, 26, 49, 45, 36, 56,
241    7, 48, 35, 6, 34, 33, 0
242  };
243  return Mod67Position[(-Value & Value) % 67];
244 #endif
245 }
188  
189   /**************** Memory management ***************************/
190  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines