LCOV - code coverage report
Current view: top level - usr/include/x86_64-linux-gnu/bits - byteswap.h (source / functions) Hit Total Coverage
Test: skiboot.info Lines: 6 6 100.0 %
Date: 2024-01-02 21:04:04 Functions: 3 3 100.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* Macros and inline functions to swap the order of bytes in integer values.
       2                 :            :    Copyright (C) 1997-2022 Free Software Foundation, Inc.
       3                 :            :    This file is part of the GNU C Library.
       4                 :            : 
       5                 :            :    The GNU C Library is free software; you can redistribute it and/or
       6                 :            :    modify it under the terms of the GNU Lesser General Public
       7                 :            :    License as published by the Free Software Foundation; either
       8                 :            :    version 2.1 of the License, or (at your option) any later version.
       9                 :            : 
      10                 :            :    The GNU C Library is distributed in the hope that it will be useful,
      11                 :            :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      12                 :            :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13                 :            :    Lesser General Public License for more details.
      14                 :            : 
      15                 :            :    You should have received a copy of the GNU Lesser General Public
      16                 :            :    License along with the GNU C Library; if not, see
      17                 :            :    <https://www.gnu.org/licenses/>.  */
      18                 :            : 
      19                 :            : #if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H
      20                 :            : # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
      21                 :            : #endif
      22                 :            : 
      23                 :            : #ifndef _BITS_BYTESWAP_H
      24                 :            : #define _BITS_BYTESWAP_H 1
      25                 :            : 
      26                 :            : #include <features.h>
      27                 :            : #include <bits/types.h>
      28                 :            : 
      29                 :            : /* Swap bytes in 16-bit value.  */
      30                 :            : #define __bswap_constant_16(x)                                  \
      31                 :            :   ((__uint16_t) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
      32                 :            : 
      33                 :            : static __inline __uint16_t
      34                 :          2 : __bswap_16 (__uint16_t __bsx)
      35                 :            : {
      36                 :            : #if __GNUC_PREREQ (4, 8)
      37                 :          2 :   return __builtin_bswap16 (__bsx);
      38                 :            : #else
      39                 :            :   return __bswap_constant_16 (__bsx);
      40                 :            : #endif
      41                 :            : }
      42                 :            : 
      43                 :            : /* Swap bytes in 32-bit value.  */
      44                 :            : #define __bswap_constant_32(x)                                  \
      45                 :            :   ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) \
      46                 :            :    | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))
      47                 :            : 
      48                 :            : static __inline __uint32_t
      49                 :         52 : __bswap_32 (__uint32_t __bsx)
      50                 :            : {
      51                 :            : #if __GNUC_PREREQ (4, 3)
      52                 :         52 :   return __builtin_bswap32 (__bsx);
      53                 :            : #else
      54                 :            :   return __bswap_constant_32 (__bsx);
      55                 :            : #endif
      56                 :            : }
      57                 :            : 
      58                 :            : /* Swap bytes in 64-bit value.  */
      59                 :            : #define __bswap_constant_64(x)                  \
      60                 :            :   ((((x) & 0xff00000000000000ull) >> 56)      \
      61                 :            :    | (((x) & 0x00ff000000000000ull) >> 40)    \
      62                 :            :    | (((x) & 0x0000ff0000000000ull) >> 24)    \
      63                 :            :    | (((x) & 0x000000ff00000000ull) >> 8)     \
      64                 :            :    | (((x) & 0x00000000ff000000ull) << 8)     \
      65                 :            :    | (((x) & 0x0000000000ff0000ull) << 24)    \
      66                 :            :    | (((x) & 0x000000000000ff00ull) << 40)    \
      67                 :            :    | (((x) & 0x00000000000000ffull) << 56))
      68                 :            : 
      69                 :            : __extension__ static __inline __uint64_t
      70                 :          2 : __bswap_64 (__uint64_t __bsx)
      71                 :            : {
      72                 :            : #if __GNUC_PREREQ (4, 3)
      73                 :          2 :   return __builtin_bswap64 (__bsx);
      74                 :            : #else
      75                 :            :   return __bswap_constant_64 (__bsx);
      76                 :            : #endif
      77                 :            : }
      78                 :            : 
      79                 :            : #endif /* _BITS_BYTESWAP_H */

Generated by: LCOV version 1.14