LCOV - code coverage report
Current view: top level - usr/include/bits - byteswap.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2024-12-20 21:24:02 Functions: 0 0 -

          Line data    Source code
       1             : /* Macros and inline functions to swap the order of bytes in integer values.
       2             :    Copyright (C) 1997-2023 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          14 : __bswap_16 (__uint16_t __bsx)
      35             : {
      36             : #if __GNUC_PREREQ (4, 8)
      37          14 :   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             : __bswap_32 (__uint32_t __bsx)
      50             : {
      51             : #if __GNUC_PREREQ (4, 3)
      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             : __bswap_64 (__uint64_t __bsx)
      71             : {
      72             : #if __GNUC_PREREQ (4, 3)
      73             :   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