LCOV - code coverage report
Current view: top level - include/linux - bitrev.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 0 6 0.0 %
Date: 2021-04-22 12:43:58 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : #ifndef _LINUX_BITREV_H
       3             : #define _LINUX_BITREV_H
       4             : 
       5             : #include <linux/types.h>
       6             : 
       7             : #ifdef CONFIG_HAVE_ARCH_BITREVERSE
       8             : #include <asm/bitrev.h>
       9             : 
      10             : #define __bitrev32 __arch_bitrev32
      11             : #define __bitrev16 __arch_bitrev16
      12             : #define __bitrev8 __arch_bitrev8
      13             : 
      14             : #else
      15             : extern u8 const byte_rev_table[256];
      16           0 : static inline u8 __bitrev8(u8 byte)
      17             : {
      18           0 :         return byte_rev_table[byte];
      19             : }
      20             : 
      21           0 : static inline u16 __bitrev16(u16 x)
      22             : {
      23           0 :         return (__bitrev8(x & 0xff) << 8) | __bitrev8(x >> 8);
      24             : }
      25             : 
      26           0 : static inline u32 __bitrev32(u32 x)
      27             : {
      28           0 :         return (__bitrev16(x & 0xffff) << 16) | __bitrev16(x >> 16);
      29             : }
      30             : 
      31             : #endif /* CONFIG_HAVE_ARCH_BITREVERSE */
      32             : 
      33             : #define __bitrev8x4(x)  (__bitrev32(swab32(x)))
      34             : 
      35             : #define __constant_bitrev32(x)  \
      36             : ({                                      \
      37             :         u32 ___x = x;                   \
      38             :         ___x = (___x >> 16) | (___x << 16); \
      39             :         ___x = ((___x & (u32)0xFF00FF00UL) >> 8) | ((___x & (u32)0x00FF00FFUL) << 8);       \
      40             :         ___x = ((___x & (u32)0xF0F0F0F0UL) >> 4) | ((___x & (u32)0x0F0F0F0FUL) << 4);       \
      41             :         ___x = ((___x & (u32)0xCCCCCCCCUL) >> 2) | ((___x & (u32)0x33333333UL) << 2);       \
      42             :         ___x = ((___x & (u32)0xAAAAAAAAUL) >> 1) | ((___x & (u32)0x55555555UL) << 1);       \
      43             :         ___x;                                                           \
      44             : })
      45             : 
      46             : #define __constant_bitrev16(x)  \
      47             : ({                                      \
      48             :         u16 ___x = x;                   \
      49             :         ___x = (___x >> 8) | (___x << 8);   \
      50             :         ___x = ((___x & (u16)0xF0F0U) >> 4) | ((___x & (u16)0x0F0FU) << 4); \
      51             :         ___x = ((___x & (u16)0xCCCCU) >> 2) | ((___x & (u16)0x3333U) << 2); \
      52             :         ___x = ((___x & (u16)0xAAAAU) >> 1) | ((___x & (u16)0x5555U) << 1); \
      53             :         ___x;                                                           \
      54             : })
      55             : 
      56             : #define __constant_bitrev8x4(x) \
      57             : ({                      \
      58             :         u32 ___x = x;   \
      59             :         ___x = ((___x & (u32)0xF0F0F0F0UL) >> 4) | ((___x & (u32)0x0F0F0F0FUL) << 4);       \
      60             :         ___x = ((___x & (u32)0xCCCCCCCCUL) >> 2) | ((___x & (u32)0x33333333UL) << 2);       \
      61             :         ___x = ((___x & (u32)0xAAAAAAAAUL) >> 1) | ((___x & (u32)0x55555555UL) << 1);       \
      62             :         ___x;                                                           \
      63             : })
      64             : 
      65             : #define __constant_bitrev8(x)   \
      66             : ({                                      \
      67             :         u8 ___x = x;                    \
      68             :         ___x = (___x >> 4) | (___x << 4);   \
      69             :         ___x = ((___x & (u8)0xCCU) >> 2) | ((___x & (u8)0x33U) << 2);       \
      70             :         ___x = ((___x & (u8)0xAAU) >> 1) | ((___x & (u8)0x55U) << 1);       \
      71             :         ___x;                                                           \
      72             : })
      73             : 
      74             : #define bitrev32(x) \
      75             : ({                      \
      76             :         u32 __x = x;    \
      77             :         __builtin_constant_p(__x) ?     \
      78             :         __constant_bitrev32(__x) :                      \
      79             :         __bitrev32(__x);                                \
      80             : })
      81             : 
      82             : #define bitrev16(x) \
      83             : ({                      \
      84             :         u16 __x = x;    \
      85             :         __builtin_constant_p(__x) ?     \
      86             :         __constant_bitrev16(__x) :                      \
      87             :         __bitrev16(__x);                                \
      88             :  })
      89             : 
      90             : #define bitrev8x4(x) \
      91             : ({                      \
      92             :         u32 __x = x;    \
      93             :         __builtin_constant_p(__x) ?     \
      94             :         __constant_bitrev8x4(__x) :                     \
      95             :         __bitrev8x4(__x);                               \
      96             :  })
      97             : 
      98             : #define bitrev8(x) \
      99             : ({                      \
     100             :         u8 __x = x;     \
     101             :         __builtin_constant_p(__x) ?     \
     102             :         __constant_bitrev8(__x) :                       \
     103             :         __bitrev8(__x)  ;                       \
     104             :  })
     105             : #endif /* _LINUX_BITREV_H */

Generated by: LCOV version 1.14