modernc.org/cc@v1.0.1/v2/headers/linux_386/usr/include/i386-linux-gnu/bits/byteswap-16.h (about)

     1  /* Macros to swap the order of bytes in 16-bit integer values.
     2     Copyright (C) 2012-2018 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     <http://www.gnu.org/licenses/>.  */
    18  
    19  #ifndef _BITS_BYTESWAP_H
    20  # error "Never use <bits/byteswap-16.h> directly; include <byteswap.h> instead."
    21  #endif
    22  
    23  #ifdef __GNUC__
    24  # if __GNUC__ >= 2
    25  #  define __bswap_16(x) \
    26       (__extension__							      \
    27        ({ unsigned short int __v, __x = (unsigned short int) (x);	      \
    28  	 if (__builtin_constant_p (__x))				      \
    29  	   __v = __bswap_constant_16 (__x);				      \
    30  	 else								      \
    31  	   __asm__ ("rorw $8, %w0"					      \
    32  		    : "=r" (__v)					      \
    33  		    : "0" (__x)						      \
    34  		    : "cc");						      \
    35  	 __v; }))
    36  # else
    37  /* This is better than nothing.  */
    38  #  define __bswap_16(x) \
    39       (__extension__							      \
    40        ({ unsigned short int __x = (unsigned short int) (x);		      \
    41  	 __bswap_constant_16 (__x); }))
    42  # endif
    43  #else
    44  static __inline unsigned short int __bswap_16(unsigned short int __bsx)
    45  {
    46  	return __bswap_constant_16(__bsx);
    47  }
    48  #endif