The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/compat/linuxkpi/common/include/linux/log2.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2010 Isilon Systems, Inc.
    3  * Copyright (c) 2010 iX Systems, Inc.
    4  * Copyright (c) 2010 Panasas, Inc.
    5  * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice unmodified, this list of conditions, and the following
   13  *    disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  *
   18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   23  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   27  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   28  *
   29  * $FreeBSD$
   30  */
   31 #ifndef _LINUXKPI_LINUX_LOG2_H_
   32 #define _LINUXKPI_LINUX_LOG2_H_
   33 
   34 #include <linux/types.h>
   35 
   36 #include <sys/libkern.h>
   37 
   38 static inline unsigned long
   39 roundup_pow_of_two(unsigned long x)
   40 {
   41         return (1UL << flsl(x - 1));
   42 }
   43 
   44 static inline int
   45 is_power_of_2(unsigned long n)
   46 {
   47         return (n == roundup_pow_of_two(n));
   48 }
   49 
   50 static inline unsigned long
   51 rounddown_pow_of_two(unsigned long x)
   52 {
   53         return (1UL << (flsl(x) - 1));
   54 }
   55 
   56 #define ilog2(n)                                \
   57 (                                               \
   58         __builtin_constant_p(n) ? (             \
   59                 (n) < 1 ? -1 :                  \
   60                 (n) & (1ULL << 63) ? 63 :       \
   61                 (n) & (1ULL << 62) ? 62 :       \
   62                 (n) & (1ULL << 61) ? 61 :       \
   63                 (n) & (1ULL << 60) ? 60 :       \
   64                 (n) & (1ULL << 59) ? 59 :       \
   65                 (n) & (1ULL << 58) ? 58 :       \
   66                 (n) & (1ULL << 57) ? 57 :       \
   67                 (n) & (1ULL << 56) ? 56 :       \
   68                 (n) & (1ULL << 55) ? 55 :       \
   69                 (n) & (1ULL << 54) ? 54 :       \
   70                 (n) & (1ULL << 53) ? 53 :       \
   71                 (n) & (1ULL << 52) ? 52 :       \
   72                 (n) & (1ULL << 51) ? 51 :       \
   73                 (n) & (1ULL << 50) ? 50 :       \
   74                 (n) & (1ULL << 49) ? 49 :       \
   75                 (n) & (1ULL << 48) ? 48 :       \
   76                 (n) & (1ULL << 47) ? 47 :       \
   77                 (n) & (1ULL << 46) ? 46 :       \
   78                 (n) & (1ULL << 45) ? 45 :       \
   79                 (n) & (1ULL << 44) ? 44 :       \
   80                 (n) & (1ULL << 43) ? 43 :       \
   81                 (n) & (1ULL << 42) ? 42 :       \
   82                 (n) & (1ULL << 41) ? 41 :       \
   83                 (n) & (1ULL << 40) ? 40 :       \
   84                 (n) & (1ULL << 39) ? 39 :       \
   85                 (n) & (1ULL << 38) ? 38 :       \
   86                 (n) & (1ULL << 37) ? 37 :       \
   87                 (n) & (1ULL << 36) ? 36 :       \
   88                 (n) & (1ULL << 35) ? 35 :       \
   89                 (n) & (1ULL << 34) ? 34 :       \
   90                 (n) & (1ULL << 33) ? 33 :       \
   91                 (n) & (1ULL << 32) ? 32 :       \
   92                 (n) & (1ULL << 31) ? 31 :       \
   93                 (n) & (1ULL << 30) ? 30 :       \
   94                 (n) & (1ULL << 29) ? 29 :       \
   95                 (n) & (1ULL << 28) ? 28 :       \
   96                 (n) & (1ULL << 27) ? 27 :       \
   97                 (n) & (1ULL << 26) ? 26 :       \
   98                 (n) & (1ULL << 25) ? 25 :       \
   99                 (n) & (1ULL << 24) ? 24 :       \
  100                 (n) & (1ULL << 23) ? 23 :       \
  101                 (n) & (1ULL << 22) ? 22 :       \
  102                 (n) & (1ULL << 21) ? 21 :       \
  103                 (n) & (1ULL << 20) ? 20 :       \
  104                 (n) & (1ULL << 19) ? 19 :       \
  105                 (n) & (1ULL << 18) ? 18 :       \
  106                 (n) & (1ULL << 17) ? 17 :       \
  107                 (n) & (1ULL << 16) ? 16 :       \
  108                 (n) & (1ULL << 15) ? 15 :       \
  109                 (n) & (1ULL << 14) ? 14 :       \
  110                 (n) & (1ULL << 13) ? 13 :       \
  111                 (n) & (1ULL << 12) ? 12 :       \
  112                 (n) & (1ULL << 11) ? 11 :       \
  113                 (n) & (1ULL << 10) ? 10 :       \
  114                 (n) & (1ULL <<  9) ?  9 :       \
  115                 (n) & (1ULL <<  8) ?  8 :       \
  116                 (n) & (1ULL <<  7) ?  7 :       \
  117                 (n) & (1ULL <<  6) ?  6 :       \
  118                 (n) & (1ULL <<  5) ?  5 :       \
  119                 (n) & (1ULL <<  4) ?  4 :       \
  120                 (n) & (1ULL <<  3) ?  3 :       \
  121                 (n) & (1ULL <<  2) ?  2 :       \
  122                 (n) & (1ULL <<  1) ?  1 :       \
  123                 (n) & (1ULL <<  0) ?  0 :       \
  124                 -1) :                           \
  125         (sizeof(n) <= 4) ?                      \
  126         fls((u32)(n)) - 1 : flsll((u64)(n)) - 1 \
  127 )
  128 
  129 #define order_base_2(x) ilog2(roundup_pow_of_two(x))
  130 
  131 #endif  /* _LINUXKPI_LINUX_LOG2_H_ */

Cache object: a109c64eb923b7b584c9da52de6fe228


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.