User Tools

Site Tools


chess:programming:msb_most_significant_bit

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
chess:programming:msb_most_significant_bit [2021/10/30 12:21] peterchess:programming:msb_most_significant_bit [2021/10/30 12:29] (current) – [Using Built-in for GCC] peter
Line 41: Line 41:
  
 <code cpp> <code cpp>
-__builtin_clz  +unsigned BSR64(uint64_t x)  
-__builtin_clzl+
 +  return 63-__builtin_clzll(x); 
 +}
 </code> </code>
  
 <WRAP info> <WRAP info>
-**NOTE:**  **<nowiki>__builtin_clz</nowiki>** and **<nowiki>__builtin_clzl</nowiki>** are undefined for 0 inputs.+**NOTE:**  Depending on architecture, the built-in functions include: 
 + 
 +  * <nowiki>__builtin_clz</nowiki> 
 +  * <nowiki>__builtin_clzl</nowiki> 
 +  <nowiki>__builtin_clzll</nowiki> 
  
-  * See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html+  * The returned value is undefined for 0 inputs. 
 +    * See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
  
 </WRAP> </WRAP>
Line 78: Line 86:
 ===== Using de Bruijn for 32-bit ===== ===== Using de Bruijn for 32-bit =====
  
 +<code cpp>
 u32 msbDeBruijn32(u32 v) u32 msbDeBruijn32(u32 v)
 { {
Line 137: Line 146:
 <code cpp> <code cpp>
 #include <intrin.h> #include <intrin.h>
 +unsigned BSR32(unsigned long x)
 +{
 +  bsr_idx_t idx;
 +  _BitScanReverse(&idx, x); // ignore bool retval
 +  return idx;
 +}
  
-unsigned char _BitScanForward+unsigned BSR64(uint64_t x)  
-   unsigned long * Index, +{ 
-   unsigned long Mask +  bsr_idx_t idx
-)+  _BitScanReverse64(&idxx); // ignore bool retval 
-unsigned char _BitScanForward64( +  return idx; 
-   unsigned long * Index+}
-   unsigned __int64 Mask +
-);+
 </code> </code>
  
chess/programming/msb_most_significant_bit.1635596462.txt.gz · Last modified: 2021/10/30 12:21 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki