LCOV - code coverage report
Current view: top level - include/linux - bitrev.h (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 6 0.0 %
Date: 2022-03-28 13:20:08 Functions: 0 0 -
Branches: 0 0 -

           Branch data     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