All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
slowBsf.h
Go to the documentation of this file.
1 /* slowBsf.h
2  */
3 #ifndef OSL_SLOWBSF_H
4 #define OSL_SLOWBSF_H
5 
6 namespace osl
7 {
8  namespace misc
9  {
14  inline int slowbsf(unsigned int mask){
15  assert(mask);
16  int mask0= (static_cast<int>(-(mask&0xffff)))>>31;
17  mask&=(mask0^0xffff0000);
18  int mask1= (static_cast<int>(-(mask&0xff00ff)))>>31;
19  mask&=(mask1^0xff00ff00);
20  int mask2= (static_cast<int>(-(mask&0xf0f0f0f)))>>31;
21  mask&=(mask2^0xf0f0f0f0);
22  int mask3= (static_cast<int>(-(mask&0x33333333)))>>31;
23  mask&=(mask3^0xcccccccc);
24  int mask4= (static_cast<int>(-(mask&0x55555555)))>>31;
25  return 31+(mask0&0xfffffff0)+(mask1&0xfffffff8)+
26  (mask2&0xfffffffc)+(mask3&0xfffffffe)+mask4;
27  }
28 } // namespace misc
29 } // namespace osl
30 
31 #endif /* OSL_SLOWBSF_H */
32 // ;;; Local Variables:
33 // ;;; mode:c++
34 // ;;; c-basic-offset:2
35 // ;;; End: