Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/bitops.h

    r7a0359b rb3f8fb7  
    2727 */
    2828
    29 /** @addtogroup generic
     29/** @addtogroup generic 
    3030 * @{
    3131 */
     
    3636#define KERN_BITOPS_H_
    3737
    38 #include <trace.h>
    3938
    40 #ifdef __32_BITS__
    41         #define fnzb(arg)  fnzb32(arg)
    42 #endif
     39/** Return position of first non-zero bit from left (i.e. [log_2(arg)]).
     40 *
     41 * If number is zero, it returns 0
     42 */
     43static inline int fnzb32(uint32_t arg)
     44{
     45        int n = 0;
    4346
    44 #ifdef __64_BITS__
    45         #define fnzb(arg)  fnzb64(arg)
    46 #endif
    47 
    48 /** Return position of first non-zero bit from left (32b variant).
    49  *
    50  * @return 0 (if the number is zero) or [log_2(arg)].
    51  *
    52  */
    53 NO_TRACE static inline uint8_t fnzb32(uint32_t arg)
    54 {
    55         uint8_t n = 0;
    56        
    5747        if (arg >> 16) {
    5848                arg >>= 16;
     
    7565        }
    7666       
    77         if (arg >> 1)
     67        if (arg >> 1) {
     68                arg >>= 1;
    7869                n += 1;
     70        }
    7971       
    8072        return n;
    8173}
    8274
    83 /** Return position of first non-zero bit from left (64b variant).
    84  *
    85  * @return 0 (if the number is zero) or [log_2(arg)].
    86  *
    87  */
    88 NO_TRACE static inline uint8_t fnzb64(uint64_t arg)
     75static inline int fnzb64(uint64_t arg)
    8976{
    90         uint8_t n = 0;
    91        
     77        int n = 0;
     78
    9279        if (arg >> 32) {
    9380                arg >>= 32;
     
    9885}
    9986
     87#define fnzb(x) fnzb32(x)
     88
    10089#endif
    10190
Note: See TracChangeset for help on using the changeset viewer.